Как запустить роль ansible после первого запуска задачи в azure

#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, я добавил код режима, который я использую, который, я думаю, поможет в понимании.