由于aws_s3
模块将所有存储桶键放平,因此我尝试使用aws cli运行以下任务。但是,我不断收到aws: not found
错误。
aws cli
已正确安装,因为从主机运行完全相同的命令可以正常工作。
我的任务:
- name: Try list
shell: aws s3 ls "{{ s3_bucket }}"
完整错误:
fatal: [cassandra-node-1]: FAILED! => {
"changed": true,
"cmd": "aws s3 ls \"cassandra-snapshotter-test2\"",
"delta": "0:00:00.002900",
"end": "2019-05-12 13:48:25.705324",
"invocation": {
"module_args": {
"_raw_params": "aws s3 ls \"cassandra-snapshotter-test2\"",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"msg": "non-zero return code",
"rc": 127,
"start": "2019-05-12 13:48:25.702424",
"stderr": "/bin/sh: 1: aws: not found",
"stderr_lines": [
"/bin/sh: 1: aws: not found"
],
"stdout": "",
"stdout_lines": []
}
为什么我不能从Ansible任务中运行aws cli?
答案 0 :(得分:3)
此主机上的sh解释器无法使用AWS二进制文件。
从Shell会话运行
$ which aws
查找awscli的位置。
确保此目录包含在PATH环境变量中
$ echo $PATH
如果不是,则可以配置服务器以在打开外壳程序时将其包括在内
# bash
$ echo 'export PATH=$PATH:/path/to/awscli/dir' >> ~/.bash_profile
# KSH/sh
$ echo 'export PATH=$PATH:/path/to/awscli/dir' >> ~/.profile
或者,您可以使用ansible environment属性为特定的播放,任务等在内存中设置环境变量。
environment:
PATH: "{{ lookup('env', 'PATH) }}:/path/to/awscli/dir"
最后,为了简便起见,您可以使用[defaults]部分下的executable键来修改ansible.cfg中shell
模块使用的shell ansible。这将使您可以将其从sh解释器更改为bash之类的其他东西。