我试图通过命令行将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
?
谢谢。 迈克尔。
答案 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