弃用声明:此帖子自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解析器将剧本转换为变量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)