saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)
一、编写插件基类
1、目录结构

1、我是如何获知我有多少种系统?
- 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了
- 每次对主机发送命令的动作时,我从库里把数据取出来,我去判断有几种就可以,每个模块执行之前都要这样的判断,
- 直接把用户分配给了不同的模块,这就变成我了我每个模块都要写一边(重复劳动)
- 写一个公共的类,就是提取这些,你一定要有一个公共的类,他的作用是为了规范其他的模块
2、运行结果截图
cmd和state只要一执行就会自动去提取主机

二、获取主机列表
1、目录结构

2、代码解析
1、注册admin组件
from django.contrib import admin # Register your models here.
from Arya import models
admin.site.register(models.Host)
admin.site.register(models.HostGroup)
2、创建超级用户进入后台创建测试数据
python manage.py createsuperuser
3、默认操作系统类型
from django.db import models # Create your models here. class Host(models.Model):
hostname = models.CharField(max_length=128,unique=True)
key = models.TextField()
status_choices = ((0,'Waiting Approval'),
(1,'Accepted'),
(2,'Rejected')) os_type_choices =(
('redhat','Redhat\CentOS'),
('ubuntu','Ubuntu'),
('suse','Suse'),
('windows','Windows'),
)
4、判断输入的命令有没有超过边界
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:luoahong class BaseSaltModule(object):
def __init__(self,sys_argvs,db_models,settings):
self.db_models = db_models
self.settings = settings
self.sys_argvs = sys_argvs def get_selected_os_types(self):
data = {}
for host in self.host_list:
data[host.os_type] = []
print('--->data',data)
return data
def process(self):
self.fetch_hosts()
self.config_data_dic = self.get_selected_os_types()
def require(self,*args,**kwargs):
pass
def fetch_hosts(self):
print('--fetching hosts---') if '-h' in self.sys_argvs or '-g' in self.sys_argvs:
host_list = []
if '-h' in self.sys_argvs:
host_str_index = self.sys_argvs.index('-h') +1
if len(self.sys_argvs) <= host_str_index:
exit("host argument must be provided after -h")
else: #get the host str
host_str = self.sys_argvs[host_str_index]
host_str_list = host_str.split(',')
host_list += self.db_models.Host.objects.filter(hostname__in=host_str_list)
if '-g' in self.sys_argvs:
group_str_index = self.sys_argvs.index('-g') +1
if len(self.sys_argvs) <= group_str_index:
exit("group argument must be provided after -g")
else: #get the group str
group_str = self.sys_argvs[group_str_index]
group_str_list = group_str.split(',')
group_list = self.db_models.HostGroup.objects.filter(name__in=group_str_list)
for group in group_list:
host_list += group.hosts.select_related()
self.host_list = set(host_list)
return True
print('----host list:', host_list)
else:
exit("host [-h] or group[-g] argument must be provided") def syntax_parser(self,section_name,mod_name,mod_data):
print("-going to parser state data:",section_name,mod_name)
for state_item in mod_data:
print("\t",state_item)
for key,val in state_item.items():
if hasattr(self,key):
state_func = getattr(self,key)
state_func(val)
else:
exit("Error:module [%s] has no argument [%s]" %( mod_name,key ))
三、提取yaml配置文件
1、提取配置文件模板
apache:
pkg.installed: []
service.running:
- reload: True
- watch:
- file: /etc/httpd/conf/httpd.conf
user.present:
- uid: 87
#- username: alex
- gid: 87
- home: /var/www/html
- shell: /bin/nologin
- require:
- group: apache
group.present:
- gid: 87
- require:
- pkg: apache /etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/httpd.conf
- user: root
- group: root
- mode: 644
2、目录结构

4、提取配置文件python文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:luoahong class BaseSaltModule(object):
def __init__(self,sys_argvs,db_models,settings):
self.db_models = db_models
self.settings = settings
self.sys_argvs = sys_argvs def get_selected_os_types(self):
data = {}
for host in self.host_list:
data[host.os_type] = []
print('--->data',data)
return data
def process(self):
self.fetch_hosts()
self.config_data_dic = self.get_selected_os_types()
def require(self,*args,**kwargs):
pass
def fetch_hosts(self):
print('--fetching hosts---') if '-h' in self.sys_argvs or '-g' in self.sys_argvs:
host_list = []
if '-h' in self.sys_argvs:
host_str_index = self.sys_argvs.index('-h') +1
if len(self.sys_argvs) <= host_str_index:
exit("host argument must be provided after -h")
else: #get the host str
host_str = self.sys_argvs[host_str_index]
host_str_list = host_str.split(',')
host_list += self.db_models.Host.objects.filter(hostname__in=host_str_list)
if '-g' in self.sys_argvs:
group_str_index = self.sys_argvs.index('-g') +1
if len(self.sys_argvs) <= group_str_index:
exit("group argument must be provided after -g")
else: #get the group str
group_str = self.sys_argvs[group_str_index]
group_str_list = group_str.split(',')
group_list = self.db_models.HostGroup.objects.filter(name__in=group_str_list)
for group in group_list:
host_list += group.hosts.select_related()
self.host_list = set(host_list)
return True
print('----host list:', host_list)
else:
exit("host [-h] or group[-g] argument must be provided") def syntax_parser(self,section_name,mod_name,mod_data):
print("-going to parser state data:",section_name,mod_name)
for state_item in mod_data:
print("\t",state_item)
for key,val in state_item.items():
if hasattr(self,key):
state_func = getattr(self,key)
state_func(val)
else:
exit("Error:module [%s] has no argument [%s]" %( mod_name,key ))
5、运行截图
1、获主机信息

