Ansible pip模块:name包和umask 0022致命错误:int()的基数为8的文字无效:'18'umask必须是八进制整数

时间:2016-12-27 22:32:20

标签: pip ansible ansible-playbook ansible-2.x octal

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属性值失败(在我的情况下这是正确的)?

3 个答案:

答案 0 :(得分:2)

只需将 umask 值括在引号中即可。

不起作用:

  pip:
    name:
      - pika
      - argparse
    umask: 0022

工作:

  pip:
    name:
      - pika
      - argparse
    umask: "0022"

与“{3}}修复之前,”文件“模块出现了同样的问题。正如其他人指出的那样,使用 key = value 语法也可以。

答案 1 :(得分:1)

Ansible期望key=value格式的模块参数,即使自由格式(YAML样式)参数仍被接受但不推荐。

来自Conventions/Recommendations

  

模块也可以采用自由格式参数而不是键值或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