Ansible telah membuat otomatisasi menjadi sederhana dan telah menjadi bahasa otomatisasi universal. Sekarang, manfaatnya sudah terkenal di komunitas TI. Namun, seperti semua teknologi bagus lainnya, mungkin ada tantangan yang harus dihadapi atau pendekatan untuk digabungkan. Pertimbangkan untuk menggunakan file comma-separated value (CSV) dan Ansible untuk membuat akun pengguna Linux.
Dalam artikel ini, tujuannya adalah untuk mengotomatisasi pembuatan pengguna menggunakan Ansible. Daftar pengguna dapat diteruskan melalui file variabel eksternal menggunakan vars_files
atau langsung ke playbook menggunakan loop. Masalah muncul ketika daftar pengguna yang akan dibuat hanya tersedia dalam format seperti CSV sedangkan pengembang Ansible lebih nyaman menggunakan daftar YAML. Saya pribadi pernah mengalami situasi di mana daftar pengguna termasuk kata sandi disediakan dalam file CSV dengan persyaratan untuk membuat pengguna tersebut di beberapa mesin Linux menggunakan alat otomatisasi seperti Ansible.
[ Anda mungkin juga menyukai: Mengotomatiskan penerapan mesin virtual dengan Ansible:Design ]
Apa solusinya?
Untungnya, Ansible dikirimkan dengan lebih dari seribu modul, termasuk satu untuk membaca file CSV. Modul ini dapat memberikan dengan tepat apa yang dibutuhkan untuk tugas ini. Anda akan melihat modul beraksi di bawah.
Pertimbangkan file CSV yang menyertakan beberapa kolom seperti Nama Pengguna , UID , Nama Depan , Nama Belakang , Grup , dan Sandi ditunjukkan di bawah. Persyaratannya adalah membuat semua pengguna ini dengan informasi yang relevan di beberapa server 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
Langkah 1
Sekarang setelah Anda memiliki file CSV, langkah selanjutnya adalah membuat Ansible membaca file CSV ini. Untuk mencapainya, gunakan read_csv modul. Untuk mencetak bagaimana Ansible menguraikan CSV, gunakan debug modul. Perhatikan penggunaan delegate_to:localhost dalam tugas pertama. Ini karena file username.csv
hadir di node kontrol dan bukan host yang dikelola. Ansible mem-parsing CSV ini dalam format daftar dengan banyak kamus di dalamnya. Itulah mengapa Anda perlu menambahkan sub-variabel daftar ke akhir variabel terdaftar asli Anda daftar_pengguna .
---
- 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
Langkah 2
Saat Anda menjalankan buku pedoman ini, Anda akan melihat bahwa output berisi daftar, seperti yang ditunjukkan oleh sepasang kurung kotak. Daftar ini lebih lanjut mencakup kamus, yang ditunjukkan oleh tanda kurung kurawal. Setiap baris dalam file CSV telah diubah menjadi kamus, berdasarkan pemisahan koma di antara mereka. Kamus digunakan untuk menyimpan data dalam sepasang kunci dan nilai. Misalnya, kuncinya adalah Nama_depan , dan nilainya adalah Rachel .
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-------
}
]
}
Langkah 3
Anda berhasil membaca dan mencetak file CSV melalui Ansible. Sekarang saatnya mencoba mengekstrak salah satu nilai ini untuk melihat apakah Anda dapat memanipulasi kamus ini agar sesuai dengan kebutuhan pengguna modul di Ansible. Cobalah sesuatu yang mendasar seperti mengekstrak nilai Nama Pengguna kunci untuk semua kamus di dalam daftar ini. Untuk melakukannya, Anda akan menggunakan Nama Pengguna . kamus key sebagai sub-variabel untuk loop Ansible Anda.
----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----
Seperti yang Anda lihat di sini, Anda telah mengekstrak Nama Pengguna nilai dari kamus. Dengan menggunakan konsep yang sama, Anda dapat menempatkan nilai ini di nama bidang pengguna modul untuk membuat pengguna.
Langkah 4
Sekarang setelah Anda mengekstrak nilai kunci yang diinginkan, Anda seharusnya dapat bekerja dengan semua pasangan kunci dan nilai. Letakkan di pengguna modul untuk membuat pengguna Anda dengan semua informasi yang diperlukan. Perhatikan sandi pilihan modul pengguna. Ini berisi filter untuk mengenkripsi Sandi nilai menggunakan algoritma SHA-512. Ini dilakukan karena RHEL8 menggunakan SHA-512 untuk mengenkripsi kata sandi pengguna. Kata sandi ini disimpan dalam format terenkripsi di /etc/shadow
file di host-hosts. Juga, komentar opsi berisi dua variabel karena Anda menginginkan GECOS (Komentar pengguna) bidang pengguna untuk memiliki nama depan dan nama belakang mereka. Misalnya, pengguna booker12 akan memiliki GECOS . mereka sebagai "Rachel Booker." Selanjutnya, Anda menggunakan eskalasi hak istimewa dalam tugas ini karena pembuatan pengguna memerlukan hak akses 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
[ Kursus gratis untuk Anda:Tinjauan Teknis Virtualisasi dan Migrasi Infrastruktur. ]
Menutup
Anda berhasil membuat pengguna tertentu dengan UID . mereka , Grup , Sandi , dan GECOS dengan mengekstrak nilai yang diinginkan dari file CSV. Ini sangat berguna karena sebagian besar organisasi menggunakan format seperti CSV untuk menyimpan dan mengelola data mereka. Pengembang Ansible yang dapat memanipulasi file CSV dapat mengelola lingkungannya secara efisien tanpa menulis semuanya dari awal langsung ke dalam buku pedoman atau file YAML variabel eksternal. Untuk mengelola lingkungan Anda lebih lanjut secara efektif, saya akan merekomendasikan menggunakan Ansible Tower, yang merupakan solusi Ansible perusahaan yang ditawarkan oleh Red Hat. Mungkin gunakan DO447 - Advanced Automation:Ansible Best Practices, penawaran pelatihan juga.