Yaml Ansible返回值-需要IP地址第2部分

Yaml Ansible返回值-需要IP地址第2部分,yaml,ansible,return-value,ansible-playbook,Yaml,Ansible,Return Value,Ansible Playbook,该问题与此处的主题有关: 我的答案被删除了,所以他们告诉我需要为它打开一个新的主题。。。不知道为什么,但没关系 所以我的问题是关于Eric Citaire的回答: 谢谢你的快速回复,我试过了,对输出有点困惑 这是我的档案: - os_server: state: present flavor: m1.nano auth: auth_url: **** username: **** password: **** project_name:

该问题与此处的主题有关:

我的答案被删除了,所以他们告诉我需要为它打开一个新的主题。。。不知道为什么,但没关系

所以我的问题是关于Eric Citaire的回答:

谢谢你的快速回复,我试过了,对输出有点困惑

这是我的档案:

 - os_server:
  state: present
   flavor: m1.nano
   auth:
     auth_url: ****
     username: ****
     password: ****
     project_name: admin
     domain_id: ****
   name: ansibletest
   region_name: RegionOne   
   image: 4e7ab5c8-4b39-4c77-b68d-cf2ea7e1df1a
   key_name: ansible
   timeout: 200
   nics:
     - net-id: a5a73ab9-3ee5-49a6-bea0-f44f9e376ca0
   auto_ip: yes  
   register: result    
- debug: var=result
我得到以下输出:

>root@ansible1:~/HP# ansible-playbook -i Inventory playbook.yml

>PLAY ***************************************************************************

>TASK [setup] ******************************************************************* ok: [172.20.22.21]

>TASK [openstack : os_server] *************************************************** fatal: [172.20.22.21]: FAILED! => {"changed": false, "failed": true, "msg": "unsupported parameter for module: register"}

>PLAY RECAP ********************************************************************* 172.20.22.21 : ok=1 changed=0 unreachable=0 failed=1
你能帮我吗?注:***表示有些内容最好不要看^^

2017年7月27日起编辑:

我现在开始工作了,结果现在在“var”中,我看到了一个输出。 首先,这里是更新的剧本:

    - name: create a server
  os_server:
    state: present
    flavor: m1.nano
    auth:
      auth_url: ****
      username: ****
      password: ****
      project_name: admin
      domain_id: ****
    name: ansibletest
#   region_name: RegionOne
    image: 4e7ab5c8-4b39-4c77-b68d-cf2ea7e1df1a
    key_name: ansible
    timeout: 200
    auto_ip: yes
    nics:
      - net-id: a5a73ab9-3ee5-49a6-bea0-f44f9e376ca0    
  register: result
- debug: var=result
我得到一个像这样的长输出:

TASK [openstack : debug] *******************************************************
ok: [172.20.22.21] => {
    "result": {
        "changed": false,
        "id": "6f40f396-7ef8-4e0e-9769-2b9cea898269",
            .........
            "accessIPv4": "172.20.22.58",
            .......
                    {
                        ..........
                    },
                    {
                        ............
                        "addr": "172.20.22.58",
                        ......
                    }
                ]
            },
            ........
            },
            "interface_ip": "172.20.22.58",
            .................
                    .............
                ]
            },
            "os-extended-volumes:volumes_attached": [],
            "private_v4": "10.0.100.92",
            "progress": 0,
            "public_v4": "172.20.22.58",
            ................
                {
                   ...........
    }
}
所以,因为我得到了这个looong输出,它没有多大帮助。我只需要IP地址(在本例中是172.20.22.58)-是否有可能像这样“过滤”输出或smth?
请帮助我:/

您的格式设置有点不正确,但基本上,
register
不是任务的参数,而是任务级别的参数。这就是我的意思

坏的:

好:

注意,它与os_服务器处于同一级别,而不是os_服务器的参数

编辑-返回值 有两种方法可以得到结果。首先是在别处使用
{{result.id.accessIPv4}
,另一个是使用携带它的set_事实。如果您需要在另一个角色中使用IP,并且可以很好地处理元依赖关系,那么这一点尤其有用

- set_fact: machine_ip="{{result.id.accessIPV4}}"

您的格式设置稍有偏差,但基本上,
register
不是任务的参数,而是任务级别的参数。这就是我的意思

坏的:

好:

注意,它与os_服务器处于同一级别,而不是os_服务器的参数

编辑-返回值 有两种方法可以得到结果。首先是在别处使用
{{result.id.accessIPv4}
,另一个是使用携带它的set_事实。如果您需要在另一个角色中使用IP,并且可以很好地处理元依赖关系,那么这一点尤其有用

- set_fact: machine_ip="{{result.id.accessIPV4}}"

使用Ansible时,输出为JSON。因此,基本上您可以将输出视为
json
,并使用
{}
[]
访问它的键/值

在您的示例中,您必须告诉我们输出的正确结构。但无论如何,让我们假设
avcesspv4
result
的第一级子对象,即您的大对象,并且您希望访问它:

因此,在注册
结果
变量后:

- register: result
您可以访问其子级

此外,您可以在注册输出后定义变量,这是Ansible最佳实践,方法如下:

- set_fact: server_IP="{{ result.accessIPv4 }}"

使用Ansible时,输出为JSON。因此,基本上您可以将输出视为
json
,并使用
{}
[]
访问它的键/值

在您的示例中,您必须告诉我们输出的正确结构。但无论如何,让我们假设
avcesspv4
result
的第一级子对象,即您的大对象,并且您希望访问它:

因此,在注册
结果
变量后:

- register: result
您可以访问其子级

此外,您可以在注册输出后定义变量,这是Ansible最佳实践,方法如下:

- set_fact: server_IP="{{ result.accessIPv4 }}"

好的,这样更好。现在它工作得更好了,我得到了一个输出,但现在我得到了一切。。作为输出,编辑问题以显示整个输出。我不知道里面有什么,所以我帮不上忙。完成-你需要检查我问题的“编辑”部分,我希望现在它更清楚-如果不只是让我知道,我试着让它更清楚。好的,那更好。现在它工作得更好了,我得到了一个输出,但现在我得到了一切。。作为输出,编辑问题以显示整个输出。我不知道里面有什么,所以我帮不上忙。完成-你需要检查我问题的“编辑”部分,我希望它现在更清楚-如果不只是让我知道,我试着让它更清楚。