Ansible 是基于python开发的,对于客户端的要求是需要有SSH和Python(如果python版本过低则 需要安装python-simplejson module)。
配置
定义配置⽂件,配置⽂文件可以从多个地⽅方加载,其优先级顺序为:
- ANSIBLE_CONFIG (环境变量量) - ansible.cfg (当前⽬目录) - .ansible.cfg (home⽬目录) - /etc/ansible/ansible.cfg
|
参考: http://docs.ansible.com/ansible/intro_configuration.html
ansible命令
ansible 执⾏行行简单的临时命令 (ad-hoc命令)
ansible-playbook 执⾏行行playbook,playbook是yaml⽂文件
ansible-doc 查询ansible module ⽂文档
ad-hoc命令

参数: -i 指定hosts⽂文件的位置,hosts是yaml⽂文件,all表示hosts⽂文件中的所有的组 -m 指定ansible的module,这⾥里里的command表示ansible的command模块,还有很多其他的模块例例如shell -a 指定args参数 -u 指定⽤用户(因为这⾥里里是基于SSH认证的)
|
ansible-playbook

执行结果如下:

# test.yml 文件中 hosts: 指定设备组 user: 指定ssh⽤用户 tasks: 关键词指明执⾏行行动作 name: 给动作命名 yum: ansible指定模块
|
role
使⽤用roles可以更更好的组织框架,如下:
. ├── roles │ ├── copy │ │ └── tasks │ │ └── main.yml │ └── dmcrypt │ └── tasks │ └── main.yml └── site.yml
5 directories, 3 files
site.yml⽂件是⼊口 tasks下⽂件名必须为main.yml
|
role下有很多结构,ansible会⾃自动按照⽂文件结构进⾏行行加载解析。具体⽬目录结构如下:
. ├── defaults ├── files ├── handlers ├── meta ├── tasks ├── templates └── vars
|

python调用ansible模块
ansible.runner模块
import ansible.runner
r = ansible.runner.Runner( host_list="/etc/ansible/hosts", module_name="command", module_args="ls", forks=10, pattern="cmdb" )
res = r.run() print res
|
ansible.playbook模块
import ansible.playbook from ansible import callbacks from ansible import utils import json
example_host = ansible.inventory.host.Host(name='10.204.186.92', port=22) example_group = ansible.inventory.group.Group(name='simple_group_name') example_group.add_host(example_host) example_inventory = ansible.inventory.Inventory() example_inventory.add_group(example_group)
stats = callbacks.AggregateStats() playbook_cb = = callbacks.PlaybookCallbacks(verbose=1) runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=1) vars = {'ID': 39}
pb = ansible.playbook.PlayBook( playbook='playbook.yml', stats=stats, callbacks=playbook_cb, runner_callbacks=runner_cb, inventory=example_inventory, subset='simple_group_name', extra_vars=vars ) res = pb.run()
|
具体可以查看ansible的源码
yaml模块
import yaml
f = open('C:/Users/sks/Desktop/project/test/1.yml', 'r') str_1 = f.read() str_2 = yaml.load(str_1) f.close() str_3 = yaml.dump(str_2) f = open('C:/Users/sks/Desktop/project/test/2.yml', 'w') f.write(str_3) f.close()
|