带有嵌套 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
模块可以为你做这件事而不需要脚本。
我正在尝试执行一个 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
模块可以为你做这件事而不需要脚本。