

現在、Ansibleについて勉強中の者です。プログラミングもほぼ初心者レベルです。

Ansibleで複数のLinuxサーバへの設定変更を行えるように検証を進めています。  
・複数のターゲットに異なる設定を行い、サービスやOSの再起動を行いたい。  
・将来的にはエクセルからplaybopokの作成をし、利用者が簡単に行えるようにと考えております。

以下のようなやり方を考えましたが上手くいきません。  
ターゲットのアドレスを変数にし、別ファイルに作成して呼び出すやり方です。  
ターゲット分のファイルは必要になりますが簡単に作成できるかと思いました。  
呼び出すファイルにモジュールのパラメータ値も変数として格納したら同じように呼び出そうとしたがうまくいきません。

以下に実際の構文を載せます。この内容で設定値まで一緒に変数として格納はできないのでしょうか。もしくはモジュール内ファイル/変数の呼び出しが必要になるのでしょうか。。。  
プログラミング、構成管理ツール等お詳しい方アドバイスを頂けないでしょうか。

[code]

    ・inventoryファイル
    Client01
    
    ・Client01.yml
    ---
    ipaddr: 192.168.0.1
    new_ipaddr: 172.16.0.10
    new_prefix: 24
    new_gateway: 172.16.0.200
    
    ・playbook.yml
    ---
    - hosts: all
      vars_files:
        - vars/{{ansible_hostname}}.yml
      tasks:
      - name:ipv4設定
    　lineinfile:
        dest: /etc/sysconfig/network-scripts/ifcfg-eth0
        line: "{{ item }}"
      with_items:
        - IPADDR="new_ipaddr"
        - PREFIX="new_prefix"
        - GATEWAY="new_gateway"
    
[/code]

●余談  
最初はimport_playbookで簡単にできるかと思ったのですが読み出し元のplaybookにはhost指定ができませんでした。  
読み出し先は基本はいじらず、読み出し元に対象や必要な読み出しplaybookの変更をすれば簡単とも思いやりましたが簡単にはいきませんね。。。


CC BY-SA 4.0
2020-02-03T14:28:03.390
62750
2020-02-10T09:39:15.217
2020-02-05T13:56:21.610
37705
37705
question
python linux ansible yaml 構成管理
Ansible 複数ターゲットへの設定変更について


ホスト毎（ターゲット毎）に変わる値は、host_vars が利用できます。

inventory に書いたホスト名と同じファイル名の yaml ファイルを host_vars
ディレクトリに置いておくことで、対象のホストをターゲットにした時のタスクは、host_vars の yaml ファイルの設定を使います。

ホスト毎（ターゲット毎）に変わる値は、この様に対処はできると思いますが、質問にあるような接続しているホストのIPアドレスを変更するようなタスクは、また別の問題があると思います。

./inventory

[code]

    [servers]
    client01 ansible_host=192.168.56.30 ansible_user=ansible
    client02 ansible_host=192.168.56.31 ansible_user=ansible
    
[/code]

もし、IPアドレスを変えるような場合は、ansible
用の管理LANと、実際に設定する運用LANのIPアドレスの様な感じにするのが楽だとは思いますが…（やりたいこととは違うようにも）

./playbook.yml

[code]

    ---
    - hosts : all
    
      tasks :
      - name : test setting.
        lineinfile :
          dest   : "/tmp/test_setting"
          line   : "{{ item }}"
          create : yes
        with_items :
        - IPADDR="{{ new_ipaddr }}"
        - PREFIX="{{ new_prefix }}"
        - GATEWAY="{{ new_gateway }}"
    
[/code]

./host_vars/client01.yml

[code]

    ---
    new_ipaddr  : 172.16.1.10
    new_prefix  : 24
    new_gateway : 172.16.1.200
    
[/code]

./host_vars/client01.yml

[code]

    ---
    new_ipaddr  : 172.16.2.10
    new_prefix  : 24
    new_gateway : 172.16.2.200
    
[/code]

playbook 実行

[code]

    $ ansible-playbook -i inventory playbook.yml
    
    PLAY [all] *****************************************************************************************************
    
    TASK [Gathering Facts] *****************************************************************************************
    ok: [client02]
    ok: [client01]
    
    TASK [test setting.] *******************************************************************************************
    changed: [client02] => (item=IPADDR="172.16.2.10")
    changed: [client01] => (item=IPADDR="172.16.1.10")
    changed: [client02] => (item=PREFIX="24")
    changed: [client01] => (item=PREFIX="24")
    changed: [client02] => (item=GATEWAY="172.16.2.200")
    changed: [client01] => (item=GATEWAY="172.16.1.200")
    
    PLAY RECAP *****************************************************************************************************
    client01                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    client02                   : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
[/code]


CC BY-SA 4.0
2020-02-10T09:39:15.217
62927
2020-02-10T09:39:15.217
4419
62750
answer