2017-04-03 2 views
-1

여기에 나와있는 예제 http://docs.ansible.com/ansible/iam_policy_module.html을 사용하여 새 AWS IAM 사용자를 만들고이 새 사용자의 사용자 이름을 사용하여 IAM 정책을 첨부하려고합니다.새롭게 생성 된 사전에 액세스하는 방법

예는 :

task: 
- name: Create Two Groups, Mario and Luigi 
    iam: 
    iam_type: group 
    name: "{{ item }}" 
    state: present 
    with_items: 
    - Mario 
    - Luigi 
    register: new_groups 

- name: Apply READ-ONLY policy to new groups that have been recently created 
    iam_policy: 
    iam_type: group 
    iam_name: "{{ item.created_group.group_name }}" 
    policy_name: "READ-ONLY" 
    policy_document: readonlypolicy.json 
    state: present 
    with_items: "{{ new_groups.results }}" 

나는 하나의 사용자와 함께 작업 할 것을 적응 :

- hosts: 127.0.0.1 
    gather_facts: no 
    connection: local 
    tasks: 
    - name: Create user lamda_ecr_delete 
    iam: 
     iam_type: user 
     name: "{{ item }}" 
     state: present 
    with_items: 
     - lambda_ecr_delete 
    register: new_user 

    - name: Apply ecr delete policy to newly created user 
     iam_policy: 
      iam_type: user 
      iam_name: "{{ item.created_user.user_name }}" 
      policy_name: "lambda_ecr_delete" 
      policy_document: assets/aws-policies/lambda_ecr_delete.json 
      state: present 
     with_items: "{{ new_user.results }}" 

하지만 사전에 사용자 이름을 검색 할 때, item.created_user가 존재하지 않습니다.

나는 그것이 내가 아마 [0]에 액세스하고 유효한 키입니다 invocation.module_args.name를 호출 할 수 있도록 딕셔너리를 포함하는 파이썬 목록이 있다고 식별 할 수 {{ new_user.results }}의 콘텐츠를 볼 수 debug를 사용

.

ok: [127.0.0.1] => { 
    "changed": false, 
    "msg": [ 
     { 
      "_ansible_item_result": true, 
      "_ansible_no_log": false, 
      "_ansible_parsed": true, 
      "changed": false, 
      "invocation": { 
       "module_args": { 
        "iam_type": "user", 
        "name": "lambda_ecr_delete", 
        "state": "present" 
       } 
      }, 
      "item": "lambda_ecr_delete", 
      "msg": "remote module (iam) does not support check mode", 
      "skipped": true 
     } 
    ] 
} 

하지만 그 hackish 보인다 --check으로 실행할 때

debug: msg="{{ new_user.results }}"의 출력이다. 해당 module_args에 직접 액세스 할 수있는 지름길이 있습니까? 위의 예제에 표시된 것처럼 .created_user?

답변

0

대신 item.user_meta.created_user.user_name을 사용하십시오.

의 디버그 출력을 검사하면 에 created_user이 중첩되어 있음을 알 수 있습니다.

"user_meta": { 
    "access_keys": null, 
    "created_user": { 
     "arn": "arn:aws:iam::<yourid>:user/test-ansible", 
     "create_date": "2017-04-03T16:31:53.530Z", 
     "path": "/", 
     "user_id": "EXAMPLEKAJHFEXAMPLE", 
     "user_name": "test-ansible" 
    }, 
    "password": null 
} 

그러나이 두 번째 실행 iam 모듈에 다른 출력을 반환 경고 :

"user_name": "test-ansible" 

대신 사전 user_meta의 같은데.

+0

나는 내 질문에 디버그의 출력을 추가했습니다. 보시다시피 귀하의 것과는 아주 다릅니다. 나는 어떻게 이해하지 못한다. 나는 방금 사용하기 시작했는데 문서에서 찾을 수 없었다. 분명한 이유가 있고 그것을 놓쳤다면, 저에게 자원을 가르쳐 주시고 저를 직접 파헤 치겠습니다. – Bastian

+1

출력에 '원격 모듈 (iam)이 검사 모드를 지원하지 않습니다.'라는 명확한 메시지가 표시되어 작업이 Anipal에 의해 건너 뛰었습니다. 플레이 북 테스팅을 위해 AWS에서 놀이터 계정을 만들고'--check' 매개 변수가 아닌 실제 테스트를 해보십시오. –

관련 문제