Python项目实战——Ansible自动化任务(3)(运维自动化任务项目)

1 项目介绍

具体的自动化任务执行流程是什么?逻辑是怎么实现的呢?
用户浏览器端向服务器端发起HTTP请求(GET/POST);Django作为核心框架的请求处理;API接口层: 接收客户端POST提交过来的数据,并将数据传给核心层;核心层: 业务逻辑处理+数据库交互(MySQL/Redis/Mongodb)模块层: 调用ansible模块执行操作目标机器的对象。

2. Ansible的核心类

1-1. InventoryManager类

from ansible.inventory.manager import InventoryManager
from ansible.parsing.dataloader import DataLoader
# 初始化loader类,用于读取与解析yaml和json文件
loader = DataLoader()
# 指定inventory,即hosts文件(指定文件路径)
inventory = InventoryManager(loader=loader,sources=['/etc/ansible/hosts',])
# 添加主机信息
inventory.add_host(host='172.25.254.40', port=22, group='test')
# 获取资产清单中的所有主机,返回列表数据类型
print(inventory.get_hosts())
# 获取资产清单中的所有主机组和主机信息,返回字典数据类型
print(inventory.get_groups_dict())
# 查询指定主机的主机信息
print(inventory.get_host(hostname='172.25.254.20'))
# .....inventory对象包含很多的方法,可自行探索

1-2. VariableManager类

查看变量的方法: get_vars()
设置主机变量的方法: set_host_variable()
添加扩展变量 extra_vars

# inventory指定资产管理配置对象
variable_manager = VariableManager(loader=loader, inventory=inventory)
# 获取变量
vars = variable_manager.get_vars()
print(vars)
# 查看指定主机的详细变量信息
vars = variable_manager.get_vars(host=host)
print(vars)
# 设置主机变量方法
variable_manager.set_host_variable(host=host,varname='ansible_ssh_pass',value='1
111')
vars = variable_manager.get_vars(host=host)
print(vars)
# 添加扩展变量
variable_manager._extra_vars = {'myweb':'westos.com', 'myname':'westos'}
print(variable_manager.get_vars())
# 完成的应用
varsObj = VariableManager(loader=loader, inventory=inventory)
host = inventory.get_host(hostname='172.25.254.250')
varsObj.set_host_variable(host=host, varname='ansible_ssh_pass', value='redhat')
print(varsObj.get_vars(host=host))

1-3. ad-hoc模式

# 必须要确定的内容: 执行的对象和模块 资产配置清单 执行选项
ansible -m command -a "hostname" groupname -i /etc/ansible/ansible.cfg -f 5

快速调用adhoc 

from ansible.cli.adhoc import AdHocCLI
# 使用底层封装好的类快速操作
client = AdHocCLI(["get date", "test",'-m shell', '-a date'])
result = client.run()

拓展: Json
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它采用完全独立于编程
语言的文本格式来存储和表示数据。

扫描二维码关注公众号,回复: 11551953 查看本文章

json基本的序列化与反序列化

import json
# 将python的数据类型转换成json 字符串的过程称为序列化
d = {'name':'fentiao', 'age':18}
json_string = json.dumps(d)
print(json_string)
print(type(json_string))
# 将json 字符串转化为python/java/c数据类型的过程称为反序列化
dict = json.loads(json_string)
print(dict)
print(type(dict))
print(dict['name'])

json序列化与反序列化并写入文件

# 序列化
d = {'name':'粉条', 'age':18}
f = open('data.json', 'w')
# ensure_ascii默认值为True,会乱码, 设置为False支持中文,不会乱码
# indent=4设置缩进让文件内容的结构更加清晰
json_string = json.dump(d, f, ensure_ascii=False, indent=4)
print("write to data.json success")
# 反序列化
f = open('data.json')
data = json.load(f)
print(data)
print(type(data))

1-4. playbook模式

# 资产配置清单 执行选项
ansible-playbook webserver.yml -i /etc/ansible/hosts -f 5
from ansible.cli.playbook import PlaybookCLI
client = PlaybookCLI([" ",'-i', 'hosts', 'f1.yml'])
result = client.run()

作业:
创建一个Django项目
在页面/show/展示管理的主机组和主机组对应的主机清单(InventoryManager)
在页面主页显示表单,用户填写执行的命令和主机/主机组名称,实现对该主机组的成员批量
执行命令(ad-hoc模式)

猜你喜欢

转载自blog.csdn.net/weixin_43215948/article/details/107734214