有没有办法不通过pip安装而将github3.py作为Ansible Playbook库或模块包括在内?

有没有办法不通过pip安装而将github3.py作为Ansible Playbook库或模块包括在内?,ansible,github3.py,Ansible,Github3.py,在执行生产部署时,我的playbook需要能够支持向github存储库添加标记。其目的是通过Ansible内置的github_发布模块自动生成发布标签,作为Ansible服务器上的本地操作。关于该模块的文档清楚明了地表明,该模块需要github3.py Python模块 我现在遇到的问题是,我们的“CICD运营商”不相信github3.py模块需要安装在Ansible服务器上。我们相信“github3.py”可以放在/library目录中,并且无论它运行在哪台服务器上,该模块都是可用的。基于我对

在执行生产部署时,我的playbook需要能够支持向github存储库添加标记。其目的是通过Ansible内置的github_发布模块自动生成发布标签,作为Ansible服务器上的本地操作。关于该模块的文档清楚明了地表明,该模块需要github3.py Python模块

我现在遇到的问题是,我们的“CICD运营商”不相信github3.py模块需要安装在Ansible服务器上。我们相信“github3.py”可以放在/library目录中,并且无论它运行在哪台服务器上,该模块都是可用的。基于我对Ansible剧本库的有限理解,这似乎是合乎逻辑的;然而,github3不仅仅是一个可以复制到目录中的简单Python脚本

我发现的一切都表明,这需要通过PIP安装在服务器上。这是实现这一点的唯一方法,还是我缺少一些基本的过程来获取源tar ball并将其添加为本地playbook库?我尝试将源代码提取到./library,甚至创建了指向结构中不同点的符号链接

ansible剧本2.8.2
...
...
任务[本地操作-创建标记]************************************************************************************************************************************************************************************************************
任务路径:/home/########################35
为用户建立本地连接:#####
EXEC/bin/sh-c'echo~########和&sleep 0'
EXEC/bin/sh-c'(umask 77和&mkdir-p“`echo/home/####/ansible/tmp/ansible-tmp-156801389.77-61244317218380`”和&echo-ansible-tmp-156801389.77-61244317218380=“`echo/home/#ansible/tmp/680; ansible-tmp-1551389.77&`&1723880”
使用模块文件/usr/lib/python2.7/site-packages/ansible/modules/source\u control/github\u release.py
将/home/######/.ansible/tmp/ansible-local-228190qaU7p/tmptpN1cj放入/home/####/.ansible/tmp/ansible-tmp-156801389.77-612443172183880/AnsiballZ#github
EXEC/bin/sh-c'chmod u+x/home/######/.ansible/tmp/ansible-tmp-156801389.77-61244317218380//home/####/.ansible/tmp-156801389.77-612443172183880/AnsiballZ#github u发布版&&sleep
EXEC/bin/sh-c'/usr/bin/python/home/######/.ansible/tmp/ansible-tmp-156801389.77-61244317218380/AnsiballZ#u github_release.py&sleep 0'
EXEC/bin/sh-c'rm-f-r/home/########/.ansible/tmp/ansible-tmp-156801389.77-61244317218380/>/dev/null 2>&1和&sleep 0'
完整回溯是:
回溯(最近一次呼叫最后一次):
文件“/tmp/ansible\u github\u release\u payload\u fZHzWp/\uuuuuuuu main\uuuuuuuuuuuu.py”,第134行,in
进口GITUB3
ImportError:没有名为github3的模块
致命:[localhost->localhost]:失败!=>{
“更改”:错误,
“调用”:{
“模块参数”:{
“操作”:“创建发布”,
“正文”:“测试1”,
“草稿”:错误,
“名称”:“Ansible测试”,
“密码”:“没有日志参数中指定的值”,
“预发布”:错误,
“回购”:git@repo.XXXXX.com:enterprisecommunications/web_php_cicd_testing.git“,
“标签”:“MyTag”,
“目标”:“v0.0.9rc”,
“令牌”:空,
“用户”:“XYZ”
}
},
“msg”:“未能在led#####的Python/usr/bin/Python上导入所需的Python库(github3.py>=1.0.0a3)。请阅读模块文档并安装在适当的位置”
}

您可以让playbook将必要的依赖项安装到临时虚拟机中,然后使用playbook的其余部分对该虚拟机执行:

