GNU/Linux >> Linux の 問題 >  >> Linux

Ansibleを使用してcsvファイルからLinuxユーザーを作成する4つのステップ

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トレーニングオファリングも利用できます。


Linux
  1. Linuxで暗号化されたファイルボルトを作成する

  2. Linuxで特定のサイズのファイルを作成するには?

  3. LinuxシェルからのSQLクエリを含むCSVファイルの読み取り

  1. Linuxでスワップを作成する方法

  2. Linuxでスワップファイルを作成する方法

  3. PPK ファイルから PEM を作成する

  1. Linuxでのファイルパーミッションと例

  2. Linuxスワップファイルを作成する

  3. Linux でファイル圧縮を使用して ZFS ファイルシステムを作成する方法