2017-01-27 10 views
0

Я написал быстро загружаемую книгу для запуска простого экземпляра ec2, но я думаю, что у меня есть проблема с тем, как я хочу пройти аутентификацию.как использовать профиль aws при использовании модуля exsible ec2.py

То, что я не хочу делать, это установить мои aws-ключи доступа/секретные как переменные env, так как они истекают каждый час, и мне нужно восстановить файл ~/.aws/credentials с помощью скрипта.

Сейчас мой анзибль Playbook выглядит следующим образом:

--- # Launch ec2 
- name: Create ec2 instance 
    hosts: local 
    connection: local 
    gather_facts: false 
    vars: 
    profile: profile_xxxx 
    key_pair: usrxxx 
    region: us-east-1 
    subnet: subnet-38xxxxx 
    security_groups: ['sg-e54xxxx', 'sg-bfcxxxx', 'sg-a9dxxx'] 
    image: ami-031xxx 
    instance_type: t2.small 
    num_instances: 1 
    tag_name: ansibletest 
    hdd_volumes: 
    - device_name: /dev/sdf 
     volume_size: 50 
     delete_on_termination: true 
    - device_name: /dev/sdh 
     volume_size: 50 
     delete_on_termination: true 
    tasks: 
    - name: launch ec2 
     ec2: 
     count: 1 
     key_name: "{{ key_pair }}" 
     profile: "{{ profile }}" 
     group_id: "{{ security_groups }}" 
     instance_type: "{{ instance_type }}" 
     image: "{{ image }}" 
     region: "{{ region }}" 
     vpc_subnet_id: "{{ subnet }}" 
     assign_public_ip: false 
     volumes: "{{ hdd_volumes }}" 
     instance_tags: 
      Name: "{{ tag_name }}" 
      ASV: "{{ tag_asv }}" 
      CMDBEnvironment: "{{ tag_cmdbEnv }}" 
      EID: "{{ tag_eid }}" 
      OwnerContact: "{{ tag_eid }}" 
     register: ec2 
    - name: print ec2 vars 
     debug: var=ec 

мой файл хосты это:

[local] 
localhost ansible_python_interpreter=/usr/local/bin/python2.7 

Я бег моего сборника пьес, как это:

ansible-playbook -i hosts launchec2.yml -vvv 

, а затем получите это обратно:

PLAYBOOK: launchec2.yml ******************************************************** 
1 plays in launchec2.yml 

PLAY [Create ec2 instance] ***************************************************** 

