ansible作为python模块库使用的方法


本文摘自php中文网,作者不言,侵删。

ansible是一个python package,是个完全的unpack and play软件,对客户端唯一的要求是有ssh有python,并且装了python-simplejson包,部署上简单到发指。下面这篇文章就给大家主要介绍了ansible作为python模块库使用的方法实例,需要的朋友可以参考借鉴。

前言

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

Asible是运维工具中算是非常好的利器,我个人比较喜欢,可以根据需求灵活配置yml文件来实现不同的业务需求,因为不需要安装客户端,上手还是非常容易的,在某些情况下你可能需要将ansible作为python的一个库组件写入到自己的脚本中,今天的脚本脚本就将展示下ansible如何跟python脚本结合,也就是如何在python脚本中使用ansible,我们逐步展开。

先看第一个例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#!/usr/bin/python

import ansible.runner

import ansible.playbook

import ansible.inventory

from ansible import callbacks

from ansible import utils

import json

  

# the fastest way to set up the inventory

  

# hosts list

hosts = ["10.11.12.66"]

# set up the inventory, if no group is defined then 'all' group is used by default

example_inventory = ansible.inventory.Inventory(hosts)

  

pm = ansible.runner.Runner(

 module_name = 'command',

 module_args = 'uname -a',

 timeout = 5,

 inventory = example_inventory,

 subset = 'all' # name of the hosts group

 )

  

out = pm.run()

  

print json.dumps(out, sort_keys=True, indent=4, separators=(',', ': '))

这个例子展示我们如何在python脚本中运行如何通过ansible运行系统命令,我们接下来看第二个例子,跟我们的yml文件对接。

简单的yml文件内容如下:

1

2

3

4

- hosts: sample_group_name

 tasks:

 - name: just an uname

 command: uname -a

调用playbook的python脚本如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

#!/usr/bin/python

import ansible.runner

import ansible.playbook

import ansible.inventory

from ansible import callbacks

from ansible import utils

import json

  

### setting up the inventory

  

## first of all, set up a host (or more)

example_host = ansible.inventory.host.Host(

 name = '10.11.12.66',

 port = 22

 )

# with its variables to modify the playbook

example_host.set_variable( 'var', 'foo')

  

## secondly set up the group where the host(s) has to be added

example_group = ansible.inventory.group.Group(

 name = 'sample_group_name'

 )

example_group.add_host(example_host)

  

## the last step is set up the invetory itself

example_inventory = ansible.inventory.Inventory()

example_inventory.add_group(example_group)

example_inventory.subset('sample_group_name')

  

# setting callbacks

stats = callbacks.AggregateStats()

playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)

runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)

  

# creating the playbook instance to run, based on "test.yml" file

pb = ansible.playbook.PlayBook(

 playbook = "test.yml",

 stats = stats,

 callbacks = playbook_cb,

 runner_callbacks = runner_cb,

 inventory = example_inventory,

 check=True

 )

  

# running the playbook

pr = pb.run()

  

# print the summary of results for each host

print json.dumps(pr, sort_keys=True, indent=4, separators=(',', ': '))

以上就是ansible作为python模块库使用的方法的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python爬虫有什么用

Python实现字符串的kmp算法

Python装饰器定义及运用实例讲解

巧用Python实现图片转换成素描和漫画格式

Python3下载哪个版本

Python怎么读取txt文件

Python 快速使用 rest api

Python中x[::]什么意思

Python里join是什么意思

Python for循环实例来解析什么是Python循环语句?

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...