【问题标题】:Ansible module: EC2 add security group to running instanceAnsible 模块:EC2 将安全组添加到正在运行的实例
【发布时间】:2020-05-13 14:19:10
【问题描述】:

我正在尝试向正在运行的实例添加 1 个额外的安全组。 阅读使用它时应该能够阅读的文档:

- name: "Attach SG"
  ec2:
    aws_access_key: "{{ assumed_role.sts_creds.access_key }}"
    aws_secret_key: "{{ assumed_role.sts_creds.secret_key }}"
    security_token: "{{ assumed_role.sts_creds.session_token }}"
    region: "{{ region }}"
    instance_ids:
      - "{{ ec2_instances.instances.0.instance_id }}"
    state: running
    group_id:
      - group1
      - group2

现在这在我们的情况下不起作用,所以我正在获取所有安全组并将新的安全组添加到机器中,如下所示:

- name: "Attach SG"
  ec2:
    aws_access_key: "{{ assumed_role.sts_creds.access_key }}"
    aws_secret_key: "{{ assumed_role.sts_creds.secret_key }}"
    security_token: "{{ assumed_role.sts_creds.session_token }}"
    region: "{{ region }}"
    instance_ids:
      - "{{ ec2_instances.instances.0.instance_id }}"
    state: running
    group_id:
      - "{{ item.group_id }}"
  when: total_group_list.stdout == "nok"
  with_items:
    - "{{ ec2_instances.instances.0.network_interfaces.0.groups }}"
    - "{{ ic_sg_icinga_db }}"
  loop_control:
    label: "{{ item.group_id }}"

唯一的问题是,现在它为这些项目中的每个组运行此代码,因此如果 item1 有 3 个组并且 item2 1 它将 adddelete 所有组一个接一个地留给我最后一组仅它使用:

TASK [c-icinga2-agent : Attach SG] 
changed: [bamboo] => (item=sg-1)
changed: [bamboo] => (item=sg-2)
changed: [bamboo] => (item=sg-3)
changed: [bamboo] => (item=sg-4)

结果: 主机只有sg-4,缺少sg-[1:3]

关于如何使用 ansible 模块附加 1 个安全组并保留主机上已经存在的旧安全组的任何想法?

我目前的任务是:

  1. 获取所有当前安全组:ec2_instance_info of 1 个实例
  2. 过滤当前附加组并检查是否已添加新组
  3. 如果未添加新的安全组,则附加 SG。

期望的结果是Attach SG 只与来自with_items 的所有组一起运行一次,但我没有想法/地方来看看如何完成这项工作。 感谢您的帮助。

【问题讨论】:

  • 查看ec2_instance 模块来管理现有实例。
  • 是的,我试过了,但没有更改,现在说好的,但仍然没有新的安全组,只是旧的 3 和 4 仍未连接

标签: amazon-ec2 ansible


【解决方案1】:

结果:主机只有 sg-4,缺少 sg-[1:3]

嗯,是的,因为你循环他们,并说“组列表是only {{ item }}”,而你想要的是@ 987654321@

  group_id: "{{ 
       ec2_instances.instances.0.network_interfaces.0.groups
       | union([ic_sg_icinga_db]) }}"
  when: total_group_list.stdout == "nok"

也可以在list 上使用+.extend(),但这两个没有考虑唯一性,而根据定义,联合则考虑了

【讨论】:

  • 啊,谢谢,我会玩的,看起来这将是我过滤后的金票!
  • 结果:Invalid id: "['sg-1', 'sg-2', 'sg-3', 'sg-4']" (expecting "sg- 尽管向前迈出了一大步,但它没有添加安全组,而 ec2_instance 它只是说没问题,什么也不做
  • 在头疼之后,现在一切都说得通了 :)
猜你喜欢
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 2021-05-29
  • 2021-05-29
  • 2020-08-25
  • 1970-01-01
  • 2017-10-25
  • 2019-01-05
相关资源
最近更新 更多