#azure #ansible #azure-vm
#azure #ansible #azure-vm
Вопрос:
У нас есть руководство по созданию виртуальной машины Linux в Mincrosoft azure после роли для выполнения действий после установки, таких как установка некоторых пакетов приложений. Наш сборник задач работает нормально и может развернуть виртуальную машину в Azure, однако вторая роль, которая заключается в настройке виртуальной машины после развертывания, не выполняется на виртуальной машине, поскольку мы не можем передать виртуальную машину (IP / Hostname) второй роли.
Чего мы хотим добиться, так это развернуть виртуальную машину с помощью ansible playbook / role, запустить роли после развертывания машины для настройки бизнес-задач.
Путь:
Ниже приведен путь, по которому идут все роли и роли ansible. здесь roles
папки содержат все задачи после установки, я считаю, что будет лучший способ сохранить test-creatVM-sur.yml
саму роль в роли, но как ученик я немного борюсь..
$ ls -l /home/azure1/ansible_Dir
-rw-r-----. 1 azure1 hal 1770 Sep 17 17:03 test-creatVM-sur.yml
-rw-r-----. 1 azure1 hal 320 Sep 17 22:30 licence-test.yml
drwxr-x---. 6 azure1 hal 4096 Sep 17 21:46 roles
Мой основной файл воспроизведения:
лицензия $ cat-test.yml
---
- name: create vm
hosts: localhost
connection: local
become: yes
become_method: sudo
become_user: root
vars:
Res_Group: "some_value"
LOCATION: "some_value"
VNET: "some_value"
IMAGE_ID: "some_value"
SUBNET: "some_value"
KEYDATA: "some_value"
DISK_SIZE: 100
DISK_TYPE: Premium_LRS
tasks:
- name: include task
include_tasks:
file: creattest_VM.yml <-- This portion works fine
- hosts: "{{ VM_NAME }}" <-- this portion does not work as it's not able to fetch the newly created VM name.
become: yes
become_method: sudo
become_user: root
roles:
- azure_license
...
Ниже приведена функция Play ( test-creatVM-sur.yml
), которая создала виртуальную машину в azure:
---
- name: Create Network Security Group that allows SSH
azure_rm_securitygroup:
resource_group: "{{ Res_Group }}"
location: "{{ LOCATION }}"
name: "{{ VM_NAME }}-nsg"
rules:
- name: SSH
protocol: Tcp
destination_port_range: 22
access: Allow
priority: 100
direction: Inbound
- name: Create virtual network interface card
azure_rm_networkinterface:
resource_group: "{{ Res_Group }}"
location: "{{ LOCATION }}"
name: "{{ VM_NAME }}-nic1"
subnet: "{{ SUBNET }}"
virtual_network: "{{ VNET }}"
security_group: "{{ VM_NAME }}-nsg"
enable_accelerated_networking: True
public_ip: no
state: present
- name: Create VM
azure_rm_virtualmachine:
resource_group: "{{ Res_Group }}"
location: "{{ LOCATION }}"
name: "{{ VM_NAME }}"
vm_size: Standard_D4s_v3
admin_username: automation
ssh_password_enabled: false
ssh_public_keys:
- path: /home/automation/.ssh/authorized_keys
key_data: "{{ KEYDATA }}"
network_interfaces: "{{ VM_NAME }}-nic1"
os_disk_name: "{{ VM_NAME }}-osdisk"
managed_disk_type: "{{ DISK_TYPE }}"
os_disk_caching: ReadWrite
os_type: Linux
image:
id: "{{ IMAGE_ID }}"
publisher: redhat
plan:
name: rhel-lvm78
product: rhel-byos
publisher: redhat
- name: Add disk to VM
azure_rm_manageddisk:
name: "{{ VM_NAME }}-datadisk01"
location: "{{ LOCATION }}"
resource_group: "{{ Res_Group }}"
disk_size_gb: "{{ DISK_SIZE }}"
managed_by: "{{ VM_NAME }}"
- name: "wait for 3 Min"
pause:
minutes: 3
...
Редактировать:
Мне удалось определить переменные в разделенном name_vars
разделе include_vars
.
---
- name: create vm
hosts: localhost
connection: local
become: yes
become_method: sudo
become_user: root
tasks:
- include_vars: name_vars.yml
- include_tasks: creattest_VM.yml
- name: Apply license hardening stuff
hosts: "{{ VM_NAME }}"
become: yes
become_method: sudo
become_user: root
roles:
- azure_license
...
Это работает после выполнения какого-то грязного взлома, но это выглядит неправильно, поскольку я создаю инветорию test
для размещения там VM_NAME
, а также дополнительную переменную с -e
помощью ниже.
$ ansible-playbook -i test -e VM_NAME=mylabhost01.hal.com licence-test.yml -k -u my_user_id
Любая помощь будет высоко оценена.
Комментарии:
1. Не зная, что в
test-creatVM-sur.yml
нем, практически невозможно определить, что не так, ноadd_host:
он предназначен для решения этой проблемы — вы уже используетеadd_host
?2. @mdaniel, большое вам спасибо за комментарий и подсказку, но я не использую это и просто пытаюсь узнать, как это исправить, поскольку я только учусь с помощью ansible, я добавил код режима, который я использую, который, я думаю, поможет в понимании.