0

Я новичок в Ansible, Ansible Tower и AWS Cloud Formation, и я пытаюсь использовать Ansible Tower для развертывания контейнера EC2 с использованием шаблона Cloud Formation. Я пытаюсь запустить задание развертывания, и я столкнулся с этой ошибкой ниже.Развертывание стека облаков в AWS с использованием Ansible Tower

TASK [create/update stack] ***************************************************** 
    task path: /var/lib/awx/projects/_6__api/tasks/create_stack.yml:2 
    <127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: awx 
    <127.0.0.1> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo   $HOME/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790 `" && echo ansible-tmp-1470427494.79-207756006727790="` echo $HOME/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790 `") && sleep 0' 
<127.0.0.1> PUT /tmp/tmpgAsKKv TO /var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/cloudformation 
<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-coqlkeqywlqhagfixtfpfotjgknremaw; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 AWS_DEFAULT_REGION=us-west-2 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/cloudformation; rm -rf "/var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/" > /dev/null 2>&1'"'"' && sleep 0' 
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "cloudformation"}, "module_stderr": "/bin/sh: /usr/bin/sudo: Permission denied\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false} 

Это задача создания/обновления:

--- 
- name: create/update stack 
    cloudformation: 
    stack_name: my-stack 
    state: present 
    template: templates/stack.yml 
    template_format: yaml 
    template_parameters: 
     VpcId: "{{ vpc_id }}" 
     SubnetId: "{{ subnet_id }}" 
     KeyPair: "{{ ec2_keypair }}" 
     DbUsername: "{{ db_username }}" 
     DbPassword: "{{ db_password }}" 
     InstanceCount: "{{ instance_count | default(1) }}" 
    tags: 
    Environment: test 
    register: cf_stack 

- debug: msg={{ cf_stack }} 
    when: debug is defined 

пьес, которые анзибль Tower выполняет это site.yml файл:

--- 
- name: Deployment Playbook 
    hosts: localhost 
    connection: local 
    gather_facts: no 
    environment: 
    AWS_DEFAULT_REGION: "{{ lookup('env', 'AWS_DEFAULT_REGION') | default('us-west-2', true) }}" 
    tasks: 
    - include: tasks/create_stack.yml 
    - include: tasks/deploy_app.yml 

Это то, что моя папка Playbook структура выглядит например:

/deploy 
    /group_vars 
     all 
    /library 
     aws_ecs_service.py 
     aws_ecs_task.py 
     aws_ecs_taskdefinition.py 
    /tasks 
     stack.yml 
    /templates 
     site.yml 

Я все основываюсь на многоракурсном курсе Джастина Менги «Непрерывная доставка с использованием Docker и Ansible», но он использует Jenkins, а не Ansible Tower, что, вероятно, является причиной отключения. В любом случае, надеюсь, что информации достаточно, дайте мне знать, если я также должен предоставить файл stack.yml. Файлы под каталогом библиотеки - это настраиваемые модули Menga из его видеокурса.

Спасибо за чтение всего этого и за любую потенциальную помощь! Это ссылка на его развернутый репозиторий для воспроизведения, который я тщательно смоделировал после, https://github.com/jmenga/todobackend-deploy. Вещи, которые я вынул, - это материал DB RDS.

+1

Вы используете Ansible с '--become' или' -b' (или старыми '--sudo' или' -s')? Похоже, он пытается повысить привилегии и провалиться. Эта задача не должна вообще подниматься (и на самом деле может возникнуть проблема, если ваши учетные данные AWS env vars находятся в вашем профиле пользователя, а не в корневом каталоге) – ydaetskcoR

+0

@ydaetskcoR, если вы сделаете это ответом, а не комментарием, Примите это как ответ. Проблема заключалась в том, что я включил «Включить эвальвацию привилегий» в шаблоне задания. Спасибо! – Justin

ответ

1

Если вы посмотрите на двух последних строках сообщения об ошибке можно увидеть, что она пытается нагнетать привилегии, но провал:

<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-coqlkeqywlqhagfixtfpfotjgknremaw; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 AWS_DEFAULT_REGION=us-west-2 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/cloudformation; rm -rf "/var/lib/awx/.ansible/tmp/ansible-tmp-1470427494.79-207756006727790/" > /dev/null 2>&1'"'"' && sleep 0' 
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "cloudformation"}, "module_stderr": "/bin/sh: /usr/bin/sudo: Permission denied\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false} 

Поскольку это локальная задача она пытается перейти в корневой каталог пользователь в поле, в котором работает Ansible Tower, и пользователь, предположительно (и не зря), не имеет привилегий для этого.

С обычным Ansible вы можете избежать этого, не указав в командной строкеили -b флажками или указав become: false в определении задачи/воспроизведения.

Как вы отметили в комментариях, с Ansible Tower это случай отказа от опции «Включить привилегию привилегии» в шаблоне задания.