我成功传递了代码,因为该剧本只运行我指定的任务tags: always
分配我正在传递的标记的任务不会运行。
三项测试任务:
- name: debug if tag was provided
debug: var=tags
tags: always
- name: if tag restart was provided
debug: var=tags
tags: restart
- name: if no tag was provided
debug: var=tags
当我将'restart'作为标记传递时,只运行第一个任务,所有三个任务在没有提供标记时运行。我想让中间人在重启时运行。
有没有办法看到剧本看作标签的内容?
调试的输出是:
{
"tags": "VARIABLE IS NOT DEFINED!"
}
以下是我通过api发送标签的方式
Options = namedtuple('Options', ['connection', 'forks', 'become', 'become_method', 'become_user', 'check',
'listhosts', 'listtasks', 'listtags', 'syntax', 'module_path', 'diff', 'tags'])
options = Options(connection='ssh', forks=5, become=None, become_method=None, become_user=None, check=False,
listhosts=False, listtasks=False, listtags=False, syntax=False, module_path="", diff=True, tags=_tag)
PlaybookExecutor(playbooks=[playbook_path], inventory=inventory, variable_manager=variable_manager,
loader=loader, options=options, passwords=passwords)
_tag 是一个字符串
答案 0 :(得分:0)
always
是special tag。
除非特别跳过(
,否则会有一个始终运行任务的特殊always标记--skip-tags always
)
因此,如果您在指定restart
标记时不希望它运行,请为第一个任务使用不同的标记名称。
答案 1 :(得分:0)
有没有办法看到剧本看作标签的内容?
由于Ansible 2.5(目前在GitHub上作为devel
分支提供),您可以使用新的magic variable ansible_run_tags
。
例如ansible-playbook playbook.yml --tags restart
:
TASK [debug if tag was provided] ***************************************************************************************************************
ok: [localhost] => {
"ansible_run_tags": [
"restart"
]
}
TASK [if tag restart was provided] *************************************************************************************************************
ok: [localhost] => {
"ansible_run_tags": [
"restart"
]
}
如果您未为ansible-playbook
提供代码,则此变量的值为all
:
TASK [debug if tag was provided] ***************************************************************************************************************
ok: [localhost] => {
"ansible_run_tags": [
"all"
]
}
TASK [if tag restart was provided] *************************************************************************************************************
ok: [localhost] => {
"ansible_run_tags": [
"all"
]
}
TASK [if no tag was provided] ******************************************************************************************************************
ok: [localhost] => {
"ansible_run_tags": [
"all"
]
}
答案 2 :(得分:0)
看起来问题是我将标记作为字符串传递,API将其作为列表读取。当我将标记设置为python集时,它运行时没有问题
TASK = os.environ['TASK'].lower()
if TASK in authorized_tags:
_tasks = 'none'
_tag = {TASK}
execute_playbook()