2016-07-25 67 views
0

我們目前正在將Ansible與OpenStack結合使用。我已經編寫了一本劇本(通過OpenStack部署新服務器),我使用的模塊爲os_server,我使用auto_ip: yes,新服務器將成爲從OpenStack服務器分配的IP地址。Ansible返回值 - 需要IP地址

如果我使用-vvvv輸出命令,我得到一個長輸出其中在該輸出的中間列出了一個IP地址。

因此,我是一個懶惰的人,我想把這個IP地址放在一個變量中,讓我在額外的字段中顯示這個IP地址。 它應該是這樣的:

"........output stuf..... 
................................ 
............................. 
.............................. 
..............................." 

"The IP Adress of the New server is ....." 

有沒有你知道把這些IP地址字段中的變量或以濾除輸出到IP地址的任何可能性?

如果您需要屏幕截圖來查看我的意思,請不要直接寫下來,我會給您!

+0

請編輯您的問題的標題。 「地址」與兩個d。在標題中引用Openstack和os_server。像這樣,即使它是一個很好的問題,我也不會滿足你的問題。 –

回答

2

Ansible OpenStack模塊使用shade python包創建服務器。

根據shade源代碼,create_server方法返回一個代表創建服務器的字典。

嘗試註冊os_server的結果並對其進行調試。 IP地址應該在那裏。

例子:

- name: launch a compute instance 
    hosts: localhost 
    tasks: 
    - name: launch an instance 
    os_server: 
     state: present 
     ... 
     auto_ip: yes 
    register: result 

- debug: var=result 

此外,您還可以看看這個sample playbook它正是這樣做的。

下面是摘錄:

- name: create cluster notebook VM 
    register: notebook_vm 
    os_server: 
    name: "{{ cluster_name }}-notebook" 
    flavor: "{{ notebook_flavor }}" 
    image: "CentOS-7.0" 
    key_name: "{{ ssh_key }}" 
    network: "{{ network_name }}" 
    security_groups: 
     - "{{ cluster_name }}-notebook" 
    auto_ip: yes 
    boot_from_volume: "{{ notebook_boot_from_volume }}" 
    terminate_volume: yes 
    volume_size: 25 

- name: add notebook to inventory 
    add_host: 
    name: "{{ cluster_name }}-notebook" 
    groups: notebooks 
    ansible_ssh_host: "{{ notebook_vm.openstack.private_v4 }}" 
    ansible_ssh_user: cloud-user 
    public_ip: "{{ notebook_vm.openstack.public_v4 }}" 
    public_name: "{{ lookup('dig', notebook_vm.openstack.public_v4 + '/PTR', wantlist=True)[0] }}" 
    tags: ['vm_creation'] 
+0

我認爲值的確切名稱是: 「{{notebook_vm.openstack.accessIPv4}}」 –