Ansible関連のメモ
Posted: | Categories: ansible | Tags: ansible
ansibleユーザを作成する
一旦、ansible-playbook実行サーバからssh鍵をコピーするためパスワードを設定するが、ssh-copy-id後、パスワードを削除する手順。
※ 下記のようにアカウントを作成するとデフォルトシェルとして/bin/bashが設定されるが、できれば消したい。 ただAnsibleの一部のモジュールやプラグインは、ターゲットシステム上でフルシェル環境を想定している可能性があるためデフォルトシェルの設定をしている。 既存のプレイブックを調整しつつ最終的にはデフォルトシェルをなくしたい。
useradd --system -m -G users,wheel ansible
passwd ansible
Gentooでsudoが入ってない場合、sudoインストール
emerge -a app-admin/sudo
/etc/sudoers.d/ansible に書き込む(mkdir /etc/sudoers.d/がなければ作る)
編集時は visudo -f を使い、権限は 0440 にする。
mkdir -p /etc/sudoers.d
echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible
chmod 0440 /etc/sudoers.d/ansible
ansible-playbook実行サーバから
ssh-copy-id ansible@<対象ホストのIPアドレス>
パスワードログインを禁止していく(ansibleのcopyで確実に存在するようにした方が良い)
/etc/ssh/sshd_config.d/ansible_no_password.conf を追加
Match User ansible
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
上記のファイルはインデントしているが、可読性のためでsshdの挙動には関係がない。
sshdを再起動
sudo systemctl restart sshd
sshdの制限については下記が参考になった。
- sshdのmatchでユーザ単位・アドレス単位でchrootをさせるなど、matchに応じて処理方法を変える | 俺的備忘録 〜なんかいろいろ〜
- ssh で ユーザー名 と ネットワークの複数条件のANDで設定を書く - それマグで!
INIファイルとYAMLファイルの比較
- インベントリーの構築方法 — Ansible Documentation
- 私は最初はINIファイルで書き始め、途中で記述をシンプルに短くできるためYAMLに移行した。その際に役に立った。
ディレクトリを作成する
- name: Create a new directory
file:
path: /path/to/new/directory
state: directory
ファイルが存在するかwhenで確認する
findで検索
- name: Check if file exists
find:
paths: /path/to/directory
patterns: myfile.txt
register: result
- name: Perform task if file exists
debug:
msg: "File exists"
when: result.matched > 0
パス決め打ち
- name: ファイルの存在確認
stat:
path: /path/to/your/file.txt
register: file_stat
- name: ファイルが存在する場合に実行されるタスク
command: echo "ファイルが存在します"
when: file_stat.stat.exists
- name: ファイルが存在しない場合に実行されるタスク
command: echo "ファイルは存在しません"
when: not file_stat.stat.exists