【发布时间】:2022-01-23 18:11:44
【问题描述】:
我希望能够从文件 create-public-sunbet 中引用文件 create-public-vpc 注册的变量 vpc_info
/etc/ansible/roles/ec2/tasks/main.yml
# tasks file for ec2-provision
- name:
import_tasks: create-vpc.yml
import_tasks: create-public-subnet.yml
/etc/ansible/roles/ec2/vars/main.yml
---
# vars file for ec2-provision
################################### designate python interpreter ########################
ansible_python_interpreter: /usr/local/bin/python3.8
############################## VPC INFO #########################################
vpc_name: "My VPC"
vpc_cidr_block: "10.0.0.0/16"
aws_region: "us-east-1"
################################### VPC Subnet ###############################################
aws_zone: "us-east-1a"
# Subnets
vpc_public_subnet_cidr: "10.0.0.0/24"
# Subnet
vpc_private_subnet_cidr: "10.0.1.0/24"
创建-vpc.yml
- name: Create AWS VPC
ec2_vpc_net:
name: "{{ vpc_name }}"
cidr_block: "{{ vpc_cidr_block }}"
region: "{{ aws_region }}"
aws_access_key: "{{ access_key }}"
aws_secret_key: "{{ secret_key }}"
state: present
register: vpc_info
- name: Set vpc_info as fact
set_fact:
vpc_info_fact: "{{ vpc_info }}"
创建-public-sunbet.yml
- name: print vpc_info_fact
debug:
msg: "{{ hostvars['localhost']['vpc_info_fact'] }}"
- name: Create Public Subnet in VPC
ec2_vpc_subnet:
vpc_id: "{{ vpc_info['vpc']['id'] }}"
cidr: "{{ vpc_public_subnet_cidr }}"
region: "{{ aws_region }}"
az: "{{ aws_zone }}"
aws_access_key: "{{ access_key }}"
aws_secret_key: "{{ secret_key }}"
state: present
tags:
Name: Public Subnet
register: public_subnet_info
当我运行ansible-playbookec2-provision.yml时,报错信息如下:
[root@VM-0-14-centos tasks]# ansible-playbook ec2-provision.yml
[WARNING]: While constructing a mapping from /etc/ansible/roles/EC2/tasks/main.yml, line 4, column 3, found a duplicate dict key (import_tasks). Using last defined value
only.
PLAY [localhost] ************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [localhost]
TASK [EC2 : print vpc_info_fact] ********************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'vpc_info_fact' is undefined\n\nThe error appears to be in '/etc/ansible/roles/EC2/tasks/create-public-subnet.yml': line 3, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: print vpc_info_fact\n ^ here\n"}
PLAY RECAP ******************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
【问题讨论】:
-
问题不在于不同的文件,而在于不同的播放。如果这些任务在不同的播放中被调用,请使用
set_fact在第一次播放中存储 var。然后在下一个“正常”调用它(如果它在不同的主机上注册,则使用hostvars)。 -
请使用MCVE 编辑您的问题。我们不知道您如何准确设置事实,在哪个主机上,在哪个游戏中以及您稍后尝试如何/在何处重用该 var。
-
我尝试
set_ fact一个变量,然后从 create-public-sunbet.yml 文件中访问它(使用hostvars ['localhost']),但返回值有没有变量vpc_info_fact 和vpc_info -
我已经阅读了这条评论 3 次。删除它并重新粘贴它和/或将它复制到您的问题和下面的答案中不会告诉我们您如何准确设置事实,使用哪个主机来自哪个库存,在哪个游戏中,使用哪个模块加载您的文件(包括,include_tasks,角色...),在哪个剧本中。等等。请阅读How to ask 并创建一个真实 MCVE,您将其添加为对您的问题的编辑,而不是在评论中。谢谢。
-
感谢您的建议,我再次编辑了问题描述
标签: ansible ansible-facts