Ansible-在变量查找中使用字符串

Ansible-在变量查找中使用字符串,ansible,ansible-playbook,Ansible,Ansible Playbook,我试图让我的剧本意识到他们的环境;那是生产或舞台 我的playbook首先成功地为其环境提取ec2_标记,并将其设置为变量“env”。在ec2供应任务中,我想在vpc和子网查找中使用'env'变量,因此它会根据其环境获取正确的变量。下面我尝试将'env'变量添加到查找中,但我得到的是一个完整的字符串,而不是从变量文件中提取它 是否需要在{{}中添加一些逻辑检查 - name: Provision instance ec2: key_name: "{{ aws_publ

我试图让我的剧本意识到他们的环境;那是生产或舞台

我的playbook首先成功地为其环境提取ec2_标记,并将其设置为变量“env”。在ec2供应任务中,我想在vpc和子网查找中使用'env'变量,因此它会根据其环境获取正确的变量。下面我尝试将'env'变量添加到查找中,但我得到的是一个完整的字符串,而不是从变量文件中提取它

是否需要在
{{}
中添加一些逻辑检查

- name: Provision instance
      ec2:
        key_name: "{{ aws_public_key }}"
        instance_type: t2.medium
        image: "{{ aws_ubuntu_ami }}"
        wait: true
        vpc_subnet_id: "{{ env + '_subnet_public1' }}"
        group_id: "{{ env + '_app_group' }}"
        assign_public_ip: yes
        instance_tags:
          Name: "{{ sys_name }}"
          Environment: "{{ env }}"
        region: "{{ aws_region }}"
        volumes:
          - device_name: /dev/sda1
            volume_size: 300
            delete_on_termination: true
      register: ec2

如果要执行变量插值,则需要使用
hostvars[inventory\u hostname]['variable']

本手册将简要介绍这一点,但对于您的用例,您应该能够执行以下操作:

- name: Provision instance
      ec2:
        key_name: "{{ aws_public_key }}"
        instance_type: t2.medium
        image: "{{ aws_ubuntu_ami }}"
        wait: true
        vpc_subnet_id: hostvars[inventory_hostname][env + '_subnet_public1']
        group_id: hostvars[inventory_hostname][env + '_app_group']
        assign_public_ip: yes
        instance_tags:
          Name: "{{ sys_name }}"
          Environment: "{{ env }}"
        region: "{{ aws_region }}"
        volumes:
          - device_name: /dev/sda1
            volume_size: 300
            delete_on_termination: true
      register: ec2

这仍然只是设置了一个类似“dev_subnet_public1”的字符串,而不是从我的主变量文件中提取“dev_subnet_public1”的真实子网ID。抱歉,误解了您的意思。我使用变量插值添加了一个答案。