Ansibleは自動化をシンプルにし、ユニバーサル自動化言語になりました。今では、そのメリットはITコミュニティでよく知られています。ただし、すべての優れたテクノロジーと同様に、直面する課題や組み合わせるアプローチが存在する可能性があります。カンマ区切り値(CSV)ファイルとAnsibleを使用してLinuxユーザーアカウントを作成することを検討してください。
この記事の目標は、Ansibleを使用してユーザーの作成を自動化することです。ユーザーのリストは、vars_files
を使用して外部変数ファイルを介して渡すことができます または、ループを使用してプレイブックに直接挿入します。この問題は、作成するユーザーのリストがCSVのような形式でのみ利用可能であり、Ansible開発者がYAMLリストをより快適に使用できる場合に発生します。私は個人的に、パスワードを含むユーザーリストがCSVファイルで提供され、Ansibleなどの自動化ツールを使用して複数のLinuxマシンでそれらのユーザーを作成する必要がある状況を経験しました。
[次のこともお勧めします:Ansibleを使用して仮想マシンのデプロイを自動化する:設計]
解決策は何ですか?
幸い、Ansibleには、CSVファイルを読み取るためのモジュールを含む1,000を超えるモジュールが付属しています。このモジュールは、このタスクに必要なものを正確に提供できます。以下にモジュールの動作が表示されます。
ユーザー名などの複数のフィールドを含むCSVファイルについて考えてみます。 、 UID 、名 、姓 、グループ 、およびパスワード 下に示された。要件は、複数のLinuxサーバー間で関連情報を使用してこれらすべてのユーザーを作成することです。
Username,UID,First_name,Last_name,Groups,Password
booker12,9012,Rachel,Booker,Operations,iambooker
grey07,2070,Laura,Grey,Developers,iamgrey
johnson81,4081,Craig,Johnson,Operations,iamjohnson
jenkins46,9346,Mary,Jenkins,Developers,iamjenkins
smith79,5079,Jamie,Smith,Operations,iamsmith
ステップ1
CSVファイルができたので、次のステップはAnsibleにこのCSVファイルを読み取らせることです。これを実現するには、 read_csvを使用します モジュール。 AnsibleがCSVを解析した方法を印刷するには、デバッグを使用します モジュール。 delegate_to:localhostの使用に注意してください 最初のタスクで。これは、ファイルusername.csv
が原因です。 管理対象ホストではなく、制御ノードに存在します。 Ansibleは、このCSVを複数の辞書を含むリスト形式で解析します。そのため、サブ変数リストを追加する必要があります 元の登録済み変数の最後までuser_list 。
---
- name: create users from csv file
hosts: all
tasks:
- name: reading the csv file
read_csv:
path: username.csv
register: user_list
delegate_to: localhost
- name: display user_list data
debug:
var: user_list.list
ステップ2
このプレイブックを実行すると、ボックスブラケットのペアで示されているように、出力にリストが含まれていることがわかります。このリストには、中括弧で示される辞書がさらに含まれています。 CSVファイルのすべての行は、それらの間のコンマ区切りに基づいて辞書に変換されています。辞書は、キーと値のペアにデータを保存するために使用されます。たとえば、キーは First_name 、値はレイチェル 。
ok: [192.168.0.3] => {
"user_list.list": [
{
"First_name": "Rachel",
"Groups": "Operations",
"Last_name": "Booker",
"Password": "iambooker",
"UID": "9012",
"Username": "booker12"
},
{
"First_name": "Laura",
"Groups": "Developers",
"Last_name": "Grey",
"Password": "iamgrey",
"UID": "2070",
"Username": "grey07"
},
{
"First_name": "Craig",
"Groups": "Operations",
"Last_name": "Johnson",
"Password": "iamjohnson",
"UID": "4081",
"Username": "johnson81"
},
-------OUTPUT OMITTED-------
}
]
}
ステップ3
Ansibleを介してCSVファイルを正常に読み取って印刷することができます。次に、これらの値の1つを抽出して、ユーザーのニーズに合わせてこの辞書を操作できるかどうかを確認します。 Ansibleのモジュール。 ユーザー名の値を抽出するなどの基本的なことを試してください このリスト内のすべての辞書のキー。これを行うには、辞書のユーザー名を使用します Ansibleループのサブ変数としてのキー。
----OUTPUT OMITTED----
- name: extract Username from all dictionaries
debug:
msg: "{{ item.Username }}"
loop: "{{ user_list.list }}"
ok: [192.168.0.3] => (item={'Username': 'booker12', 'UID': '9012', 'First_name': 'Rachel', 'Last_name': 'Booker', 'Groups': 'Operations', 'Password': 'iambooker'}) => {
"msg": "booker12"
}
ok: [192.168.0.3] => (item={'Username': 'grey07', 'UID': '2070', 'First_name': 'Laura', 'Last_name': 'Grey', 'Groups': 'Developers', 'Password': 'iamgrey'}) => {
"msg": "grey07"
}
----OUTPUT OMITTED----
ここに表示されているように、ユーザー名を抽出しました 辞書からの値。同じ概念を使用して、これらの値を名前に入れることができます ユーザーのフィールド ユーザーを作成するモジュール。
ステップ4
目的のキーの値を抽出したので、すべてのキーと値のペアを操作できるようになります。それらをユーザーに入れます 必要なすべての情報を使用してユーザーを作成するモジュール。 パスワードに注意してください ユーザーモジュールのオプション。 パスワードを暗号化するためのフィルターが含まれています SHA-512アルゴリズムを使用した値。これは、RHEL8がSHA-512を使用してユーザーパスワードを暗号化するために行われます。このパスワードは、暗号化された形式で/etc/shadow
に保存されます。 管理対象ホスト上のファイル。また、コメント GECOS が必要なため、オプションには2つの変数が含まれています (ユーザーコメント)ユーザーのフィールドで、名前と名前を指定します。たとえば、ユーザー booker12 GECOSがあります 「レイチェルブッカー」として。さらに、ユーザーの作成にはroot権限が必要なため、このタスクでは権限昇格を使用しています。
-----OUTPUT OMITTED-----
- name: create users from the csv
user:
name: "{{ item.Username }}"
uid: "{{ item.UID }}"
groups: "{{ item.Groups }}"
append: true
password: "{{ item.Password | password_hash('sha512') }}"
comment: "{{ item.First_Name }} {{ item.Last_Name }}"
state: present
loop: "{{ user_list.list }}"
become: true
[無料コース:仮想化とインフラストラクチャの移行の技術概要。 ]
まとめ
UIDを使用して特定のユーザーを正常に作成しました 、グループ 、パスワード 、および GECOS CSVファイルから目的の値を抽出します。ほとんどの組織はCSVなどの形式を使用してデータを保存および管理するため、これは便利です。 CSVファイルを操作できるAnsible開発者は、すべてを最初からプレイブックや外部変数YAMLファイルに直接書き込むことなく、環境を効率的に管理できます。環境をさらに効果的に管理するには、RedHatが提供するエンタープライズAnsibleソリューションであるAnsibleTowerを使用することをお勧めします。おそらく、DO447-Advanced Automation:AnsibleBestPracticesトレーニングオファリングも利用できます。