🥊

ansible 研究 2024/12/23

2024/12/23に公開

FreeBSD で Ansible を扱うと 勢い ''raw'' モジュールを使う場面が多い。 RHELと環境が違うため、整地作業が多く必要となるし、冪等性を犠牲というよりは、''Ansibleを使う以上は Point of No-Return となる'' 恒久変更をしなくてはならないことが多い。

raw モジュール で ホスト名を含む変更を実行したい場合

例えば、hostname は hogehoge とされているが、FQDNは別な名前である場合に、-a オプションで記述する処理で "hostname" を使ってしまうと、Ansible実行側にその成果を持ち帰ってもアクセスに使えるとは限らない。

  • グループ指定して raw モジュールを実行する場合は、何らかの形でインベントリに記載されているホストに「Ansibleでアクセスする側からの名前」を渡して処理したい場合は、マジック変数の "inventroy_hostname" を参照すればいい。
 % ansible -m raw  -a 'echo {{inventory_hostname}} ' hoge-jails

インベントリの中の hoge-jails グループに属するJailの名前を、拾ってくるワンライナーは以下のとおりになった。 basitille を使っていると jail名だけを抜き出してくるオプションがあり便利である。

 /usr/local/bin/ansible 2>/dev/null -m raw -vv  --become -a "export i={{inventory_hostname}} &&  /usr/local/bin/bastille
list jail | awk '{print \$1\"@\"ENVIRON[\"i\"] }'"

ちょっと雑だなと思うのは 環境変数名を適当に選んだことだけれど、JinJa2縛りで awk のスクリプトもアレで、もっとエレガントな方法があればと。

Discussion