2016-04-12 133 views
0

我正在尋找一個很好的方式Ansible獲取從ec2_group Ansible模塊

目前我使用的Ansible模塊ec2_group是悄無聲息改變安全組相匹配的是,以顯示或列表安全組輸出改變在Ansible中定義,但不顯示更改內容。

改變:[本地主機 - > 127.0.0.1] => { 「改變」:真實的, 「GROUP_ID」: 「SG-8649adee」}

我擔心,有人可能會增加在執行Ansible的ec2_group任務時,Web控制檯中的某些內容會被擦除。沒關係,只要我能得到一些關於之前狀態的信息(在輸出中),所以如果擦除了一些重要但「無證」的修改,它可以很快恢復。

目前我知道的唯一方法是運行這個本地命令模塊:

aws ec2 describe-security-groups [some pattern] 

是否有更好的方法來內Ansible做到這一點,完全有希望?

+0

還不清楚。你想用安全的方式描述安全組? – helloV

回答

2

Ansible是一種在環境上執行更改以對其進行配置以使其看起來像已定義的工具。因此,它所做的幾乎所有事情純粹是爲了制定所述更改的目的,並且只有極少數模塊不進行更改,而是進行事實收集以使其他模塊進行更改。

因此,我會說,如果你使用Ansible來控制你的遺產,那麼你應該完全支持它。如果有人在Ansible之外進行更改,那麼Ansible將其改回應該是件好事。如果有人需要進行手動更改,那麼該人員應該有一些機制來防止Ansible運行,直到將更改反饋到自動化代碼中(在我的公司,我們使用Jenkins驅動所有的我們的自動化,以便他們可以簡單地禁用相關的工作)。

如果這不是您的選擇,那麼您可以在更改之前總是提出並描述該組,然後有任務檢查ec2_group模塊是否更改了任何內容,如果是,則輸出安全組以前的樣子:

- hosts: localhost 
    connection: local 
    vars: 
    security_group_name: testing 
    tasks: 
    - name: describe ec2 security group before change 
     shell: "aws ec2 describe-security-groups --group-names {{ security_group_name }}" 
     register: before 
     changed_when: false 

    - name: create ec2 security group 
     ec2_group: 
     name: "{{ security_group_name }}" 
     description: "{{ security_group_name }}" 
     rules: 
      - proto: tcp 
      from_port: 22 
      to_port: 22 
      cidr_ip: 0.0.0.0/0 
      - proto: udp 
      from_port: 123 
      to_port: 123 
      cidr_ip: 10.0.0.0/8 
     rules_egress: 
      - proto: all 
      cidr_ip: 0.0.0.0/0 
     register: ec2_group 

    - name: security group changed 
     debug: var=before 
     when: ec2_group.changed 

另一種選擇可能是簡單地使用CloudTrail,看看是什麼在您的AWS賬戶被改變。

+0

謝謝@ydaetskcoR 我看到我們有共同的想法:) 我確實將CloudTrail作爲「最後的手段」。 – sirkubax