ansible-runner的用法

虽然ansible是Python项目,但在Python里调用ansible并没有想象中那么简单,很繁杂。ansible-runner是个不错的项目,提供了调用ansible的快捷方式。但文档异常缺乏,下面举两个例子,分别是调用module和调用ansible-playbook。

调用module非常简单,比如ansible all -m shell -a 'cat /proc/cpuinfo | grep processor | wc -l'直接写成

r = ansible_runner.run(inventory=inventory, host_pattern="default", module='shell', module_args="cat /proc/cpuinfo | grep processor | wc -l")

inventory就是个字符串,可以使用ini格式,比如:

"""[default] 
host_name ansible_host=1.2.3.4 ansible_port=22 ansible_user=root ansible_password=123456"""

inventory也可以通过跳板机,注意要安装sshpass

"""[default]
host_name ansible_host={ip} ansible_port={port} ansible_user={user} ansible_password={passwd} ansible_ssh_common_args='-o ProxyCommand="sshpass -p {jump_server_passwd} ssh -W %h:%p  {jump_server_user}@{jump_server_ip} -p {jump_server_port} """

调用ansible-playbook

r = ansible_runner.run(
                private_data_dir=tmpdir,
                inventory=inventory,
                playbook=playbook_path,
                host_pattern="default",
                # quiet=True,
                extravars={"timeout": 300, 
                           "lock_timeout": 120,
                           "service": 'test'
                           },
                envvars={"ANSIBLE_HOST_KEY_CHECKING": False}
            )

private_data_dir指向一个临时目录,可以用tempfile.TemporaryDirectory。

playbook_path是ansible-playbook的文件路径。host_pattern跟inventory保持一致为’default’即可。

quiet设为True可以屏蔽详细的日志信息。

extravars用来指定ansible-playbook内部的变量。

envvars就是附加的环境变量。

这两个例子已经覆盖了大部分使用场景,更详细的参数比如ssh private key登录可以看官方文档