実行環境

ホストOS

ゲストOS

  • debian

事前準備

①UTMでdebianの起動

最新のisoイメージを取得し、起動する。

起動時のポイントは以下の通り。

  • 最小構成でのインストールを行う。
  • デバイスのブートシーケンスが正しく設定されていること。
  • ネットワーク設定にてポートフォワーディング設定がされていること。

Ansible接続のための設定

Ansible接続のための設定は大きく2つに分けられる。

①ゲストOS側の設定

ansibleを利用するユーザに対して、sudo権限を付与する。 今回はsudoをインストールした後に、sudoグループに所属させることで対応する。

apt install sudo
usermod -G sudo <ユーザ名>

②ホストOS側の設定

ホストOS側でansibleのインストールを行う。 また、ssh接続をパスワード認証で行う際に必要なsshpassもインストールする。

brew install ansible
brew install hudochenkov/sshpass/sshpass

標準のbrew installでは、セキュリティ上の理由でsshpassのインストールは不可なので、注意が必要。

$ brew search sshpass
==> Formulae
sshfs

If you meant "sshpass" specifically:
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.

疎通確認

以下の通りにファイルを準備の上、疎通確認を行う。

$ tree 
.
├── create-user.yml
├── inventory
│   └── inventory.ini
└── user-list-var.yml

1 directory, 3 files
  • inventory/inventory.ini
[test_servers]
localhost

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=<ユーザ名>
ansible_ssh_pass=<パスワード>
ansible_sudo_pass=<パスワード>
  • user-list-var.yml
users:
  - { name: 'user01', uid: 1001, group: 'users', password: "{{ 'passw0rd'|password_hash('sha512') }}", update_password: 'on_create', comment: 'user01' }
  - { name: 'user02', uid: 1002, group: 'users', password: "{{ 'passw0rd'|password_hash('sha512') }}", update_password: 'on_create', comment: 'user02' }
  • create-user.yml
---
- hosts: test_servers
  become: yes
  vars_files:
    - user-list-var.yml
  tasks:
  - name: Create user
    user:
      #state: absent #ユーザを削除するときはコメントアウトを外す
      name: "{{ item.name }}"
      password: "{{ item.password }}"
      groups:  "{{ item.group }}"
      shell: /bin/bash
    with_items:
      - "{{ users }}"
    when: users #usersが1件以上の場合のみ実行
  • 実行コマンド
$ ansible-playbook -i inventory/inventory.ini create-user.yml

PLAY [test_servers] *********************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Create user] **********************************************************************************************************************************************************************************************************
changed: [localhost] => (item={'name': 'user01', 'uid': 1001, 'group': 'users', 'password': '$6$oj3f1KTT7Z5Hi9mQ$TtC.4AwBr5d01JnG3NGdsh1fmYQ1O.KwdbaK3O9XvihCgHDGNjIOqdt9Qy5oByS6ulgRoOuFGL0QbTWgtBJHi0', 'update_password': 'on_create', 'comment': 'user01'})
changed: [localhost] => (item={'name': 'user02', 'uid': 1002, 'group': 'users', 'password': '$6$EYZVfBxffVAO52AW$lGRs3YG4rJILq5thz8VlS/s6kU0wBT8xoL7DO51Qc1UlGx6RxavmcAjXrCIerGKMSOTt3DhwTV/pvifEJJLIK1', 'update_password': 'on_create', 'comment': 'user02'})

PLAY RECAP ******************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
  • 実行結果

user01, user02というユーザが作成されていれば成功。

参考文献