我在ansible的文件中有以下内容:
- name: Run the Django syncdb command
django_manage:
command: syncdb
app_path: '{{ application_path }}'
virtualenv: '{{ virtualenv_path }}'
settings: '{{ django_settings_file }}'
environment: django_environment
when: run_django_syncdb
tags: django
- name: Run Django South migrations
django_manage:
command: migrate
app_path: '{{ application_path }}'
virtualenv: '{{ virtualenv_path }}'
settings: '{{ django_settings_file }}'
environment: django_environment
when: run_django_south_migration
tags: django
运行以下行时:
$ ansible-playbook development.yml --tags "django"
这两个命令都会运行。有没有办法利用上面一行中的when
子句只运行其中一个命令?
答案 0 :(得分:2)
在你的情况下,我宁愿使用标签。您可能错过的是您可以将列表传递给标签。这将是分组任务的常用方法:
- name: Run the Django syncdb command
django_manage:
command: syncdb
app_path: '{{ application_path }}'
virtualenv: '{{ virtualenv_path }}'
settings: '{{ django_settings_file }}'
environment: django_environment
tags:
- django
- django_sync
- name: Run Django South migrations
django_manage:
command: migrate
app_path: '{{ application_path }}'
virtualenv: '{{ virtualenv_path }}'
settings: '{{ django_settings_file }}'
environment: django_environment
tags:
- django
- django_south
因此,如果您要同时执行这两项任务,请拨打ansible-playbook development.yml --tags django
,或者通过ansible-playbook development.yml --tags django_south
我将变量视为机器参数而不是任务参数。您宁愿标记要执行的任务而不是设置机器参数(因为它可能会随着每次调用而改变)
使用条件时,您将始终在日志文件中看到task skipped
,这很烦人;)
答案 1 :(得分:1)
如果要运行任务,run_django_syncdb
和run_django_south_migration
,您似乎检查了两个变量。
这些可以通过-e
调用ansible传递:
$ ansible-playbook development.yml --tags "django" -e "run_django_syncdb=true"
$ ansible-playbook development.yml --tags "django" -e "run_django_south_migration=false"
您未提及的变量将设置为您为其设置的默认值。
如果要设置多个变量,请按空格分隔添加它们:
$ ansible-playbook development.yml --tags "django" -e "run_django_syncdb=true run_django_south_migration=false"