• saltstack主机管理项目:主机管理项目架构设计(二)


    1、salt架构图

    https://docs.saltstack.com/en/getstarted/system/plugins.html

    plug-ins(左边):场景可插拔

    subsystem-core-subsystem(中间蓝色部分):

    1. 执行命令
    2. 分发文件
    3. 安全存储数据

    plug-ins(右边边):

    1. 通过命令行执行 标准的接口可以进行二次开发
    2. 可以用什么样的形式去描述机器能认识的
    3. 任务结果可以存储的

    plug-ins(下面)

    1. 包-变成命令

    2、远程执行流程:

    流程图(官方图)

    流程说明

    1. 输入一个命令
    2. 进行用户认证
    3. 把任务放在控制总线,然后分发给客户端队列
    4. 客户端判断是配置管理还是远程执行
      1. 下载配置文件
      2. 配置文件里的数据提取
      3. 安全数据(用户名,密码)单独存储
      4. 状态文件解析编译
    5. 按照标准的格式返回到时间总线上
    6. 客户端把执行的结果返回到服务器端把结果展现出来并长期保存
    7. 把结果展现出来并长期保存
    8. 当结果返回后触发任务

    主机管理项目初始构建

    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必须运行
      - reloadTrue       
      - 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、代码解析

    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

       
  • 相关阅读:
    使用数据(二)
    lambda表达式
    方法引用::
    开发 Web 应用(一)
    Spring基础(三)
    Spring基础(二)
    Spring 基础(一)
    项目实践之Ajax 技术使用教程
    项目实践之前后端分离详解
    考研计算机基础:构造算法与自上而下逐步完善:实例研究3(嵌套控制结构)
  • 原文地址:https://www.cnblogs.com/luoahong/p/9419074.html
Copyright © 2020-2023  润新知