- hosts: localhost
  connection: local
  tasks:
  - raw: |
     if [ -x /tmp/bob/bin/python ]; then exit 0; fi
     /usr/local/bin/python3 -m venv --prompt tmp /tmp/bob
     .  /tmp/bob/bin/activate
     /tmp/bob/bin/pip install --upgrade 'github3.py >= 1.0.0a3'

- hosts: localhost
  connection: local
  vars:
    ansible_python_interpreter: /tmp/bob/bin/python
  tasks:
  - github_release:
      user: ansible
      repo: ansible
      action: latest_release
(替换您自己的
主机:
连接:
;我只是使用localhost和local来测试这种方法是否有效,以及它的答案)


甚至可以在一个角色中做这样的事情,进行一些清理行动或其他什么,但我没有走那么远

谢谢你的解决方案!我会和我们的团队谈谈,但我认为他们不会喜欢playbook每天创建和破坏几十次虚拟环境的想法。好吧,“我们的CICD运营商不相信github3.py模块需要安装在Ansible服务器上”,这意味着他们也不能吃不到蛋糕;如果他们安装了请求的库,您就不需要virtualenv了。为了清楚起见,您不必拆下v-env:您可以在一个著名的地方创建它,然后将它留在那里。我想这取决于您发布版本的频率,如果需要安装pip依赖项,是否会严重影响速度
/playbook $ cat ansible.cfg
[default]
library = ./library
#github3.py = ./library/github3.py
#github3.py = ./library/github3
#github3 = ./library/github3
/playbook $ cat gitTagging.yml
---
- hosts: all
  tasks:
  - name: Local Action - Create Tag
    local_action:
      module: github_release
      user: XYZ
      password: #####
      action: create_release
      repo: git@repo.XXXXX.com:Enterprise-Communications/web_php_cicd_testing.git
      tag: MyTag
      target: v0.0.9rc
      name: Ansible Test
      body: Test 1
    run_once: true
ansible-playbook 2.8.2
...
...
TASK [Local Action - Create Tag] ************************************************************************************************************************************************************************************************************
task path: /home/#####/AppEng_Ansible_Playbook/playbook/gitTagging.yml:14
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: #####
<localhost> EXEC /bin/sh -c 'echo ~##### && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380 `" && echo ansible-tmp-1568051389.77-61244317218380="` echo /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380 `" ) && sleep 0'
Using module file /usr/lib/python2.7/site-packages/ansible/modules/source_control/github_release.py
<localhost> PUT /home/#####/.ansible/tmp/ansible-local-228190qaU7p/tmptpN1cj TO /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380/AnsiballZ_github_release.py
<localhost> EXEC /bin/sh -c 'chmod u+x /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380/ /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380/AnsiballZ_github_release.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380/AnsiballZ_github_release.py && sleep 0'
<localhost> EXEC /bin/sh -c 'rm -f -r /home/#####/.ansible/tmp/ansible-tmp-1568051389.77-61244317218380/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_github_release_payload_fZHzWp/__main__.py", line 134, in <module>
    import github3
ImportError: No module named github3

fatal: [localhost -> localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "action": "create_release",
            "body": "Test 1",
            "draft": false,
            "name": "Ansible Test",
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "prerelease": false,
            "repo": "git@repo.XXXXX.com:Enterprise-Communications/web_php_cicd_testing.git",
            "tag": "MyTag",
            "target": "v0.0.9rc",
            "token": null,
            "user": "XYZ"
        }
    },
    "msg": "Failed to import the required Python library (github3.py >= 1.0.0a3) on led####'s Python /usr/bin/python. Please read module documentation and install in the appropriate location"
}
- hosts: localhost
  connection: local
  tasks:
  - raw: |
     if [ -x /tmp/bob/bin/python ]; then exit 0; fi
     /usr/local/bin/python3 -m venv --prompt tmp /tmp/bob
     .  /tmp/bob/bin/activate
     /tmp/bob/bin/pip install --upgrade 'github3.py >= 1.0.0a3'

- hosts: localhost
  connection: local
  vars:
    ansible_python_interpreter: /tmp/bob/bin/python
  tasks:
  - github_release:
      user: ansible
      repo: ansible
      action: latest_release