微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在天蓝色先运行任务后如何运行ansible角色

如何解决在天蓝色先运行任务后如何运行ansible角色

我们有一本Playbook,可以在Mincrosoft azure中创建Linux虚拟机,其职责是执行安装后的工作,例如安装一些应用程序软件包。我们的剧本运行良好,能够以蓝色方式部署VM,但是第二个角色是在部署后配置VM,因为该角色未在VM上运行,因为我们无法将VM(IP /主机名)传递给第二个角色。角色。

我们想要实现的是使用ansible手册/角色部署VM,在部署计算机后运行角色以配置业务特定任务。

路径:

下面是所有可玩角色和角色即将到来的路径。这里的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

我的主要Play文件

$ cat licence-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
...

以天蓝色创建VM的播放(test-creatVM-sur.yml)如下:

---
- 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

任何帮助将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。