saltstack主机管理项目【day23】:主机管理项目需求分析-设计
本节内容
一、 主机管理项目需求分析
二 、主机管理项目架构设计
三、主机管理项目初始构建
四、 主机管理项目编主机分发器
一、 主机管理项目需求分析
场景:我现在又一台裸机要实现一下人物
配置管理:
1、装上nginx,mysql
2、nginx用我指定的配置文件
3、mysql用户
4、设置一个默认的数据库访问权限
5、启动mysql and nginx
场景:因为200台机器要连接200次,要花很长时间,写一个脚本。分发到所有的机器,然后再执行脚本,
问题:
1、脚本执行出错
2、客户端环境,不相同(没有判断时什么操作系统)
3、重复脚本内容(很多时候,经常要装各种服,今天装apache,明天装nginx这样不停的重复劳动)
4、无法实现状态管理和检测
安装nginx,他是把服务安装好了,但是它能代表机器上的一种状态吗?比如从应用层面上讲我这个nginx是启动状态还是关闭状态
我确保这台机器有三个固定的用户,mysql状态是正常的,比如说我有500台机器,都安装了mysql,我可以写脚本时可以实现的,也可一起
启动起来,但是过两天有100台down了,我让我的管理建议一个配置文件或者服务你一旦有变化我就reload或者启动服务,过了两天down了
我想自动把它启动起来,所以脚本就不行了
解决:
1、标准化
每个人写的脚本都不一样,别人写的脚本肯定和你不一样,每个人写的环境判断都不一样
如果大量的环境,大量的重复工作
2、客户端最好有个守护进程
二 、主机管理项目架构设计
1、salt架构图
https://docs.saltstack.com/en/getstarted/system/plugins.html
plug-ins(左边):场景可插拔
subsystem-core-subsystem(中间蓝色部分):
- 执行命令
- 分发文件
- 安全存储数据
plug-ins(右边边):
- 通过命令行执行 标准的接口可以进行二次开发
- 可以用什么样的形式去描述机器能认识的
- 任务结果可以存储的
plug-ins(下面)
包-变成命令
2、远程执行流程:
流程图(官方图)

流程说明
- 输入一个命令
- 进行用户认证
- 把任务放在控制总线,然后分发给客户端队列
- 客户端判断是配置管理还是远程执行
- 下载配置文件
- 配置文件里的数据提取
- 安全数据(用户名,密码)单独存储
- 状态文件解析编译
- 按照标准的格式返回到时间总线上
- 客户端把执行的结果返回到服务器端把结果展现出来并长期保存
- 把结果展现出来并长期保存
- 当结果返回后触发任务
3、任务解析实例
apache:
#yum 安装
pkg.installed: []
service.running: #apache必须运行
- 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: #apache组不存在上面的命令不执行
- gid: 87
- require:
- pkg: apache /etc/httpd/conf/httpd.conf: #每执行一次配置文件就更新一次
file.managed:
- source: salt://apache/httpd.conf
- user: root
- group: root
- mode: 644
三、主机管理项目初始构建
创建一个项目stark:存放项目实战里所有的项目

创建一个文件夹Arya:存放主机管理项目文件

