【问题标题】:Ansible: ERROR: Invalid requirement: \"u'woth': FalseAnsible:错误:无效的要求:\“u'woth':假
【发布时间】:2019-12-02 15:39:17
【问题描述】:

在这个任务中,我应该访问一个文件夹 ~/Libs/lib 并安装找到的 pip 包的最新版本。

我通过 ansible 在本地安装 pip 包时出错。

注意:包在 ansible 外面安装得很好

我的任务

- name: Get latest lib version
  find:
    paths: "{{ lib_path }}"
    patterns: '*.whl'
  register: lib_wheels_file



- name: Get latest file
  set_fact:
    latest_file: "file:///{{ lib_wheels_file.files | sort(reverse=true) | first }}"
  become: yes


- name: Install lib
  pip: 
   name: '{{ latest_file }}'
  become: yes

 lib_path is found under ~/Libs

我得到的错误:

错误:无效要求:\"u'woth': False\"\n"

使用 -vvv 选项我得到了这个输出:

fatal: [localhost]: FAILED! => {
    "changed": false, 
    "cmd": [
        "/usr/local/bin/pip2", 
        "install", 
        "file:///{u'uid': 1000", 
        " u'woth': False", 
        " u'mtime': 1571862393.0", 
        " u'inode': 11798916", 
        " u'isgid': False", 
        " u'size': 175829", 
        " u'roth': True", 
        " u'isuid': False", 
        " u'isreg': True", 
        " u'pw_name': u'tb62'", 
        " u'gid': 1000", 
        " u'ischr': False", 
        " u'wusr': True", 
        " u'xoth': False", 
        " u'islnk': False", 
        " u'nlink': 1", 
        " u'issock': False", 
        " u'rgrp': True", 
        " u'gr_name': u'tb62'", 
        " u'path': u'/home/tb62/Libs/lib/lib-1.4.0-py2-none-any.whl'", 
        " u'xusr': False", 
        " u'atime': 1575281633.538627", 
        " u'isdir': False", 
        " u'ctime': 1574842250.317574", 
        " u'wgrp': False", 
        " u'xgrp': False", 
        " u'dev': 2065", 
        " u'isblk': False", 
        " u'isfifo': False", 
        " u'mode': u'0644'", 
        " u'rusr': True}\""
    ], 
    "invocation": {
        "module_args": {
            "chdir": null, 
            "editable": false, 
            "executable": null, 
            "extra_args": null, 
            "name": [
                "file:///{u'uid': 1000", 
                " u'woth': False", 
                " u'mtime': 1571862393.0", 
                " u'inode': 11798916", 
                " u'isgid': False", 
                " u'size': 175829", 
                " u'roth': True", 
                " u'isuid': False", 
                " u'isreg': True", 
                " u'pw_name': u'tb62'", 
                " u'gid': 1000", 
                " u'ischr': False", 
                " u'wusr': True", 
                " u'xoth': False", 
                " u'islnk': False", 
                " u'nlink': 1", 
                " u'issock': False", 
                " u'rgrp': True", 
                " u'gr_name': u'tb62'", 
                " u'path': u'/home/tb62/Libs/lib/lib-1.4.0-py2-none-any.whl'", 
                " u'xusr': False", 
                " u'atime': 1575281633.538627", 
                " u'isdir': False", 
                " u'ctime': 1574842250.317574", 
                " u'wgrp': False", 
                " u'xgrp': False", 
                " u'dev': 2065", 
                " u'isblk': False", 
                " u'isfifo': False", 
                " u'mode': u'0644'", 
                " u'rusr': True}\""
            ], 
            "requirements": null, 
            "state": "present", 
            "umask": null, 
            "version": null, 
            "virtualenv": null, 
            "virtualenv_command": "virtualenv", 
            "virtualenv_python": null, 
            "virtualenv_site_packages": false
        }
    }, 

【问题讨论】:

  • lib_wheels_file.files 不是字符串(文件名)列表,而是a list of dictionaries,您必须从中提取path 键。
  • 好吧,我只需要从完整路径中提取文件名,请问有什么建议吗?
  • 试试{{ lib_wheels_file.files | sort(reverse=true) | first | attr('path') }}{{ lib_wheels_file.files | attr('path') | sort(reverse=true) | first }}
  • 关于这个解决方案{{ lib_wheels_file.files | attr('path') | sort(reverse=true) | first | attr('path') }},我得到了错误是:'list object' has no attribute 'path
  • @phd :我找到了解决方案,我将在新评论中分享。你的 cmets 帮了我很多

标签: python pip ansible devops


【解决方案1】:

我找到的解决方案是使用 map() 函数映射属性。

 - name: Get latest file   set_fact:
     latest_file: "{{ lib_wheels_file.files | map(attribute='path') | sort(reverse=true) | first }}"   become: yes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2018-08-29
    • 2019-05-10
    相关资源
    最近更新 更多