设为首页 收藏本站
查看: 1213|回复: 0

[经验分享] saltstack主机管理项目【day23】:主机管理项目需求分析

[复制链接]

尚未签到

发表于 2018-1-3 23:30:34 | 显示全部楼层 |阅读模式
本节内容
  一、 主机管理项目需求分析
  二 、主机管理项目架构设计
  三、主机管理项目初始构建
  四、 主机管理项目编主机分发器

一、 主机管理项目需求分析

配置管理:
  1、装上nginx,mysql
  2、nginx用我指定的配置文件
  3、mysql用户
  4、设置一个默认的数据库访问权限
  5、启动mysql and nginx

问题:
  1、脚本执行出错
  2、客户端环境,不相同
  3、重复脚本内容
  4、无法实现状态管理和检测

解决:
  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必须运行

  ->  - 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)
  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431362-1-1.html 上篇帖子: Saltstack运行cmd.run重新启动tomcat后出现日志乱码(15) 下篇帖子: saltstack系列(一)——介绍与安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表