如何为Ansible模块打包共享代码

2024-05-19 10:10:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我不得不编写一些共享代码的Ansible模块,所以我试着变得聪明,并用setuptools打包它们。你知道吗

Here is the setup.py

Here is one of the modules

安装的可执行文件使用pkg_resources.load\入口\点如果我从CLI手动运行它,我可以像这样为它提供JSON。你知道吗

$ siptrack_list.py|jq
{"ANSIBLE_MODULE_ARGS": {"pattern": "vmlnx-web0"}}
{
  "invocation": {
    "module_args": {
      "pattern": "vmlnx-web0",
      "search_all": false,
      "max_results": 10,
      "regexp": false
    }
  },
  "output": [
    {
      "oid": "1238720",
      "name": "vmlnx-web02"
    },
    {
      "oid": "1238562",
      "name": "vmlnx-web01"
    },
    {
      "oid": "1771701",
      "name": "vmlnx-web03"
    }
  ],
  "changed": false,
  "returned": [
    {
      "oid": "1238720",
      "name": "vmlnx-web02"
    },
    {
      "oid": "1238562",
      "name": "vmlnx-web01"
    },
    {
      "oid": "1771701",
      "name": "vmlnx-web03"
    }
  ]
}

而且有效!我得到一个JSON格式的结果。你知道吗

但是如果我使用ansible或ansible playbook可执行文件运行它,我会得到这个错误。你知道吗

fatal: [127.0.0.1]: FAILED! => {"changed": false, "msg": "Error: Module unable to decode valid JSON on stdin.  Unable to figure out what parameters were passed"}

这是我用的剧本。你知道吗

---

- hosts: 127.0.0.1
  connection: local
  gather_facts: False

  tasks:
    - name: List siptrack devices
      siptrack_list:
        pattern: vmlnx-web02
        max_results: 1
      register: results

    - debug:
        msg: "{{ results }}"

所以我很想找出我在这里遗漏了什么。因为我喜欢使用安装工具。其想法是将可执行文件符号链接到一个Ansible库目录中。或者有人对如何在Ansible模块之间共享代码有其他想法吗?你知道吗

如果使用ansible并调用模块,也会出错。你知道吗

$ ansible -m siptrack_list -a 'pattern=vmlnx-we' -c local 127.0.0.1
127.0.0.1 | FAILED! => {
    "changed": false, 
    "msg": "Error: Module unable to decode valid JSON on stdin.  Unable to figure out what parameters were passed"
}

Tags: 模块tonamejsonfalse可执行文件ansibleresults
2条回答

尽管标题让人困惑,我还是想把这个问题的真实答案贴出来。我从来不能按我想要的方式使用setuptools,但我确实在文档中找到了一种将共享代码打包到ansible模块中的官方方法。你知道吗

https://docs.ansible.com/ansible/latest/dev_guide/developing_module_utilities.html

这甚至是Ansible本身提供openstack模块通用的共享代码的方式。你知道吗

我以前没用过这种方法。我们所做的是将库分组到逻辑组中,并将它们绑定到Ansible角色下。这些角色发布在内部GitHub上,并使用Galaxy引用。在角色“首次运行”后,该库将提供给整个剧本。因此,您只需在运行任何其他任务之前包含角色,库就可以使用了。你知道吗

相关问题 更多 >

    热门问题