Category: Ansible

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の制限については下記が参考になった。

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

loopの説明