使用Python API运行Ansible-Playbook

使用Python API运行Ansible-Playbook,第1张

使用Python API运行Ansible-Playbook

弃用声明:此帖子自ansible 2起不起作用。API已更改。

这在“ Python
API”下的Ansible文档中进行了介绍。

例如,

ansible -i hosts dbservers -m setup
通过以下方式实现:

import ansible.runnerrunner = ansible.runner.Runner(   module_name='setup',   module_args='',   pattern='dbservers',)dbservers_get_facts = runner.run()

__init__
Runner方法中有许多未记录的参数(来自
ansible.runner
)。有太多列表内联,但我已经包括了一些在这个岗位作为猜测什么你专门找参数。

class Runner(object):    ''' core API interface to ansible '''    # see bin/ansible for how this is used...    def __init__(self,        host_list=C.DEFAULT_HOST_LIST,      # ex: /etc/ansible/hosts, legacy usage        module_path=None,        # ex: /usr/share/ansible        module_name=C.DEFAULT_MODULE_NAME,  # ex: copy        module_args=C.DEFAULT_MODULE_ARGS,  # ex: "src=/tmp/a dest=/tmp/b"        ...        pattern=C.DEFAULT_PATTERN,          # which hosts?  ex: 'all', 'acme.example.org'        remote_user=C.DEFAULT_REMOTE_USER,  # ex: 'username'        remote_pass=C.DEFAULT_REMOTE_PASS,  # ex: 'password123' or None if using key        remote_port=None,        # if SSH on different ports        private_key_file=C.DEFAULT_PRIVATE_KEY_FILE, # if not using keys/passwords        sudo_pass=C.DEFAULT_SUDO_PASS,      # ex: 'password123' or None        ...        sudo=False,   # whether to run sudo or not        sudo_user=C.DEFAULT_SUDO_USER,      # ex: 'root'        module_vars=None,        # a playbooks internals thing        play_vars=None,          #        play_file_vars=None,     #        role_vars=None,          #        role_params=None,        #        default_vars=None,       #        extra_vars=None,         # extra vars specified with he playbook(s)        is_playbook=False,       # running from playbook or not?        inventory=None,          # reference to Inventory object        ...        su=False,     # Are we running our command via su?        su_user=None, # User to su to when running command, ex: 'root'        su_pass=C.DEFAULT_SU_PASS,        vault_pass=None,        ...        ):

例如,上面指定sudo用户和pass的命令将是:

runner = ansible.runner.Runner(   module_name='setup',   module_args='',   pattern='dbservers',   remote_user='some_user'   remote_pass='some_pass_or_python_expression_that_returns_a_string')

对于剧本,请查看playbook.PlayBook,它需要一组类似的初始化程序:

class PlayBook(object):    '''    runs an ansible playbook, given as a datastructure or YAML filename.    ...    '''    # *****************************************************    def __init__(self,        playbook         = None,        host_list        = C.DEFAULT_HOST_LIST,        module_path      = None,        ....

并可以通过该

.run()
方法执行。例如:

from ansible.playbook import PlayBookpb = PlayBook(playbook='/path/to/book.yml, --other initializers--)pb.run()

ansible-playbook
文件中可以找到更可靠的用法。

据我所知,将剧本转换为Python模块会涉及更多的工作,但是上面列出的文档应该能让您了解,您可以重用Ansible内置的YAML解析器将剧本转换为变量。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5645195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存