jenkins Ansible运行递归脚本或模块

pxy2qtax  于 2022-12-03  发布在  Jenkins
关注(0)|答案(1)|浏览(170)

在Ansible中,我可以运行一个python脚本,如果它包含同一脚本中的代码。

name: Restarting service on different nodes
  hosts: nodes
  connection: ssh
  tasks:
    - name: Restarting tomcat service
      script: main.py 1
      args:
        executable: python3

main.py导入了restart_tomcat(restart_tomcat.py与main.py位于同一个文件夹中),但它无法导入此模块,尽管它位于同一个目录中。
如何让它了解www.example.com的其他支持文件main.py存在于同一目录中。注意:尝试在远程服务器上执行时失败
编辑:在Ansible上为我们想要运行的每个示例创建custom_module会变得太复杂

erhoui1w

erhoui1w1#

我认为您应该编写一个自定义模块;注意,当你运行任何脚本时,ansible会在一个临时位置创建一个副本。2所以你在导入中提供的任何相对路径都会被弄乱。3你可以用-vvv运行剧本任务来确认这一点。
以下是设置自定义模块的示例(高级):

tree 
.
├── your_playbook.yml
├── library
│   └── your_custom_module.py # write your code logic here         
└── module_utils
    └── restart_tomcat.py     #this file contains common classes/functions

在您的模块文件(your_custom_module.py)中,可以按如下方式进行导入:

#!/usr/bin/python3
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.module_utils.basic import AnsibleModule 
from ansible.module_utils.restart_tomcat.py import *  #this line will import the classes or functions present in the other file to the custom module

您可以找到更多详细信息here和示例herethis
有关支持参考,请运行ansible-doc script命令并导航至“注解”部分。

相关问题