Ansible 開發(fā)API 之【使用api運行playbook任務(wù)】

環(huán)境


本文使用的是ansible api 2.0
ansible 2.3.0.0
os Centos 6.7 X64
python 2.6.6

本文介紹 api 運行一個playbook項目

playbook文件


~]# cat /etc/ansible/test.yml
---

- hosts: node1
  gather_facts: no

  tasks:
    - command: echo 123
      notify: test1
  handlers:
    - name: test1
      debug: msg="456"

主機清單


~]# cat /etc/ansible/hosts
[node1]
192.168.77.129 ansible_ssh_pass=123456

API


~]# cat test_playbook.py 
#!/bin/env python
#! coding: utf-8

import os
import sys
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars import VariableManager
from ansible.inventory import Inventory
from ansible.executor.playbook_executor import PlaybookExecutor

# 在指定文件時,不能使用列表指定多個。
host_path = '/etc/ansible/hosts'
if not os.path.exists(host_path):
  print '[INFO] The [%s] inventory does not exist' % host_path
  sys.exit()

loader = DataLoader()
variable_manager = VariableManager()
inventory = Inventory(loader=loader, variable_manager=variable_manager,host_list=host_path)
variable_manager.set_inventory(inventory)
passwords=None

# 初始化需要的對象
Options = namedtuple('Options',
                     ['connection',
                      'remote_user',
                      'ask_sudo_pass',
                      'verbosity',
                      'ack_pass', 
                      'module_path', 
                      'forks', 
                      'become', 
                      'become_method', 
                      'become_user', 
                      'check',
                      'listhosts', 
                      'listtasks', 
                      'listtags',
                      'syntax',
                      'sudo_user',
                      'sudo'])
# 初始化需要的對象
options = Options(connection='smart', 
                       remote_user='root',
                       ack_pass=None,
                       sudo_user='root',
                       forks=5,
                       sudo='yes',
                       ask_sudo_pass=False,
                       verbosity=5,
                       module_path=None,  
                       become=True, 
                       become_method='sudo', 
                       become_user='root', 
                       check=None,
                       listhosts=None,
                       listtasks=None, 
                       listtags=None, 
                       syntax=None)

# 多個yaml文件則以列表形式
playbook_path=['/etc/ansible/test.yml']
for i in playbook_path:
  if not os.path.exists(i):
    print '[INFO] The [%s] playbook does not exist' % i
    sys.exit()


playbook = PlaybookExecutor(playbooks=playbook_path,inventory=inventory,
              variable_manager=variable_manager,
              loader=loader,options=options,passwords=passwords)

# 執(zhí)行playbook
result = playbook.run()

# 返回執(zhí)行結(jié)果
print '執(zhí)行結(jié)果: %s' % result

playbook_executor 是不能自定義 callback的,可通過環(huán)境變量或者ansible.cfg中配置callback。所以輸出是標(biāo)準(zhǔn)輸出,result 是返回碼,0表示全部運行成功

輸出


~]# python test_playbook.py

PLAY [node1] ***********************************************************************************************************

TASK [command] *********************************************************************************************************
changed: [192.168.77.129]

RUNNING HANDLER [test1] ************************************************************************************************
ok: [192.168.77.129] => {
    "changed": false, 
    "msg": "456"
}

PLAY RECAP *************************************************************************************************************
192.168.77.129                  : ok=2    changed=1    unreachable=0    failed=0   

執(zhí)行結(jié)果: 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容