首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible:从寄存器变量中提取值,以便在同一剧本中的其他剧本中使用。

Ansible:从寄存器变量中提取值,以便在同一剧本中的其他剧本中使用。
EN

Server Fault用户
提问于 2016-08-09 06:15:08
回答 1查看 1.9K关注 0票数 2

我正在使用Ansible建立一个完整的环境。由于某些原因,Ansible没有获取变量值。

我使用的是Ansible 2.1.1.0。

下面是我试图做的一个简单的例子:

我已经在register: ec2_vpc注册了我的vpc。

代码语言:javascript
复制
  syntax-1 # This doesn't work
        - name: Add to host vars
          add_host:
                name: "vpc subnets"
                groups: vpc_vars
                vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
                vpcid: "{{ ec2_vpc.vpc_id }}"
        - debug: var=vpc_subnet_id
        - debug: var=vpcid

   syntax-2 # These works
        - name: Record vpc id
          debug: var=ec2_vpc.vpc_id

        - name: Record subnet id
          debug: var=ec2_vpc.subnets[0].id

上述条带的结果:

代码语言:javascript
复制
TASK [debug] *******************************************************************
ok: [localhost] => {
    "vpc_subnet_id": "VARIABLE IS NOT DEFINED!"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "vpcid": "VARIABLE IS NOT DEFINED!"
}

TASK [Record vpc id] ***********************************************************
ok: [localhost] => {
    "ec2_vpc.vpc_id": "vpc-4sdh3832f"
}

TASK [Record subnet id] ********************************************************
ok: [localhost] => {
    "ec2_vpc.subnets[0].id": "subnet-edfjdh3482"
}

为什么我的第一个语法不是选择值,而是返回VARIABLE IS NOT DEFINED!

更新:在这里,我的第二个语法描述了我正在正确地从注册变量的JSON结果中排序值。但是我希望它适用于我的第一种语法,这意味着我想要向动态库存中添加主机变量。这样我就可以在另一部戏中重新使用它了

EN

回答 1

Server Fault用户

发布于 2016-08-09 07:15:19

add_host模块在主机的动态列表中创建主机。然后,您将对这组主机运行另一个剧本(在同一个剧本中),在该播放中,您将能够访问您设置的变量。

例如,使用以下语法:

代码语言:javascript
复制
- hosts: all
  # ...
  tasks:
    - name: Add to host vars
        add_host:
          name: host_1
          groups: dynamic_hosts
          vpc_subnet_id: "{{ ec2_vpc.subnets[0].id }}"
          vpcid: "{{ ec2_vpc.vpc_id }}"

- hosts: dynamic_hosts
  # ...
  tasks:
    - debug: var=vpc_subnet_id
    - debug: var=vpcid

上面示例中的add_host创建一个具有以下内容的内存中库存文件:

代码语言:javascript
复制
[dynamic_hosts]
host_1 vpc_subnet_id="{{ ec2_vpc.subnets[0].id }}" vpcid="{{ ec2_vpc.vpc_id }}"
票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/795676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档