带有嵌套 python 脚本的 Ansible 剧本

Ansible playbook with nested python scripts

我正在尝试执行一个 ansible 剧本,它使用脚本模块来 运行 自定义 python 脚本。 此自定义 python 脚本正在导入另一个 python 脚本。 在执行 playbook 时,ansible 命令在尝试导入 util 脚本时失败。我是ansible新手,请帮忙!!

helloWorld.yaml:

- hosts: all
  tasks:
  - name: Create a directory
    script: /ansible/ems/ansible-mw-tube/modules/createdirectory.py "{{arg1}}"

createdirectory.py -- 在 YAML 剧本中配置的脚本

#!/bin/python

import sys
import os
from hello import HelloWorld


class CreateDir:
        def create(self, dirName,HelloWorldContext):
                output=HelloWorld.createFolder(HelloWorldContext,dirName)
                print output
                return output
def main(dirName, HelloWorldContext):
        c = CreateDir()
        c.create(dirName, HelloWorldContext)
if __name__ == "__main__":
        HelloWorldContext = HelloWorld()
        main(sys.argv[1],HelloWorldContext)
        HelloWorldContext = HelloWorld()

hello.py -- 上面写的主脚本中导入的util脚本

#!/bin/python

import os
import sys

class HelloWorld:

         def createFolder(self, dirName):
             print dirName
             if not os.path.exists(dirName):
                os.makedirs(dirName)
                print dirName
                if os.path.exists(dirName):
                   return "sucess"
                else:
                   return "failure"

Ansible 可执行命令

ansible-playbook -v -i /ansible/ems/ansible-mw-tube/inventory/helloworld_host /ansible/ems/ansible-mw-tube/playbooks/helloWorld.yml -e "arg1=/opt/logs/helloworld"

Ansible 版本

ansible --version
[WARNING]: log file at /opt/ansible/ansible.log is not writeable and we cannot create it, aborting

ansible 2.2.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

script 模块将脚本复制到远程服务器并使用shell 命令在远程服务器上执行。它找不到 util 脚本,因为它不传输该文件 - 它不知道它需要这样做。

您有多种选择,例如使用 copy 将两个文件移动到服务器并使用 shell 执行它们。但是因为你似乎在做的是创建一个目录,file 模块可以为你做这件事而不需要脚本。