如何在处理库存文件中的主机之前运行内务处理任务?

时间:2017-07-12 15:32:43

标签: ansible

我的Playbook中的前两个任务是在localhost上运行的,并配置了run_once: yes。但是,它们仍然针对我的库存文件中的第一个条目执行:

$ ansible-playbook -i hosts add_user.yaml
ticket number: 678
Junos commit comment: test change
Junos configuration file: users.conf

PLAY [Apply configuration-template to Juniper devices.] ************************

TASK [Update CVS] **************************************************************
changed: [10.10.10.111 -> localhost]

TASK [Create directory /home/users/ansible/678 for conf diffs and debugging logs] ***
changed: [10.10.10.111 -> localhost]

TASK [Change Junipers configuration] *******************************************
changed: [10.10.10.112] => (item=/home/user/playbooks/users.conf)
changed: [10.10.10.111] => (item=/home/user/playbooks/10.10.10.111/users.conf)

PLAY RECAP *********************************************************************
10.10.10.111              : ok=3    changed=3    unreachable=0    failed=0
10.10.10.112              : ok=1    changed=1    unreachable=0    failed=0

$

PLAY RECAP所示,10.10.10.111执行了三项任务。有没有更优雅的方式来做到这一点?我想一个选项是将localhost添加到广告资源文件,然后运行条件类似于when: inventory_hostname == "localhost"的前两个任务和带有when: inventory_hostname =! "localhost"的第三个任务?但是,在对库存文件中的条目运行任务之前,是否可以运行此类内务处理任务?

1 个答案:

答案 0 :(得分:1)

您可以将您的剧本分成两部分,如下所示:

---
- hosts: localhost
  vars_prompt:
    - name: "ticket_number"
      prompt: "ticket number"
      private: no
  tasks:
    - set_fact:
        ticket_number: "{{ ticket_number }}"
    # housekeeping tasks

- hosts: servers
  tasks:
    - debug:
        var: hostvars.localhost.ticket_number
    # servers config tasks

编辑:我添加了一个vars_promptset_fact相结合,以显示如何使用hostvars从一个游戏访问另一个游戏。