Развертывание стека облачной информации в AWS с использованием Ansible Tower
Я новичок в Ansible, Ansible Tower и AWS Cloud Formation и пытаюсь заставить Ansible Tower развернуть контейнерную службу EC2 с использованием шаблона Cloud Formation. Я пытаюсь запустить задание развертывания и сталкиваюсь с этой ошибкой ниже.
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
Книга воспроизведения, которую выполняет Ansible 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. Файлы в каталоге библиотеки - это пользовательские модули Менги из его видеокурса.
Спасибо за чтение всего этого и за любую потенциальную помощь! Это ссылка на его репозиторий для развертывания playbook, который я тщательно смоделировал после всего, https://github.com/jmenga/todobackend-deploy. Вещи, которые я вынул, - это материал DB RDS.
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}
Поскольку это локальная задача, она пытается переключиться на пользователя root в окне, на котором запущена Ansible Tower, и пользователь, предположительно (и по уважительной причине), не имеет прав для этого.
С обычным Ansible вы можете избежать этого, не указав --become
или же -b
флаги в командной строке или указав become: false
в определении задачи / игры.
Как вы указали в комментариях, в случае с Ansible Tower снимите флажок "Включить повышение привилегий" в шаблоне задания.