3、 创建一个主机模板文件
models文件编辑
from django.db import models # Create your models here. class Host(models.Model): #主机管理
hostname = models.CharField(max_length=128,unique=True) #saltsack用hostname区别主机
key = models.TextField() #客户端主动找服务器,我想被你管理存放key文件
status_choices = ((0,'Waiting Approval'), #每个主机的三个状态等待、允许、拒绝
(1,'Accepted'),
(2,'Rejected'))
四、主机管理项目命令分发器
01、salt.py 只是一个入口,没干什么事情
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li import os,sys if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Stark.settings")
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#print(BASE_DIR)
sys.path.append(BASE_DIR)
from Arya.action_list import actions
from Arya.backends.utils import ArgvManagement
obj = ArgvManagement(sys.argv)
02、action_list.py 路由分发器
utils.py 创建了一个类
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li
from Arya.plugins import cmd,state
actions = {
'cmd': cmd.CMD,
'state':state.State
}
03、backends 建了一个目录
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li
import sys from Arya import action_list
import django
django.setup() from Stark import settings
from Arya import models
class ArgvManagement(object):
'''
接收用户指令并分配到相应模块
'''
def __init__(self,argvs):
self.argvs = argvs
self.argv_parse() def help_msg(self):
print("Available modules:")
for registered_module in action_list.actions:
print(" %s" % registered_module)
exit()
04、plugins 建立一个目录
cmd.py 创建两个类
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li from Arya.backends.base_module import BaseSaltModule
class CMD(BaseSaltModule):
print('in cmd module ')
state.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li
from Arya.backends.base_module import BaseSaltModule
import os class State(BaseSaltModule): def load_state_files(self,state_filename):
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
state_file_path = "%s/%s" %(self.settings.SALT_CONFIG_FILES_DIR,state_filename)
if os.path.isfile(state_file_path):
with open(state_file_path) as f:
data = load(f.read(), Loader=Loader)
return data
else:
exit("%s is not a valid yaml config file" % state_filename)
saltstack主机管理项目【day23】:主机管理项目需求分析-设计的更多相关文章
- 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...
- http://182.92.241.20/mypro/login 偶的点金项目细化分包管理平台即将上线!!
http://182.92.241.20/mypro/login 偶的点金项目细化分包管理平台即将上线!! 敬请期待! 项目外包利器 项目管理利器
- [课程分享]IT软件项目管理(企业项目甘特如是评价、维护管理、文档管理、风险管理、人力资源管理)
[课程分享]IT件项目管理(企业项目甘特图案例评价.维护管理.文档管理.风险管理.人力资源管理) 对这个课程有兴趣的朋友能够加我的QQ2059055336和我联系 课程讲师:丁冬博士 课程分类:Jav ...
- IT项目各阶段管理
- linkinFrame--测试项目添加git管理
OK,前面一篇博客,已经搭建好了项目的基础的结构.现在我们添加一个简单的servlet来测试下项目能不能跑,然后在讲项目添加到coding上用git管理. 1,我们编写一个servlet,编写一个js ...
- java传统web项目添加maven管理jar包,log4j无法正常输出日志
本文适合1年以上编程基础的开发人员阅读,非技术创新,可作为故障排除实录参考/收藏. 背景 笔者最近在给公司一个老的web项目改造升级,项目使用springmvc+mybatis,由于项目比较久远,没有 ...
- php管理nginx虚拟主机shell脚本
使用php作为shell脚本是一件很方便的事情.理所当然,我们可以使用php脚本来管理 nginx虚拟主机,下面是笔者的 脚本 文件供各位参考 代码如下 复制代码 #!/usr/bin/php -q& ...
- 关于vue项目管理项目的架构管理平台
关于vue项目管理项目的架构管理平台 https://panjiachen.github.io/vue-element-admin-site/#/zh-cn/faq 31.4k 次浏览 完整项目地址: ...
随机推荐
- 一步一步来熟悉Akka.Net(一)
一步一步来熟悉Akka.Net(一) 标签(空格分隔): .netcore 分布式 一.不利flag 好久没写过文章了,翻开前几年写的博客,看到有两个目标"代码生成器"和&qu ...
- 3、Docker容器管理
一.容器创建 1.创建命令 docker container [root@localhost harbor]# docker container Usage: docker container CO ...
- Maven构建项目速度太慢的解决办法
问题描述 通过idea新建maven项目,参数设置好后,idea自动构建maven项目时,速度很慢. 参数设置如图: 执行时间如下图: Total time为8:49,花了将近十分钟时间. 连续尝试了 ...
- ECS centos7 使用外部邮件服务商的465加密端口
ECS centos7 使用外部邮件服务商的465加密端口发送邮件. 1.修改/etc/mail.rc 文件中添加以下的 set smtp="smtps://smtp.163.com:465 ...
- MOSFET的小信号模型和频率响应
这部分内容大部分参考W.Y.Choi的课堂讲义第三讲和第四讲:http://tera.yonsei.ac.kr/class/2007_1/main.htm 一.小信号模型 首先要明确一点,大部分情形M ...
- [SHELL]输入输出重定向与管道
一 . 输出重定向(将命令的输出重定向到文件): ls -al > test 以覆盖的方式写入 ls -al >> test 以追加的方式写入 二 . 输入重定向(将文件的内容重定向 ...
- linux一切皆文件之tty字符设备(深入理解sshd创建pty的过程) (五)
一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.块设备支 ...
- 毕业设计---jQuery动态生成的a标签的事件绑定
这几天在毕业设计的前端设计阶段,准备放弃使用jsp,完全通过html+ajax+SSH进行网站的编写,在前端的页面显示我准备使用jQuery来实现数据的动态绑定.但是遇到动态添加的a标签无法直接通过$ ...
- 第四篇——Spring音乐登录界面设计及实现(C#)
Spring音乐播放器,我们小组设计其启动时有一个登录界面,用户初次可以注册,输入用户名和密码,点击注册即将输入信息保存到register文本文件中:如果已有用户名,输入用户名和密码,点击登录,程序会 ...
- vmwear导出OVF模板解析(解决ovf导入服务器失败问题,虚拟机版本等)
我们将vmwear虚拟机导出ovf模板后,有三个文件: 1,.mf 保存着.ovf和.vmdk两个文件的SHA1值,用于校验文件的完整性 2,.ovf 以XML格式保存着虚拟机的配置信息 3,.vmd ...