2017-01-13 6 views
0

私はAnsibleを初めて使う人です。 LOCAL_HOSTNAMEがすでにdb01の値が割り当てられ、この例では連続した整数をホスト名として割り当てるためのループ

--- 
- hosts: dbservers 
    remote_user: testuser1 
    become: yes 
    become_method: sudo 

    vars: 
    LOCAL_HOSTNAME: 'db01' 
    LOCAL_DOMAIN_NAME: 'ansibletest.com' 

    tasks: 
    # Checks and removed the existing occurences of <IP hostname FQDN> from /etc/hosts 
    - name: Remove occurences of the existing IP 
     lineinfile: dest=/etc/hosts 
        regexp='{{ hostvars[item].ansible_default_ipv4.address }}' 
        state=absent 
     when: hostvars[item].ansible_default_ipv4.address is defined 
     with_items: "{{ groups['dbservers'] }}" 

    # Adds the IP in the format <IP hostname FQDN> to /etc/hosts 
    - name: Add the IP and hostname to the hosts file 
     lineinfile: dest=/etc/hosts 
        regexp='.*{{ item }}$' 
        line="{{ hostvars[item].ansible_default_ipv4.address }} {{ LOCAL_HOSTNAME }} {{ LOCAL_HOSTNAME }}.{{ LOCAL_DOMAIN_NAME }}" 
        state=present 
     when: hostvars[item].ansible_default_ipv4.address is defined 
     with_items: "{{ groups['dbservers'] }}" 

    - name: Remove HOSTNAME occurences from /etc/sysconfig/network 
     lineinfile: dest=/etc/sysconfig/network 
        regexp='^HOSTNAME' 
        state=absent 
     when: hostvars[item].ansible_default_ipv4.address is defined 
     with_items: "{{ groups['dbservers'] }}" 

    - name: Add new HOSTNAME to /etc/sysconfig/network 
     lineinfile: dest=/etc/sysconfig/network 
        regexp='^HOSTNAME=' 
        line="HOSTNAME={{ LOCAL_HOSTNAME }}.{{ LOCAL_DOMAIN_NAME }}" 
        state=present 
     when: hostvars[item].ansible_default_ipv4.address is defined 
     with_items: "{{ groups['dbservers'] }}" 

    - name: Set up the hostname 
     hostname: name={{ LOCAL_HOSTNAME }}.{{ LOCAL_DOMAIN_NAME }} 

:私は、リモート・サーバーのホスト名を変更し、次の脚本を持っています。そして、このシナリオでは、dbserversグループは一つだけのサーバました:

[dbservers] 
192.168.1.93 

しかし、私はまた、ウェブサーバに指定されている2台の他のサーバーがあります。

[webservers] 
192.168.1.95 
192.168.1.96 

[dbservers] 
192.168.1.93 

を目的は、それらに名前を付けることですweb01.domain,web02.domainなどとなります。

は、with_sequenceを用いて達成されると思われる。

私の質問は、ループ内に2つの変数を使用することは可能ですか?下記の擬似コードの線に沿って何か:

i=1 
for host in webservers: 
    open host(/etc/hosts): 
     add "IP<space>HOSTNAME{i}<space>"<space>"HOSTNAME{i}.FQDN" 
     i++ 

これはプレイブックを使用して達成することができたか、私は間違った方法で問題に近づいていますか?

答えて

1

最初にインデックス付きのホスト名を生成し、それをhostfactとして定義し、後で他のサーバのホストファイルを埋めるために使用します。

- hosts: webservers 
    gather_facts: no 
    tasks: 
    - set_fact: 
     indexed_hostname: "{{ 'web{0:02d}'.format(play_hosts.index(inventory_hostname)+1) }}" 

- hosts: dbservers 
    gather_facts: no 
    tasks: 
    - debug: 
     msg: "{{ hostvars[item].indexed_hostname }}" 
     with_items: "{{ groups['webservers'] }}" 

また、with_indexed_itemsなどがあります。

関連する問題