如何使用ansible在azure上创建实例和安装包

时间:2015-10-20 06:04:50

标签: azure ansible ansible-playbook azure-automation

我们正在尝试使用Ansible在Azure上创建和安装软件包。我们可以使用Ansible Azure模块创建实例,但是一旦创建VM,我们就会坚持安装软件包,因为我们不知道新创建的VM的IP地址是什么。

我们希望在单次运行中完成此操作。这可能吗?

1 个答案:

答案 0 :(得分:1)

我没有使用Azure模块,所以可能是错误的,但您应该可以使用register存储有关您刚刚创建的实例的一些数据。

然后,您可以通过使用add_host模块迭代第一个任务的输出,将此数据传递到任务中动态定义的主机组。

所以你的剧本可能看起来像:

- hosts: local
  connection: local
  tasks:
    - name  : Create Windows instance
      azure :
        name: "ben-Winows-23"
        hostname: "win123"
        os_type: windows
        enable_winrm: yes
        subscription_id: "{{ azure_sub_id }}"
        management_cert_path: "{{ azure_cert_path }}"
        role_size: Small
        image: 'bd507d3a70934695bc2128e3e5a255ba__RightImage-Windows-2012-x64-v13.5'
        location: 'East Asia'
        password: "xxx"
        storage_account: benooytes
        user: admin
        wait: yes
        virtual_network_name: "{{ vnet_name }}"
      register : azure

    - name  : Debug Azure output
      debug :
        var : azure

### Assumes that the output from the previous task has an instances key which in turn has a public_ip key. This may need updating to give the proper path to a resolvable hostname or connectable IP. Use the output of the debug task to help with this. ###

    - name     : Add new instance to host group
      add_host :
        hostname  : {{ item.public_ip }}
        groupname : launched
      with_items : azure.instances

### Only target newly launched instances from previous play ###

- hosts: launched
  tasks:
    - name        : Start foo service and make it auto start
      win_service :
        name       : foo
        start_mode : auto
        state      : started

    - name : Do some thing else
      ...