ansible / ansible-playbook version:2.1.2.0
我的剧本中有以下行动:
- name: Install cli (as well)
pip:
name: "{{ mycompany_pip_pkg }}"
umask: 0022
为什么即使我遵循Ansible pip
模块的文档,我也会收到以下致命错误消息:http://docs.ansible.com/ansible/pip_module.html
错误:
TASK [company.company-ansible : Install cli (as well)] ****************
fatal: [localhost]: FAILED! => {"changed": false, "details": "invalid literal for int() with base 8: '18'", "failed": true, "msg": "umask must be an octal integer"}
Ansible pip
文档说:
在安装pip包之前应用系统 umask 。这个 例如,在具有非常的系统上安装时很有用 默认情况下限制性umask(例如,0077)并且您想要pip install 所有用户都使用的包。请注意,这需要 您可以在八进制中指定所需的umask模式,前导为0(例如, 0077)。
http://programtalk.com/vs2/python/749/ansible-modules-core/packaging/language/pip.py/显示以下代码:
if umask and not isinstance(umask, int):
try:
umask = int(umask, 8)
except Exception:
module.fail_json(msg="umask must be an octal integer",
details=to_native(sys.exc_info()[1]))
PS:以下语法有效!但为什么上面的那个不起作用?
- name: Install cli (as well)
pip: name="{{ mycompany_pip_pkg }}" umask=0022
更新
问:
1)为什么在Ansible pip
模块中,当name
属性的值包含无效的包名时,则此模块的umask
属性值失败(在我的情况下这是正确的)?
答案 0 :(得分:2)
只需将 umask 值括在引号中即可。
不起作用:
pip:
name:
- pika
- argparse
umask: 0022
工作:
pip:
name:
- pika
- argparse
umask: "0022"
与“{3}}修复之前,”文件“模块出现了同样的问题。正如其他人指出的那样,使用 key = value 语法也可以。
答案 1 :(得分:1)
Ansible期望key=value
格式的模块参数,即使自由格式(YAML样式)参数仍被接受但不推荐。
模块也可以采用自由格式参数而不是键值或json 但不建议这样做。
答案 2 :(得分:0)
用引号括起umask对我有用。 PIP: 名称:uwsgi 州:现在 umask:' 0022'
# ls -lah /bin/uwsgi -rwxr-xr-x. 1 root root 1.3M Jan 21 12:12 /bin/uwsgi