当前位置: 首页 > 面试题库 >

使用Python API运行Ansible-Playbook

狄宏大
2023-03-14
问题内容

如何使用python脚本运行剧本?在python中使用ansible模块等效于以下内容:

ansible -i hosts dbservers -m setup
ansible-playbook -i hosts -vvvv -k site.yml

我在http://docs.ansible.com/developing_api.html中查看了它们的文档,但是它们的示例非常有限。


问题答案:

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

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

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

import ansible.runner

runner = 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 PlayBook
pb = PlayBook(playbook='/path/to/book.yml, --other initializers--)
pb.run()

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

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



 类似资料:
  • 我在http://docs.ansible.com/development_api.html中查看了他们的文档,但它们的示例非常有限。

  • 我试图使用提供的ssh密钥在远程服务器上运行我的Anable剧本。 我已将以下配置添加到我的清单文件: 我在我的剧本中引用了以下内容: 我使用以下命令运行脚本: 我得到的错误如下: 致命:[server1]:无法访问= 我的在我的库存文件中是错误的还是我称之为错误的?帮助会很好

  • 问题内容: 我要完成的工作是在已经使用Ansible在Digital Ocean Ubuntu / Docker Droplet上创建的Docker容器内运行命令。 似乎找不到任何东西,或者我主要是缺少一些东西。这是我在剧本中完成的任务。我对Ansible非常陌生,因此任何建议或智慧都将不胜感激。 问题答案: 您应该能够使用以下命令执行脚本(包含命令序列): 应该可以通过Ansible流程访问。

  • 有人能给我提示如何处理这种情况吗?我使用的是Ansible2.0,数据库只能从特定的远程主机访问。 谢谢

  • 问题内容: 如果一切正常,或者某些任务进行了某些更改,则ansible-playbook运行将返回0。 我正在寻找一种方法,以便在上次运行期间发生更改时在命令行中获取信息。 有人知道这种方法吗? 背景是我想通过Jenkins管道监视我的服务器,并在发生更改时得到警报。 谢谢你的帮助。 问题答案: 使用如Ansible标准输出回调插件,这样Ansible将JSON格式返回机器可分析输出。 例如: 将

  • 如果我的问题不清楚,请让我知道。PG