AnsibleホストファイルにLinuxシステムを追加するために自動化スクリプトを使用しようとしています。自動化されたプロセスは次のとおりです。
LinuxVms.txt
Ansibleマシンは、Vmwareサーバーの1つから名前付きLinux仮想マシンのリストを取得します。以下のようにシェルスクリプトを開発しました。ファイル
[all_linux_host]
のサーバーをLinuxVms.txt
タグに追加します。このスクリプトは、単一の操作で使用される場合に機能します。
このプロセスが終わった後、私がやりたいことは次のとおりです。
- VMチームは自動的に
LinuxVm.txt
リストをansibleサーバーに送信し、ファイルに新しいIPアドレスがある場合は、このIPアドレスをタグの下のLinuxVm.txt
ansibleホストファイルに追加する必要があります。[all_linux_host]
for
私はループがこれのために働くべきだと思います。ループは、ansibleホストファイルのすべてのタグではなく、for
新しく到着したLinuxVm.txt
ファイルとタグを制御する必要があります。[all_linux_host]
ファイルとタグの間に違いがある場合は、その違いを見つけてタグに追加する必要があります[all_linux_host]
。
例えば
LinuxVms.txt
1.1.1.1 2.2.2.2 3.3.3.3 12.12.12.12
- 現在のAnsibleホストファイル
/etc/ansible/hosts
これは[test] 8.8.8.8 12.12.12.12 13.13.13.13 [all_linux_hosts] 1.1.1.1 2.2.2.2
[all_linux_hosts]
ansibleホストファイルの最後のセクションです。 - forループの後、Ansibleホストファイルは次のようになります。
IP アドレスの順序は重要ではありません。[test] 8.8.8.8 12.12.12.12 13.13.13.13 [all_linux_hosts] 1.1.1.1 2.2.2.2 3.3.3.3 12.12.12.12
ループの開発に役立ちますかfor
?
ワンタイム作業のためにこの部分を考慮する必要はありません。
#!/bin/bash
sudo cp /home/vmteam/LinuxVMs.txt /home/xxx
sudo chown xxx: /home/vmteam/LinuxVMs.txt
sudo dos2unix /home/xxx/LinuxVMs.txt
awk '{print $1}' /home/xxx/LinuxVMs.txt >> ansible_host_file ##file correction
awk '{print $2}' /home/xxx/LinuxVMs.txt >> ansible_host_file ##file correction
sed -i 's/PublicIp//g' /home/xxx/ansible_host_file
sed -i 's/-//g' /home/xxx/ansible_host_file
sed -i '/^\s*$/d' /home/xxx/ansible_host_file
sed -i 's/IpAddress1/ /g' /home/xxx/ansible_host_file
sed -i '/^\s*$/d' /home/xxx/ansible_host_file```
ベストアンサー1
a[".."]
vmsファイルに記載されているLinuxホストにタイプの連想配列を入力します。その後、ansibleファイルに表示されているホストを確認し、最後の残りのコンテンツを印刷します。
awk '
NR==FNR {a[$1];next}
$1=="[all_linux_hosts]",0 {
if ( $1 in a ) delete a[$1]
};1
END {
for (host in a) print host
}
' LinuxVms.txt /etc/ansible/hosts
[test]
8.8.8.8
12.12.12.12
13.13.13.13
[all_linux_hosts]
1.1.1.1
2.2.2.2
12.12.12.12
3.3.3.3