ANSIBLE_ROLES_PATH не может предполагать, что получит правильную роль в сценарии bash

Из Ansible: могу ли я выполнять роль из командной строки? -

HOST_PATTERN=$1
shift
ROLE=$1
shift

echo "To apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..."

export ANSIBLE_ROLES_PATH="$(pwd)/roles"
export ANSIBLE_RETRY_FILES_ENABLED="False"

ANSIBLE_ROLES_PATH="$(pwd)/roles" ansible-playbook "$@" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
  roles:
    - $ROLE
END

Проблема в том, что когда я работаю с ./apply.sh all dev-role -i dev-inventory, он не может взять на себя правильную роль. Когда я бегаю с ansible-playbook -i dev-inventory site.yml --tags dev-role, он работает.

Ниже сообщение об ошибке

fatal: [my-api]: FAILED! => {"changed": false, "checksum_dest": null, "checksum_src": "d3a0ae8f3b45a0a7906d1be7027302a8b5ee07a0", "dest": "/tmp/install-amazon2-td-agent4.sh", "elapsed": 0, "gid": 0, "group": "root", "mode": "0644", "msg": "Destination /tmp/install-amazon2-td-agent4.sh is not writable", "owner": "root", "size": 838, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1600788856.749975-487-237398580935180/tmpobyegc", "state": "file", "uid": 0, "url": "https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh"}

person PPShein    schedule 22.09.2020    source источник
comment
Вы получите дополнительную помощь, если определите, что не может принимать на себя правильная роль в вашем конкретном случае; в вашем вопросе ровно ноль сообщений об ошибках или строк журнала   -  person mdaniel    schedule 22.09.2020
comment
@mdaniel Я добавил сообщение об ошибке.   -  person PPShein    schedule 23.09.2020
comment
@PaulHodges, это моя опечатка. Я исправил.   -  person PPShein    schedule 23.09.2020
comment
Ошибка выглядит Destination /tmp/install-amazon2-td-agent4.sh is not writable. Это нужно проверить в первую очередь.   -  person larsks    schedule 23.09.2020
comment
@larsks, когда я запускаю ansible-playbook -i dev-inventory site.yml --tags dev-role, он работает.   -  person PPShein    schedule 23.09.2020
comment
Я предполагаю, что site.yml содержит become: yes, тогда как ваша /dev/stdin версия не содержит   -  person mdaniel    schedule 23.09.2020
comment
@mdaniel идеальный ... !!! Вы можете опубликовать это в качестве ответа?   -  person PPShein    schedule 23.09.2020


Ответы (1)


Основываясь на "msg": "Destination /tmp/install-amazon2-td-agent4.sh is not writable", я бы предположил, что это потому, что site.yml содержит оператор become: yes, который заставляет все задачи запускаться как root. Анонимный сценарий не содержит декларации become:, и поэтому потребуется либо запустить ansible-playbook --become, либо добавить к нему become: yes, а также

ANSIBLE_ROLES_PATH="$(pwd)/roles" ansible-playbook "$@" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
  become: yes
  roles:
    - $ROLE
END
person mdaniel    schedule 23.09.2020
comment
Вы также можете помочь мне ответить на мой другой вопрос? stackoverflow.com/questions/64021309 / - person PPShein; 23.09.2020