動的に割り当てられたIPをifcfg-eth0ファイルに追加して、仮想マシンを永久に割り当てたいと思います。register: eth0
実際のIPアドレス値を使用して最後の行に入力するのに問題があります。line: "IPADDR=register.stdout"
---
- hosts: all
become: yes
tasks:
- name: getting ip address of eth0
shell: ip r l | grep -e eth0 | grep default | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
register: eth0
- shell: rm -f /etc/sysconfig/network-scripts/ifcfg-eth0
- file: path="/etc/sysconfig/network-scripts/ifcfg-eth0" state=touch
- blockinfile:
dest: "/etc/sysconfig/network-scripts/ifcfg-eth0"
block: |
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
IPADDR=
NETMASK=255.255.255.0
GATEWAY=
- name: adding ip in ifcfg-eth0
lineinfile:
dest: "/etc/sysconfig/network-scripts/ifcfg-eth0"
regexp: "IPADDR="
line: "IPADDR=register.stdout"
間違い:
[tempuser@testing ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# BEGIN ANSIBLE MANAGED BLOCK
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
IPADDR=register.stdout
NETMASK=255.255.255.0
GATEWAY=
# END ANSIBLE MANAGED BLOCK[tempuser@testing ~]$
答え1
存在しない「register」という名前を使用してレジスタ変数eth0にアクセスしようとしています。
Ansibleに変数を登録すると、登録する変数の名前もansibleに通知されます。あなたの場合eth0:
register: eth0
したがって、後でアクセスするには、次のようにeth0という名前を使用する必要があります。
IPADDR={{ eth0.stdout }}
今私が思うXYの問題を解決できるようになったら、インターフェイスのIPアドレスを把握するのではなく、事実を把握するためにansibleを使用してみてはいかがでしょうか?ホストのインターフェイス名がわかっている場合は、単に次のことができます。
IPADDR={{ ansible_eth0.ipv4.address }}
一方、インターフェイス名がわかりませんが(またはすべてのホストで互いに異なる)、ホストごとに実行可能なインターフェイスが1つしかないことがわかっている場合は、次のように使用できます。
IPADDR={{ ansible_default_ipv4.address }}
システムからansibleが収集したすべての事実を表示するには、次のコマンドを使用します。
ansible <hosts> -m setup