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

Ansible pip模块:名称包和umask 0022致命错误:以8为基数的int()的文本无效:';18';umask必须是八进制整数,pip,ansible,ansible-playbook,ansible-2.x,octal,Pip,Ansible,Ansible Playbook,Ansible 2.x,Octal,ansible/ansible剧本版本:2.1.2.0 我的剧本中有以下动作: - name: Install cli (as well) pip: name: "{{ mycompany_pip_pkg }}" umask: 0022 为什么即使我遵循Ansiblepip模块的文档,仍会收到以下致命错误消息: 错误: TASK [company.company-ansible : Install cli (as well)] **************** fatal:

ansible/ansible剧本版本:2.1.2.0

我的剧本中有以下动作:

- name: Install cli (as well)
  pip:
    name: "{{ mycompany_pip_pkg }}"
    umask: 0022
为什么即使我遵循Ansible
pip
模块的文档,仍会收到以下致命错误消息:

错误:

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
Docs说:

安装pip软件包之前,系统umask。这 例如,当安装在具有非常高性能的系统上时 默认情况下限制umask(例如0077),并且您希望pip安装 所有用户都要使用的包。请注意,这需要 您需要以八进制指定所需的umask模式,前导为0(例如。, 0077)

显示以下代码:

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

key=value格式的模块,即使是自由格式(YAML样式)仍接受参数,但不建议使用

模块也可以采用自由形式的参数,而不是键值或json 但不建议这样做


用引号将umask包装起来对我很有用。 pip: 姓名:uwsgi 国家:现在 乌马斯克:“0022”

# ls -lah /bin/uwsgi -rwxr-xr-x. 1 root root 1.3M Jan 21 12:12 /bin/uwsgi
只需将umask值括在引号中

不起作用:

  pip:
    name:
      - pika
      - argparse
    umask: 0022
是否有效:

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

“文件”模块也会出现同样的问题,直到用修复。正如其他人所指出的,使用key=value语法也能起作用。

好的,我找到了解决方案,但是,为什么第一部分的语法不起作用呢!我同意。想知道为什么他们会在文档中提到同样的内容,请参阅他们的最后一个示例。如果我使用自由形式的YAML语法而不使用
umask:0022或umask:。。。属性,它正在工作。我在其他模块的剧本中使用了自由形式的YAML语法,它们都可以工作。我认为需要为
umask
属性修复
pip.py
。我看到使用自由形式YAML的优点是更好的缩进/用户阅读友好的语法-与将所有属性/变量放在一行相比。我更新了我的帖子,现在我的帖子提出了一个有效的问题:)(我在做了一些调查后发现)希望你能提供一些线索。我不认为“自由形式”这个词在这里应用于YAML样式。你对此有什么参考资料吗?包括不推荐YAML风格的明确声明?我认为自由风格指的是,例如,
local\u action
模块,您可以将模块指定为键值或直接指定为
local\u action
的值。是的,我也这样做了:
pip:name=“{{pip\u pkg}}”umask=“0022”
但在同一行,而不是自由形式的yaml形式