このブログは、N高等学校とVRChatの世界からやってきた株式会社ArmorisアルバイトのShaderoが書いています。
あるもりすぶろぐの内容は個人の意見です。
弊社が提供する様々なトレーニングプログラムでは、トレーニングを行う際に、演習端末としてWindows環境を用意しています。
そこで先日、Ansibleというツールを使用して、端末の環境構築を効率的に行えるようにしました。
もっとも、実際に使いこなすには様々な試行錯誤がありました。
そこで今回は備忘も兼ねて、その際にいろいろ試したことなども含めてまとめました。
構築したい環境
前回はAnsibleを用いてホストサーバーに接続出来るように様々な準備を行いました。
今回からは以下を満たす環境を実際に作ります!
- 以下の条件を満たした環境を準備
今回はホストサーバーにトレーニング用のユーザーを作成する所までを行います!
作成したユーザーにトレーニングに必要なソフトをインストールしたり、レジストリを編集するなどは次回行います。
環境
ホストサーバー
Name | Version |
---|---|
Windows 10 Pro | 20H2 |
WinRM | 3.0 |
Ansibleサーバー
Name | Version |
---|---|
MacOS Big Sur | 11.4 |
Ansible | 2.11.6 |
Playbookとは
Playbookとは、YAML形式のファイルです。
そのファイルにホストサーバーに行わせたい処理を書くことで、望んだ環境にする事が出来ます。
また、Playbookがあればコマンド一つで複数のデバイスを自動的に設定することもできるため、手作業で行うよりも大幅に時間を短縮する事が出来ます。
ユーザーを作成するPlaybookを書いてみる
さっそくPlaybookを書いていきます。
ここではホストサーバーに新しいユーザーを作成するPlaybookを書きます。
下記のPlaybookを記述したymlファイルを作成します。(ファイル名として本記事ではbefore.yml
を使用)
- hosts: training # 実行対象のホストの指定 gather_facts: false # 対象ホストの情報を取得して変数に格納するかどうかの設定 vars: # 変数の記述 # userNameやpasswordの値は、作成するユーザーに合わせて要変更 userName: AnsibleTest password: password tasks: - name: ユーザーを作成 win_user: name: '{{ userName }}' password: '{{ password }}' state: present groups: - Users - Remote Desktop Users - name: ユーザープロファイルを作成 win_user_profile: username: '{{ userName }}' state: present
以下、上記コードの解説。
- 1行目
- 対象サーバーの指定。
- 記述する際は、インベントリ内のグループ名やホスト名などを指定。
- allも指定可能で、その場合はインベントリ内の全てのサーバーが対象になります。
- 2行目
- 対象ホストのOSやホストネームなどのシステム情報を収集し、変数(後述)に格納するかどうかの設定。
- システム情報を収集するのは僅かに時間がかかるため、使わない場合はfalseにすることをお勧めします。
- 3~6行目
- 変数の記述。
- 予め変数を定義したり、タスクの実行結果を変数として格納し使用することが可能。
- 変数を使用する際は、値全体ををシングル、又はダブルクォートで囲った上で{{ (変数名) }}と記述。
- 7行目以降
- タスクと呼ばれる、対象サーバーに行わせたい処理を記述する箇所。
- このPlaybookでは、ホストサーバーに新しいユーザーが作成されます。
- ユーザーを作成するタスク以外に、ホストサーバーにファイルを転送するタスクや、レジストリを変更するタスクなど、様々な種類がありますが、各種タスクの使い方についてはAnsible公式ドキュメントを参照する事をお勧めします。
下記のコマンドで実行するとホストサーバーに新しくユーザーが作成されたのが分かります。
$ ansible-playbook before.yml
エラーが出る場合
AnsibleをMacOSで実行するとERROR! A worker was found in a dead state
と書かれたエラーが出る場合があります。
その場合は下記のコマンドで環境変数を登録すると正常に動く場合があります。(.bash_profileに登録するとなお良い)
$ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
あとがき
今回はホストサーバーにユーザーを作成するPlaybookを作成しました。
次回は今回作成したPlaybookを改良して、作成したユーザーにソフトをインストールしたり、レジストリを編集するタスクを追加します!
本記事がお役に立てましたら幸いです。