Tutorial: Mengonfigurasi inventaris dinamis sumber daya Azure Anda menggunakan Ansible
Penting
Ansible 2.8 (atau yang lebih baru) diperlukan untuk menjalankan sampel playbook dalam artikel ini.
Perhatian
Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.
Fitur inventaris dinamis Ansible menghilangkan beban pemeliharaan file inventaris statis.
Dalam tutorial ini, Anda akan menggunakan plug-in inventaris dinamis Azure untuk mengisi inventaris Ansible Anda.
Dalam artikel ini, Anda akan mempelajari cara:
- Mengonfigurasi dua mesin virtual uji.
- Menambahkan tag ke mesin virtual Azure
- Menghasilkan inventaris dinamis
- Menggunakan grup bersyarat dan berkunci untuk mengisi keanggotaan grup
- Menjalankan playbook pada grup dalam inventaris dinamis
Prasyarat
- Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
- Perwakilan layanan Azure: Buat perwakilan layanan, catat nilai-nilai berikut: appId, displayName, kata sandi, dan penyewa.
Instal Ansible: Lakukan salah satu opsi berikut:
- Menginstal dan mengonfigurasi Ansibel pada mesin virtual Linux
- Konfigurasikan Azure Cloud Shell dan - jika Anda tidak memiliki akses ke mesin virtual Linux - buat mesin virtual dengan Ansible.
Membuat VM Azure
Masuk ke portal Azure.
Buka Cloud Shell.
Buat grup sumber daya Azure untuk membuat komputer virtual untuk tutorial ini.
Penting
Grup sumber daya Azure yang Anda buat dalam langkah ini harus memiliki nama yang semuanya huruf kecil. Jika tidak, pembuatan inventaris dinamis akan gagal.
az group create --resource-group ansible-inventory-test-rg --location eastus
Buat dua mesin virtual Linux di Azure menggunakan salah satu teknik berikut:
Ansible playbook - Artikel, Buat mesin virtual Linux dasar di Azure dengan Ansible dan Buat mesin virtual Windows dasar di Azure dengan Ansible menjelaskan cara membuat mesin virtual dari playbook Ansible.
Azure CLI - Menerbitkan masing-masing perintah berikut di Cloud Shell untuk membuat dua mesin virtual:
az vm create \ --resource-group ansible-inventory-test-rg \ --name win-vm \ --image MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest \ --admin-username azureuser \ --admin-password <password> az vm create \ --resource-group ansible-inventory-test-rg \ --name linux-vm \ --image CentOS85Gen2 \ --admin-username azureuser \ --admin-password <password>
Ganti kata sandi Anda
<password>
.
Menambahkan tag peran aplikasi
Tag digunakan untuk mengatur dan mengategorikan sumber daya Azure. Menetapkan peran aplikasi Azure VM memungkinkan Anda menggunakan tag sebagai nama grup dalam inventaris dinamis Azure.
Jalankan perintah berikut untuk memperbarui tag VM:
az vm update \
--resource-group ansible-inventory-test-rg \
--name linux-vm \
--set tags.applicationRole='message-broker'
az vm update \
--resource-group ansible-inventory-test-rg \
--name win-vm \
--set tags.applicationRole='web-server'
Pelajari lebih lanjut strategi penandaan Azure di Tentukan strategi penandaan Anda.
Menghasilkan inventaris dinamis
Ansible menyediakan plug-in inventaris dinamis Azure.
Langkah-langkah berikut memandu Anda menggunakan plug-in:
Membuat inventaris dinamis bernama
myazure_rm.yml
plugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: auto
Poin kunci:
- Ansible menggunakan nama dan ekstensi file inventaris untuk mengidentifikasi plug-in inventaris mana yang akan digunakan. Untuk menggunakan plug-in inventaris dinamis Azure, file harus diakhiri dengan
azure_rm
dan memiliki ekstensiyml
atauyaml
.
- Ansible menggunakan nama dan ekstensi file inventaris untuk mengidentifikasi plug-in inventaris mana yang akan digunakan. Untuk menggunakan plug-in inventaris dinamis Azure, file harus diakhiri dengan
Jalankan perintah berikut untuk mengkueri VM dalam grup sumber daya:
ansible-inventory -i myazure_rm.yml --graph
Saat menjalankan perintah tersebut, Anda melihat hasil yang mirip dengan output berikut:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Kedua VM termasuk dalam grup ungrouped
, yang merupakan anak dari grup all
dalam inventaris Ansible.
Poin kunci:
- Secara default plug-in inventaris dinamis Azure mengembalikan nama unik secara global. Itulah alasan untuk karakter tambahan setelah nama VM. Anda dapat menonaktifkannya dengan menambahkan
plain_host_names: yes
ke inventaris dinamis.
Menemukan Azure VM hostvars
Jalankan perintah berikut untuk melihat semua hostvars
:
ansible-inventory -i myazure_rm.yml --list
{
"_meta": {
"hostvars": {
"linux-vm_cdb4": {
"ansible_host": "52.188.118.79",
"availability_zone": null,
"computer_name": "linux-vm",
"default_inventory_hostname": "linux-vm_cdb4",
"id": "/subscriptions/<subscriptionid>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/linux-vm",
"image": {
"offer": "CentOS",
"publisher": "OpenLogic",
"sku": "7.7",
"version": "latest"
},
...,
"tags": {
"applicationRole": "message-broker"
},
...
},
"win-vm_3211": {
"ansible_host": "52.188.112.110",
"availability_zone": null,
"computer_name": "win-vm",
"default_inventory_hostname": "win-vm_3211",
"id": "/subscriptions/<subscriptionid>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/win-vm",
"image": {
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest"
},
...
"tags": {
"applicationRole": "web-server"
},
...
}
}
},
...
}
}
Dengan menarik informasi dari Azure, inventaris dinamis mengisi hostvars
untuk setiap VM Azure. Mereka hostvars
kemudian menentukan keanggotaan grup VM dalam inventaris Ansible.
Tetapkan keanggotaan grup dengan conditional_groups
Setiap kelompok bersyarat terdiri dari dua bagian. Nama grup dan syarat untuk menambahkan anggota ke grup.
Gunakan properti image.offer
untuk membuat keanggotaan grup bersyarat untuk linux-vm.
Buka myazure_rm.yml
inventaris dinamis dan tambahkan conditional_group
berikut:
plugin: azure_rm
include_vm_resource_groups:
- ansible-inventory-test-rg
auth_source: auto
conditional_groups:
linux: "'CentOS' in image.offer"
windows: "'WindowsServer' in image.offer"
Jalankan ansible-inventory
dengan opsi --graph
:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Dari output itu, Anda dapat melihat VM tidak lagi terkait dengan grup ungrouped
. Sebagai gantinya, masing-masing telah ditetapkan ke grup baru yang dibuat oleh inventaris dinamis.
Poin kunci:
- Grup bersyarat memungkinkan Anda memberi nama grup tertentu dalam inventaris Anda dan mengisinya menggunakan
hostvars
.
Tetapkan keanggotaan grup dengan keyed_groups
Grup kunci menetapkan keanggotaan grup dengan cara yang sama seperti grup bersyarat, tetapi saat menggunakan grup berkunci, nama grup juga diisi secara dinamis.
Tambahkan keyed_group berikut ke myazure_rm.yml
inventaris dinamis:
plugin: azure_rm
include_vm_resource_groups:
- ansible-inventory-test-rg
auth_source: auto
conditional_groups:
linux: "'CentOS' in image.offer"
windows: "'WindowsServer' in image.offer"
keyed_groups:
- key: tags.applicationRole
Jalankan ansible-inventory
dengan opsi --graph
:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@_message_broker:
| |--linux-vm_cdb4
|--@_web_server:
| |--win-vm_3211
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Dari output itu, Anda akan melihat dua grup lainnya _message_broker
dan _web_server
. Dengan menggunakan grup berkunci, tag applicationRole
mengisi nama grup dan keanggotaan grup.
Poin kunci:
- Secara default, grup berkunci memiliki pemisah. Untuk menghapus pemisah tambahkan
separator: ""
di bawah properti kunci.
Menjalankan playbook dengan pola nama grup
Gunakan grup yang dibuat oleh inventaris dinamis untuk menargetkan subkelompok.
Buat playbook bernama
win_ping.yml
dengan konten berikut:--- - hosts: windows gather_facts: false vars_prompt: - name: username prompt: "Enter local username" private: false - name: password prompt: "Enter password" vars: ansible_user: "{{ username }}" ansible_password: "{{ password }}" ansible_connection: winrm ansible_winrm_transport: ntlm ansible_winrm_server_cert_validation: ignore tasks: - name: run win_ping win_ping:
Jalankan playbook
win_ping.yml
.ansible-playbook win_ping.yml -i myazure_rm.yml
Saat diminta, masukkan
username
danpassword
untuk VM Windows Azure.Enter local username: azureuser Enter password: PLAY [windows] ************************************************************************************************************************************** TASK [run win_ping] ********************************************************************************************************************************* ok: [win-vm_3211] PLAY RECAP ****************************************************************************************************************************************** win-vm_3211 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Penting
Jika Anda mendapatkan kesalahan
winrm or requests is not installed: No module named 'winrm'
, instal pywinrm dengan perintah berikut:pip install "pywinrm>=0.3.0"
Buat playbook kedua bernama
ping.yml
dengan konten berikut:--- - hosts: all gather_facts: false vars_prompt: - name: username prompt: "Enter ssh user" - name: password prompt: "Enter password for ssh user" vars: ansible_user: "{{ username }}" ansible_password: "{{ password }}" ansible_ssh_common_args: '-o StrictHostKeyChecking=no' tasks: - name: run ping ping:
Jalankan playbook
ping.yml
.ansible-playbook ping.yml -i myazure_rm.yml
Saat diminta, masukkan
username
danpassword
untuk VM Azure Linux.Enter ssh username: azureuser Enter password for ssh user: PLAY [linux] ******************************************************************************************************* TASK [run ping] **************************************************************************************************** ok: [linux-vm_cdb4] PLAY RECAP ********************************************************************************************************* linux-vm_cdb4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Membersihkan sumber daya
Jalankan az group delete untuk menghapus grup sumber daya. Semua sumber daya dalam grup sumber daya akan dihapus.
az group delete --name <resource_group>
Pastikan grup sumber daya telah dihapus dengan menggunakan az group show.
az group show --name <resource_group>
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk