🥊
ansible 研究 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