如何将VPC ID传递给下一个任务

时间:2019-12-17 20:00:54

标签: ansible

我试图通过命令行将VPC ID传递给子网任务以创建子网,并且该子网只能给我ID:

aws ec2 describe-vpcs --filter Name=tag:Name,Values=ANSIBLE_VPC --query Vpcs[].VpcId --output text
vpc-0b3697513d5914abc

但是当我在剧本中执行它时,我也使用了调试,并且它接收了整个输出: 我的子网脚本如下:

# TO DISPLAY VPC ID BELOW:
  - name: TO DISPLAY VPC_ID
    command: aws ec2 describe-vpcs --filter Name=tag:Name,Values=ANSIBLE_VPC --query Vpcs[].VpcId --output text
    register: VPC_ID
 #- name:  GREP VPC ID
 #  shell: grep vpc.id "VPC_ID"
  - debug: var=VPC_ID

然后输出显示给我:

TASK [debug] ******************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "VPC_ID": {
        "changed": true,
        "cmd": [
            "aws",
            "ec2",
            "describe-vpcs",
            "--filter",
            "Name=tag:Name,Values=ANSIBLE_VPC",
            "--query",
            "Vpcs[].VpcId",
            "--output",
            "text"
        ],
        "delta": "0:00:03.275744",
        "end": "2019-12-17 13:57:51.062623",
        "failed": false,
        "rc": 0,
        "start": "2019-12-17 13:57:47.786879",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "vpc-0b3697513d5914abc",
        "stdout_lines": [
            "vpc-0b3697513d5914abc"
        ]
    }
}

我如何仅获得输出:vpc-0b3697513d5914abc

谢谢。 迈克尔。

2 个答案:

答案 0 :(得分:0)

变量VPC_ID是一个字典(或散列),包含与注册它的任务有关的所有相关信息。要仅访问输出,可以使用以下命令:

  - name: TO DISPLAY VPC_ID
    command: aws ec2 describe-vpcs --filter Name=tag:Name,Values=ANSIBLE_VPC --query Vpcs[].VpcId --output text
    register: VPC_ID

  - debug: var=VPC_ID.stdout

请注意,var=VPC_ID["stdout"]也将起作用。这主要取决于您的偏好,但是这种表示在某些情况下可能会有用。

我还建议您阅读有关使用变量的Ansible文档:https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html-如果您继续沿Ansible路径使用,将会很有帮助

答案 1 :(得分:0)

您可以尝试使用set_fact将输出存储在变量中,并在其他Ansible任务中使用。

下面是适合您的代码段,它将值存储在vpc_id变量中。

- name: TO DISPLAY VPC_ID
  command: aws ec2 describe-vpcs --filter Name=tag:Name,Values= ANSIBLE_VPC --query Vpcs[].VpcId --output text
  register: vpc

- name: Set VPC ID in variable
  set_fact:
    vpc_id:  "{{ vpc.stdout }}"

- debug: var=vpc_id