2、打印模块详细信息

打印结果截图

saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)的更多相关文章
- saltstack主机管理项目【day23】:主机管理项目需求分析-设计
本节内容 一. 主机管理项目需求分析 二 .主机管理项目架构设计 三.主机管理项目初始构建 四. 主机管理项目编主机分发器 一. 主机管理项目需求分析 场景:我现在又一台裸机要实现一下人物 配置管理: ...
- saltstack主机管理项目:主机管理项目架构设计(二)
1.salt架构图 https://docs.saltstack.com/en/getstarted/system/plugins.html plug-ins(左边):场景可插拔 subsystem- ...
- saltstack主机管理项目【day39】:主机管理项目开发
项目目标 salt state.apply -h "ubuntu,centos" -g "ubuntu,centos" -f "ubuntu,cent ...
- ASP.NET MVC项目实现BasePage基类用作ASPX.CS网页继承
在ASP.NET MVC项目开发,还是需要创建一些Web Page来实现一些功能,如呈现报表等... 但是一旦项目的.ASPX网页太多了,其中的程序代码也会有代码冗余,出现这些情况,我们得需要对这些代 ...
- 通过Zabbix API实现对主机的增加(无主机资产的添加和带主机资产的添加)、删除、获取主机id、获取模板id、获取组id
config.yaml存储zabbix的信息(主要包括zabbix server的url .请求头部.登陆的用户名密码) Zabbix_Config: zabbix_url: http://192.1 ...
- saltstack主机管理项目:动态调用插件解析-模块解析(五)
一.动态调用插件解析 1.目录结构 1.base_module代码解析: def syntax_parser(self,section_name,mod_name,mod_data): print(& ...
- saltstack主机管理项目:今日总结(六)
一.总目录 二.具体代码 salt #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:luoahong import os,sys if __ ...
- saltstack主机管理项目:主机管理项目需求分析(一)
1.场景: 我现在又一台裸机要实现一下任务 2.配置管理: 1.装上nginx,mysql 2.nginx用我指定的配置文件 3.mysql用户 4.设置一个默认的数据库访问权限 5.启动mysql ...
- saltstack主机管理项目:计主机管理项目命令分发器(三)
一.开发目标命令格式如下: 二.目录结构 三.代码注解 01.salt.py 只是一个入口,没干什么事情 #!/usr/bin/env python # -*- coding:utf-8 -*- # ...
随机推荐
- c/c++ 多线程 等待一次性事件 异常处理
多线程 等待一次性事件 异常处理 背景:假设某个future在等待另一个线程结束,但是在被future等待的线程里发生了异常(throw一个异常A),这时怎么处理. 结果:假设发生了上面的场景,则在调 ...
- CentOS 6.2 中文
在虚拟机里面安装好centos6.2之后,默认是英文! 对于命令行操作无所谓啦,但是如果想看界面,就不是很适应! 修改方法如下: 1.用root登录系统,密码为创建虚拟机时候的密码.创建虚 ...
- Centos7安装搭建NTP服务器和NTP客户端同步时间
NTP简介: NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 在计算机的世界里,时间非常地重要 例如:对于火箭发射这种科研活动,对时间的 ...
- Docker:测试环境的准备-centos7上安装docker
Dockers官方部署文档:https://docs.docker.com/install/linux/docker-ce/centos/ 1.建议先关闭 selinux (selinux是 linu ...
- (笔记)CTF入门指南
[考项分类] Web: 网页安全 Crypto: 密码学(凯撒密码等) PWN: 对程序逻辑分析 系统漏洞利用 Misc: 杂项 图片隐写 数据还原 脑洞类 信息安全有关的 Reverse: 逆向工程 ...
- bootstrapt 使用遇到问题
1.布局的时候什么时候用xs,sm,md,lg? small grid (≥ 768px) = .col-sm-*, medium grid (≥ 992px) = .col-md-*, large ...
- java.util.NoSuchElementException问题定位
Iterator 迭代器越界 例子如下: Iterator i = set.iterator(); while (i.hasNext()) { System.out.println(i.next()) ...
- jsplumb 中文基础教程
jsplumb 中文基础教程 https://github.com/wangduanduan/jsplumb-chinese-tutorial
- 在Asp.Net Core中使用DI的方式使用Hangfire构建后台执行脚本
最近项目中需要用到后台Job,原有在Windows中我们会使用命令行程序结合计划任务或者直接生成Windows Service,现在.Net Core跨平台了,虽然Linux下也有计划任务,但跟原有方 ...
- 基于mybatis基本操作
实体 在对上述三个实体操作中了解mybatis的实现 全部代码 pro1是另外的一个完整项目用spring和struts2 hibernate 下载 https://github.com/Danov ...