关于ansible:ANSIBLE_ROLES_PATH无法假定在bash脚本中获得正确的角色

ANSIBLE_ROLES_PATH cannot assume to get correct role in bash script

来自Ansible:我可以从命令行执行角色吗? -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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运行时,它正在工作。

下面是错误消息

1
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"}


基于"msg":"Destination /tmp/install-amazon2-td-agent4.sh is not writable",我想这是因为site.yml包含become: yes语句,该语句使所有任务都以root的身份运行。"匿名"剧本不包含become:声明,因此需要一个脚本来运行ansible-playbook --become或向其中添加become: yes,以及

1
2
3
4
5
6
7
ANSIBLE_ROLES_PATH="$(pwd)/roles" ansible-playbook"$@" /dev/stdin <<END
---
- hosts: $HOST_PATTERN
  become: yes
  roles:
    - $ROLE
END