不在变量中时如何检查字符串

时间:2019-07-26 15:45:50

标签: ansible

我正在尝试创建ec2卷,如果设备不存在,请附加到EC2。

这是我的代码:

vars:
      region: us-east-1
      ec2_instance_id: i-xxxxxxxx
      ec2_volume_size: 5
      ec2_volume_name: chompx
      ec2_device_name: "/dev/sdf"

tasks:
     - name: List volumes for an instance
       ec2_instance_facts:
         instance_ids: "{{ ec2_instance_id }}"
         region: "{{ region }}"
       register: ec2
     - debug: msg="{{ ec2.instances[0].block_device_mappings | list }}"

     - name: Create new volume using SSD storage
       ec2_vol:
         region: "{{ region }}"
         instance: "{{ ec2_instance_id }}"
         volume_size: "{{ ec2_volume_size }}"
         volume_type: gp2
         state: present
       when: "ec2_device_name not in ec2"

问题, 即使在ec2变量中存在/ dev / sdf,创建卷代码仍在执行。

1 个答案:

答案 0 :(得分:0)

register: ec2创建一个包含有关已运行任务的所有信息的对象。您正在尝试仅对该命令的结果进行操作。

您可能需要:

when: "ec2_device_name not in ec2.stdout_lines"  # ec2.stdout_lines should be a list

但是我不确定该命令的输出是否100%。通过添加调试语句进行检查:

- debug: var=ec2