对于ansible,如何设置可由一个角色中的其他角色使用的var / fact

时间:2015-04-21 09:59:37

标签: ansible

我正在使用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模块,但它不起作用。

所以我想知道,如果有人对此提出一些建议吗?

2 个答案:

答案 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 }