我正在使用ansible做一些操作工作。我有这样一本剧本
### a.yaml
---
- hosts: host_a
user: root
tasks:
- name: task1
git: repo=1.git
register: res
- set_fact:
to_cont: res|changed
- name: task2
script: /do/some/thing.sh
when: to_cont
- hosts: host2
user: root
roles:
- { role: web, when: to_cont }
如上所述,我只想让角色web在某些条件下运行,我尝试了set_fact模块,但它不起作用。
所以我想知道,如果有人对此提出一些建议吗?
答案 0 :(得分:0)
在任务1中,您已经注册(因此更改)变量res
。无需使用set_fact
。
如果检出/克隆了git repo,则注册变量res
。然后将运行第二个任务。
- hosts: host_a
user: root
tasks:
- name: task1
git: repo=1.git
register: res
- name: task2
script: /do/some/thing.sh
when: res.changed
如果已经签出了git存储库,则不会更改变量res
,也不会运行第二个任务。
答案 1 :(得分:0)
我尝试了以下方法,不确定是否有更好的方法。
---
- hosts: localhost
user: root
tasks:
- name: Update Code for Web Server
git: 1.git
register: result
- set_fact:
con_fact: "{{ result | changed }}"
- name: Set Flag
shell: "echo {{ con_fact }} > /tmp/an_dy.yaml"
- name: Compress the code
shell: /do/some/thing.sh
when: con_fact
- hosts: web
user: root
pre_tasks:
- shell: "cat /tmp/an_dy.yaml"
delegate_to: localhost
register: con_fact
roles:
- { role: web, when: con_fact.stdout.find('True') != -1 }