TASK [launch ec2] ************************************************************** 
task path: /Users/usrxxx/Desktop/cloud-jumper/Ansible/launchec2.yml:27 
Using module file /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/modules/core/cloud/amazon/ec2.py 
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: usrxxx 
<localhost> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo ~/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730 `" && echo ansible-tmp-1485527483.82-106272618422730="` echo ~/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730 `") && sleep 0' 
<localhost> PUT /var/folders/cx/_fdv7nkn6dz21798p_bn9dp9ln9sqc/T/tmpnk2rh5 TO /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/ec2.py 
<localhost> PUT /var/folders/cx/_fdv7nkn6dz21798p_bn9dp9ln9sqc/T/tmpEpwenH TO /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/args 
<localhost> EXEC /bin/sh -c 'chmod u+x /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/ /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/ec2.py /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/args && sleep 0' 
<localhost> EXEC /bin/sh -c '/usr/bin/env python /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/ec2.py /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/args; rm -rf "/Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/" > /dev/null 2>&1 && sleep 0' 
fatal: [localhost]: FAILED! => { 
    "changed": false, 
    "failed": true, 
    "invocation": { 
     "module_name": "ec2" 
    }, 
    "module_stderr": "usage: ec2.py [-h] [--list] [--host HOST] [--refresh-cache]\n    [--profile BOTO_PROFILE]\nec2.py: error: unrecognized arguments: /Users/usrxxx/.ansible/tmp/ansible-tmp-1485527483.82-106272618422730/args\n", 
    "module_stdout": "", 
    "msg": "MODULE FAILURE" 
} 
    to retry, use: --limit @/Users/usrxxx/Desktop/cloud-jumper/Ansible/launchec2.retry 

PLAY RECAP ********************************************************************* 
localhost     : ok=0 changed=0 unreachable=0 failed=1 

я заметил в файле ec2.py он говорит, что это:

NOTE: This script assumes Ansible is being executed where the environment 
variables needed for Boto have already been set: 
    export AWS_ACCESS_KEY_ID='AK123' 
    export AWS_SECRET_ACCESS_KEY='abc123' 

This script also assumes there is an ec2.ini file alongside it. To specify a 
different path to ec2.ini, define the EC2_INI_PATH environment variable: 

    export EC2_INI_PATH=/path/to/my_ec2.ini 

If you're using eucalyptus you need to set the above variables and 
you need to define: 

    export EC2_URL=http://hostname_of_your_cc:port/services/Eucalyptus 

If you're using boto profiles (requires boto>=2.24.0) you can choose a profile 
using the --boto-profile command line argument (e.g. ec2.py --boto-profile prod) or using 
the AWS_PROFILE variable: 

    AWS_PROFILE=prod ansible-playbook -i ec2.py myplaybook.yml 

поэтому я побежал так:

AWS_PROFILE=profile_xxxx ansible-playbook -i hosts launchec2.yml -vvv 

, но все еще есть те же самые результаты ...

- --EDIT -----

Я также запускал его следующим образом:

export ANSIBLE_HOST_KEY_CHECKING=false 
export AWS_ACCESS_KEY=<your aws access key here> 
export AWS_SECRET_KEY=<your aws secret key here> 

ansible-playbook -i hosts launchec2.yml 

но все еще получил это обратно ... все еще, похоже, проблема с полномочиями?

usrxxx$ ansible-playbook -i hosts launchec2.yml 

PLAY [Create ec2 instance] ***************************************************** 

TASK [launch ec2] ************************************************************** 
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "module_stderr": "usage: ec2.py [-h] [--list] [--host HOST] [--refresh-cache]\n    [--profile BOTO_PROFILE]\nec2.py: error: unrecognized arguments: /Users/usrxxx/.ansible/tmp/ansible-tmp-1485531356.01-33528208838066/args\n", "module_stdout": "", "msg": "MODULE FAILURE"} 
    to retry, use: --limit @/Users/usrxxx/Desktop/cloud-jumper/Ansible/launchec2.retry 

PLAY RECAP ********************************************************************* 
localhost     : ok=0 changed=0 unreachable=0 failed=1 

--- EDIT 2 ------

полностью удалены анзибль, а затем установили с доморощенного, но получил ту же ошибку .... так что я думаю, пошел в каталог, что его ищет ec2.py (Using module file /usr/local/Cellar/ansible/2.2.1.0/libexec/lib/python2.7/site-packages/ansible/modules/core/cloud/amazon/ec2.py) и заменить этот ec2.py с этим ... https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/ec2.py....but теперь получить эту ошибку:

Using /Users/usrxxx/ansible/ansible.cfg as config file 

PLAYBOOK: launchec2.yml ******************************************************** 
1 plays in launchec2.yml 

PLAY [Create ec2 instance] ***************************************************** 

TASK [aws : launch ec2] ******************************************************** 
task path: /Users/usrxxx/Desktop/cloud-jumper/Ansible/roles/aws/tasks/main.yml:1 
Using module file /usr/local/Cellar/ansible/2.2.1.0/libexec/lib/python2.7/site-packages/ansible/modules/core/cloud/amazon/ec2.py 
fatal: [localhost]: FAILED! => { 
    "failed": true, 
    "msg": "module (ec2) is missing interpreter line" 
} 

ответ

0

Кажется, вы поместили ec2.pyinventory script в папку /path/to/playbook/library/.
Вы не должны ставить динамические сценарии инвентаризации - таким образом Ansible запускает сценарий инвентаризации вместо ec2 module.

Удалить ec2.py из папки библиотеки проекта (или Ansible global library, определенной в файле ansible.cfg) и повторите попытку.

+0

У меня нет файлов ec2.py или ec2.ini в моем пути к плей-книжке ... разве он не выглядит в '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ site-packages/ansible/modules/core/cloud/amazon/'для модуля ec2.py? – user2061886

+1

Возможно, вы разместили его где-то еще в пути поиска библиотеки. Попробуйте использовать плейер с чистой виртуальной машиной. Ansible примет ec2.py из пути по умолчанию, если в других доступных местах нет ec2.py (эта логика очень полезна для переопределения модулей по умолчанию). В результате вы можете использовать сценарий инвентаризации вместо модуля ec2. –

+0

Я полностью удалил приложение и установил его снова через homebrew, но все равно получаю ту же ошибку ... – user2061886

Смежные вопросы