saltstack主机管理项目:主机管理项目架构设计(二)
1、salt架构图
https://docs.saltstack.com/en/getstarted/system/plugins.html
plug-ins(左边):场景可插拔
subsystem-core-subsystem(中间蓝色部分):
- 执行命令
- 分发文件
- 安全存储数据
plug-ins(右边边):
- 通过命令行执行 标准的接口可以进行二次开发
- 可以用什么样的形式去描述机器能认识的
- 任务结果可以存储的
plug-ins(下面)
-
包-变成命令
2、远程执行流程:
流程图(官方图)
流程说明
- 输入一个命令
- 进行用户认证
- 把任务放在控制总线,然后分发给客户端队列
- 客户端判断是配置管理还是远程执行
- 下载配置文件
- 配置文件里的数据提取
- 安全数据(用户名,密码)单独存储
- 状态文件解析编译
- 按照标准的格式返回到时间总线上
- 客户端把执行的结果返回到服务器端把结果展现出来并长期保存
- 把结果展现出来并长期保存
- 当结果返回后触发任务
主机管理项目初始构建
1、任务解析实例
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
|
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 |
2、目录结构
3、代码解析
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 | from django.db import models # Create your models here. class Host(models.Model): ''' salt里面根本用不上ip,他是使用id或者grup组ID和hostname区别主机的唯一性的 saltsack服务器端和客户端是如何认证的 ? 客户端和服务器端的认证是通过key来进行认证,客户端主动找服务器验证, 我想被你管理,服务器有一个待审批想被管理的列表,同意后就可以管理了 ''' hostname = models.CharField(max_length = 128 ,unique = True ) key = models.TextField() status_choices = (( 0 , 'Waiting Approval' ), ( 1 , 'Accepted' ), ( 2 , 'Rejected' )) '''每个主机的三个状态等待、允许、拒绝''' def __str__( self ): return self .hostname class HostGroup(models.Model): name = models.CharField(max_length = 64 ,unique = True ) hosts = models.ManyToManyField(Host,blank = True ) def __str__( self ): return self .name |
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构