Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.8 (veya üzeri) gereklidir.
Ansible dinamik envanter özelliği, statik envanter dosyalarını koruma yükünü ortadan kaldırır.
Bu öğreticide, Ansible envanterinizi doldurmak için Azure'ın dinamik envanter eklentisini kullanacaksınız.
Bu makalede şunları öğreneceksiniz:
- İki test sanal makinesi yapılandırın.
- Azure sanal makinelerine etiket ekleme
- Dinamik envanter oluşturma
- Grup üyeliklerini doldurmak için koşullu ve anahtarlı grupları kullanma
- Dinamik envanter içindeki gruplara yönelik otomasyon senaryolarını çalıştırma
Önkoşullar
- Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Azure hizmet sorumlusu: Aşağıdaki değerleri not ederek bir hizmet sorumlusu oluşturun: appId, displayName, password ve tenant.
Ansible'ı Yükleme: Aşağıdaki seçeneklerden birini yapın:
- Ansible'ı Linux sanal makinesine yükleme ve yapılandırma
- Azure Cloud Shell'i yapılandırın ve Linux sanal makinesine erişiminiz yoksa Ansible ile bir sanal makine oluşturun.
Azure VM'leri oluşturma
Azure portalınaoturum açın.
Cloud Shell'i açın.
Bu öğreticinin sanal makinelerini barındırmak için bir Azure kaynak grubu oluşturun.
Önemli
Bu adımda oluşturduğunuz Azure kaynak grubunun tamamen küçük harfe sahip bir adı olmalıdır. Aksi takdirde dinamik envanter oluşturma işlemi başarısız olur.
az group create --resource-group ansible-inventory-test-rg --location eastusAşağıdaki tekniklerden birini kullanarak Azure'da iki Linux sanal makinesi oluşturun:
Ansible playbook - Ansible ile Azure'da temel bir Linux sanal makinesi oluşturma ve Ansible ile Azure'da temel bir Windows sanal makinesi oluşturma makalesi, Ansible playbook'tan sanal makine oluşturmayı göstermektedir.
Azure CLI - İki sanal makineyi oluşturmak için Cloud Shell'de aşağıdaki komutların her birini çalıştırın:
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 Ubuntu2204 \ --admin-username azureuser \ --admin-password <password><password>Parolanızı değiştirin.
Uygulama rolü etiketleri ekleme
Etiketler, Azure kaynaklarını düzenlemek ve kategorilere ayırmak için kullanılır. Azure VM'lerine bir uygulama rolü atamak, etiketleri Azure dinamik envanterinde grup adları olarak kullanmanıza olanak tanır.
VM etiketlerini güncelleştirmek için aşağıdaki komutları çalıştırın:
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'
Azure etiketleme stratejileri hakkında daha fazla bilgi için bkz. Etiketleme stratejinizi tanımlama.
Dinamik envanter oluşturma
Ansible bir Azure dinamik envanter eklentisi sağlar.
Aşağıdaki adımlar eklentiyi kullanma konusunda size yol göstereceğiz:
adlı dinamik bir envanter oluşturma
myazure_rm.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoAnahtar nokta:
- Ansible, hangi envanter eklentisinin kullanılacağını belirlemek için envanter dosyası adını ve uzantısını kullanır. Azure dinamik envanter eklentisini kullanmak için dosyanın ile
azure_rmbitmesi ve ya daymlyamluzantısına sahip olması gerekir.
- Ansible, hangi envanter eklentisinin kullanılacağını belirlemek için envanter dosyası adını ve uzantısını kullanır. Azure dinamik envanter eklentisini kullanmak için dosyanın ile
Kaynak grubundaki VM'leri sorgulamak için aşağıdaki komutu çalıştırın:
ansible-inventory -i myazure_rm.yml --graphKomutu çalıştırdığınızda aşağıdaki çıkışa benzer sonuçlar görürsünüz:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Her iki VM de Ansible envanterindeki ungrouped grubun alt öğesi all olan gruba aittir.
Anahtar nokta:
- Varsayılan olarak Azure dinamik envanter eklentisi genel olarak benzersiz adlar döndürür. Bu nedenle, VM adları fazladan karakterler içerebilir. Dinamik envantere ekleyerek
plain_host_names: yesbu davranışı devre dışı bırakabilirsiniz.
Azure VM host değişkenlerini bulma
Tüm hostvarsgörüntülemek için aşağıdaki komutu çalıştırın:
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": "0001-com-ubuntu-server-jammy",
"publisher": "Canonical",
"sku": "22_04-lts-gen2",
"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"
},
...
}
}
},
...
}
}
Azure'dan bilgi çekilerek dinamik envanter, her Azure VM için hostvars öğesini doldurur. Bunlar hostvars daha sonra Ansible envanteri içindeki VM grubu üyeliklerini belirlemek için yapılır.
conditional_groups ile grup üyeliğini atayın
Her koşullu grup iki bölümden oluşur. Grubun adı ve gruba üye ekleme koşulu.
image.offer için koşullu grup üyeliği oluşturmak için özelliğini kullanın.
Dinamik envanteri myazure_rm.yml açın ve aşağıdakileri conditional_groupekleyin:
plugin: azure_rm
include_vm_resource_groups:
- ansible-inventory-test-rg
auth_source: auto
conditional_groups:
linux: "'ubuntu' in image.offer"
windows: "'WindowsServer' in image.offer"
ansible-inventory komutunu --graph seçeneği ile çalıştırın.
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Çıktıdan VM'lerin artık grupla ungrouped ilişkilendirilmemiş olduğunu görebilirsiniz. Bunun yerine, her VM dinamik envanter tarafından oluşturulan yeni bir gruba atanır.
Anahtar nokta:
- Koşullu gruplar, envanterinizin içindeki belirli grupları adlandırmanıza ve kullanarak
hostvarsdoldurmanıza olanak sağlar.
keyed_groups ile grup üyeliği atama
Anahtarlı gruplar grup üyeliğini koşullu grupların atayıldığı gibi atar, ancak anahtarlı grup kullanılırken grup adı da dinamik olarak doldurulur.
Aşağıdaki keyed_group'u myazure_rm.yml dinamik envantere ekleyin:
plugin: azure_rm
include_vm_resource_groups:
- ansible-inventory-test-rg
auth_source: auto
conditional_groups:
linux: "'ubuntu' in image.offer"
windows: "'WindowsServer' in image.offer"
keyed_groups:
- key: tags.applicationRole
ansible-inventory komutunu --graph seçeneği ile çalıştırın.
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
Çıktıdan iki grup _message_broker daha ve _web_servergörürsünüz. Etiket, applicationRole anahtarlı bir grup kullanarak grup adlarını ve grup üyeliklerini doldurur.
Anahtar nokta:
- Varsayılan olarak, anahtarlı gruplar bir ayırıcı içerir. Ayırıcıyı kaldırmak için key özelliğinin altına ekleyin
separator: "".
Playbook'ları grup adı desenleriyle çalıştırma
Alt grupları hedeflemek için dinamik envanter tarafından oluşturulan grupları kullanın.
win_ping.ymladlı ve aşağıdaki içeriklere sahip bir playbook oluşturun.--- - 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:Playbook'u
win_ping.ymlçalıştırın.ansible-playbook win_ping.yml -i myazure_rm.ymlİstendiğinde, Azure Windows VM için
usernamevepassword'yi girin.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Önemli
hatasını
winrm or requests is not installed: No module named 'winrm'alırsanız, aşağıdaki komutla pywinrm'i yükleyin:pip install "pywinrm>=0.3.0"İçeriği aşağıdaki gibi olan ikinci bir
ping.ymladlı playbook oluşturun.--- - 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:Playbook'u
ping.ymlçalıştırın.ansible-playbook ping.yml -i myazure_rm.ymlİstendiğinde, Azure Linux VM için
usernamevepassworddeğerlerini girin.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
Kaynakları temizle
Kaynak grubunu silmek için az group delete komutunu çalıştırın. Kaynak grubundaki tüm kaynaklar silinir.
az group delete --name <resource_group>az group show kullanılarak kaynak grubunun silindiğini doğrulayın.
az group show --name <resource_group>