如何从剧本更改play_hosts

问题描述 投票:0回答:1

我有一个包含两个剧本的文件。库存是动态生成的,无法在开始播放书之前进行更改。

使用命令运行:

ansible-playbook -b adapter.yml --limit=host_group

adapter.yml

- name: Prepare stage
  hosts: all
  # The problem is that the inventory contains hosts in the format "x.x.x.x" ie physical address.
  # I need to run a third-party role.
  # But, it needs hosts in the format "instance-alias", that is, the name of the instance.

  tasks:
  # for this I create a new host group
  - name: Add host in new format
    add_host:
      name: "{{ item.alias }}"
      host: "{{ item.ansible_host }}"
      groups: new_format_hosts
    with_items: "{{ groups.all }}"

 # I create a new play host group that matches the previous one in a new format
  - name: Compose new play_hosts group
    add_host:
      name: "{{ item.alias }}"
      groups: new_play_hosts
    when: item.ansible_host in play_hosts
    with_items: "{{ groups.all }}"

- name: Management stage
  hosts: new_format_hosts
  # in this playbook I want to change the composition
  # of the target hosts and launch an external role
  vars:
    hostvars: "{{ hostvars }}"
    play_hosts: "{{ groups.new_play_hosts }}" # THIS DONT WORK

  - name: Run external role
    import_role:
      name: role_name
      tasks_from: file_name

但是我无法更改play_hosts,因此启动的角色仅使用新的主机。

如何解决?

ansible ansible-facts
1个回答
0
投票

这对我有用:

- name: Prepare stage
  hosts: localhost

  tasks:
  - name: Show hostavers
    debug:
      msg: "{{ hostvars[item]['ansible_host'] }}"
    with_items: "{{ groups.all }}"

  # for this I create a new host group
  - name: Add host in new format
    add_host:
      name: "{{ hostvars[item].alias }}"
      ansible_host: "{{ hostvars[item].ansible_host }}"
      groups: new_format_hosts
    with_items: "{{ groups.all }}"

- name: Management stage
  hosts: new_format_hosts
  tasks:
  - name: Ping New Format Hosts
    ping:

  - name: Show ansible_host for each host
    debug:
      var: ansible_host

  - name: Show playhosts
    debug:
      var: play_hosts
    delegate_to: localhost
    run_once: yes

当然,这假定为所有主机都设置了aliasansible_host

主持人是:

AnsibleTower ansible_host=192.168.124.8 alias=fred
192.168.124.111 ansible_host=192.168.124.111 alias=barney
jaxsatB ansible_host=192.168.124.111 alias=wilma

该剧本的相关输出为:

PLAY [Management stage] *****************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************
Friday 29 May 2020  18:09:26 -0400 (0:00:00.057)       0:00:01.332 ************ 
ok: [fred]
ok: [barney]
ok: [wilma]

TASK [New Format Hosts] *****************************************************************************************************************************************************************
Friday 29 May 2020  18:09:30 -0400 (0:00:04.308)       0:00:05.641 ************ 
ok: [barney]
ok: [wilma]
ok: [fred]

TASK [Show ansible_host] ****************************************************************************************************************************************************************
Friday 29 May 2020  18:09:30 -0400 (0:00:00.450)       0:00:06.091 ************ 
ok: [fred] => {
    "ansible_host": "192.168.124.8"
}
ok: [barney] => {
    "ansible_host": "192.168.124.111"
}
ok: [wilma] => {
    "ansible_host": "192.168.124.111"
}

TASK [Show playhosts] *******************************************************************************************************************************************************************
Friday 29 May 2020  18:09:30 -0400 (0:00:00.109)       0:00:06.200 ************ 
ok: [fred -> localhost] => {
    "play_hosts": [
        "fred", 
        "barney", 
        "wilma"
    ]
}

PLAY RECAP ******************************************************************************************************************************************************************************
barney                     : ok=3    changed=0    unreachable=0    failed=0   
fred                       : ok=4    changed=0    unreachable=0    failed=0   
localhost                  : ok=3    changed=1    unreachable=0    failed=0   
wilma                      : ok=3    changed=0    unreachable=0    failed=0   

Friday 29 May 2020  18:09:30 -0400 (0:00:00.030)       0:00:06.231 ************ 

=============================================================================== 

您不需要设置play_hosts变量。在第二个播放中由hosts: new_format_hosts行设置。

© www.soinside.com 2019 - 2024. All rights reserved.