可以在YAML文件中使用抽象吗?
是否可以使用可以在YAML文件中使用抽象吗?,yaml,abstraction,Yaml,Abstraction,是否可以使用参数或抽象来最小化YAML文件中的重复代码 我正在编写一个触发部署的YAML文件,在部署之前和之后,我希望调用一个空闲通道,指示部署正在开始、完成,以及部署失败的情况 这是我写的,但感觉太冗长了: example_deploy: - call: notify in: msgText: "Deployment starting for environment *${environment}*" - try: - ${oneops.envi
参数
或抽象
来最小化YAML文件中的重复代码
我正在编写一个触发部署的YAML文件,在部署之前和之后,我希望调用一个空闲通道,指示部署正在开始、完成,以及部署失败的情况
这是我写的,但感觉太冗长了:
example_deploy:
- call: notify
in:
msgText: "Deployment starting for environment *${environment}*"
- try:
- ${oneops.environmentCommitAndDeploy(environment = 'production', platform = '${platform}', deployAllPlatforms = false )}
error:
- log: "Error trying to deploy: ${lastError.cause}"
- call: notify
in:
msgText: " :fire: Deployment failed for environment *${environment}* http://concord.com/#/process/${txId}/log"
- exit
- call: notify
in:
msgText: " :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log"
现在,如果我想让example\u deploy\u 2
做同样的事情,我需要重写所有的代码吗?或者有没有一种方法可以让“函数”或抽象YAML的重复部分
更新
我曾使用call
来抽象对slack的调用,但现在我想知道是否可以对slack进行一般调用并动态更新消息-因为现在我正在重复传递给定义为call
ed的代码块的参数
示例
example_deploy:
- call: slack_start_deploy
- try:
- ${transitionVariableUpdate(platform = '${platform}', environment = '${environment}', component = '${component_ear}' variables = { appVersion = '${BRANCH_NAME}-${BUILD_NUMBER}' })}
- ${environmentCommitAndDeploy(environment = 'qa', platform = '${platform}', deployAllPlatforms = false )}
error:
- log: "Error trying to deploy: ${lastError.cause}"
- call: slack_deploy_error
- exit
- call: slack_deploy_success
slack_start_deploy:
- slack.postMessage:
text: "${entryPoint} Deployment starting for environment *${environment}*"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_error:
- slack.postMessage:
text: " :fire: ${entryPoint} Deployment failed for environment *${environment}* http://concord.com/#/process/${txId}/log"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_success:
- slack.postMessage:
text: " :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
YAML规范中唯一允许 尽量减少重复就是使用 在一个节点上 使用别名引用该节点。这适用于两个叶节点 (即任何类型的标量值)和集合节点 (映射、序列)。锚定集合的别名 “替换”集合下的整个子树
除此之外,还有
您的示例无效YAML错误:
是一个与前面的序列项缩进相同的映射项,-call:
是一个与exampel\u deplay:
键缩进相同的序列项。你不能把这样的收藏混合在一起YAML@anthon别告诉我细节了,我对大局感兴趣。
example_deploy:
- call: slack_start_deploy
- try:
- ${transitionVariableUpdate(platform = '${platform}', environment = '${environment}', component = '${component_ear}' variables = { appVersion = '${BRANCH_NAME}-${BUILD_NUMBER}' })}
- ${environmentCommitAndDeploy(environment = 'qa', platform = '${platform}', deployAllPlatforms = false )}
error:
- log: "Error trying to deploy: ${lastError.cause}"
- call: slack_deploy_error
- exit
- call: slack_deploy_success
slack_start_deploy:
- slack.postMessage:
text: "${entryPoint} Deployment starting for environment *${environment}*"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_error:
- slack.postMessage:
text: " :fire: ${entryPoint} Deployment failed for environment *${environment}* http://concord.com/#/process/${txId}/log"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_success:
- slack.postMessage:
text: " :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
example_deploy:
- call: slack_start_deploy
- try:
- ${transitionVariableUpdate(platform = '${platform}', environment = '${environment}', component = '${component_ear}' variables = { appVersion = '${BRANCH_NAME}-${BUILD_NUMBER}' })}
- ${environmentCommitAndDeploy(environment = 'qa', platform = '${platform}', deployAllPlatforms = false )}
error:
- log: "Error trying to deploy: ${lastError.cause}"
- call: slack_deploy_error
- exit
- call: slack_deploy_success
slack_start_deploy:
- slack.postMessage: &pm
text: "${entryPoint} Deployment starting for environment *${environment}*"
channelId: ${alerts}
username: ${slackname}
iconEmoji: ${slackEmojiConcord}
slack_deploy_error:
- slack.postMessage:
text: " :fire: ${entryPoint} Deployment failed for environment *${environment}* http://concord.com/#/process/${txId}/log"
<<: *pm
slack_deploy_success:
- slack.postMessage:
text: " :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log"
<<: *pm
import sys
from pathlib import Path
import ruamel.yaml
example = Path('example.yaml')
yaml = ruamel.yaml.YAML(typ='safe')
yaml.default_flow_style = False
data = yaml.load(example)
yaml.dump(data, sys.stdout)
error:
- log: 'Error trying to deploy: ${lastError.cause}'
- call: slack_deploy_error
- exit
- call: slack_deploy_success
example_deploy:
- call: slack_start_deploy
- try:
- ${transitionVariableUpdate(platform = '${platform}', environment = '${environment}',
component = '${component_ear}' variables = { appVersion = '${BRANCH_NAME}-${BUILD_NUMBER}'
})}
- ${environmentCommitAndDeploy(environment = 'qa', platform = '${platform}', deployAllPlatforms
= false )}
slack_deploy_error:
- slack.postMessage:
channelId: ${alerts}
iconEmoji: ${slackEmojiConcord}
text: ' :fire: ${entryPoint} Deployment failed for environment *${environment}*
http://concord.com/#/process/${txId}/log'
username: ${slackname}
slack_deploy_success:
- slack.postMessage:
channelId: ${alerts}
iconEmoji: ${slackEmojiConcord}
text: ' :party: Deployment succeeded for environment *${environment}* http://concord.com/#/process/${txId}/log'
username: ${slackname}
slack_start_deploy:
- slack.postMessage:
channelId: ${alerts}
iconEmoji: ${slackEmojiConcord}
text: ${entryPoint} Deployment starting for environment *${environment}*
username: ${slackname}