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

[经验分享] salt package manager (SPM)

[复制链接]

尚未签到

发表于 2017-11-22 20:19:24 | 显示全部楼层 |阅读模式
salt package manager
  简称SPM,使用man查看spm命令的使用方法,这一部分内容比较多,初浅的看了下文档,暂时先总结个大概,后续慢慢在探究一下细节,再进行补充。
  salt 的包管理主要包含以下3个部分,
  关系如图示:
DSC0000.png



(1)Packaging System
  包组织系统:主要内容包含如何建立一个SPM Packages。
  解析formula格式的目录结构:
DSC0001.png



(2)Repo System
  建立repo包仓库和相关信息
DSC0002.png



(3)Salt Master
  如何安装.spm的包,安装之后的部分目录结构如下:
DSC0003.png

  下面根据实例来初浅的讲解一下SPM的配置和安装逻辑,至于运用后续再进行探究。
  首先确认一下salt-master的版本,SPM功能在2015.10以后的版本才有,目前使用的环境是2016.11的版本
  (一)找到制作SPM的=包的原材料,官网推荐的一个站点https://github.com/saltstack-formulas,使用git下载几个formula格式的源码包
  git clone https://github.com/saltstack-formulas/nginx-formula.git
  git clone https://github.com/saltstack-formulas/redis-formula.git
  将软件包放置在/srv/spm,注意下载的源码包必须符合formula格式,formula包的格式要求参见http://docs.saltstack.cn/topics/spm/spm_formula.html#spm-formula
  下载下来的软件包是一个目录,结构参见图package system
  (二)制作spm包
  spm build /path/to/salt-packages-source/myapp-formula
  制作的spm包被存放在/srv/spm_build目录里面,例如包名为apache-201507-1.spm。
  同时在源码目录下面会产生几个目录pillar,reactor这几个目录。
  (三)生成SPM-METADATA信息
  spm create_repo /srv/spm_build
  生成的metedata文件就存放在spm包目录下
  (四)配置安装环境和安装spm包
  配置安装repo源:
  /etc/salt/spm.repos.d/spm.repo
  网络源:
  my_repo:
        url: https://spm.example.com/
  本地源:      
  my_repo:
        url: file:///srv/spm_build
  更新源:
  spm update_repo
  安装spm包:
  spm install apache
  spm local install /srv/spm/apache-201506-1.spm  #直接安装本地spm包
  安装的包路径在/srv/spm/salt下,目录结构如下:    


       DSC0004.gif DSC0005.gif


salt/
└── apache
     ├── certificates.sls
     ├── config.sls
     ├── debian_full.sls
     ├── files
     │   ├── Debian
     │   ├── FreeBSD
     │   ├── RedHat
     │   └── Suse
     ├── init.sls
     ├── logrotate.sls
     ├── manage_security.sls
     ├── map.jinja
     ├── mod_actions.sls
     ├── mod_cgi.sls
     ├── mod_dav_svn.sls
     ├── mod_fastcgi.sls
     ├── mod_fcgid.sls
     ├── mod_geoip.sls
     ├── mod_headers.sls
     ├── mod_mpm.sls
     ├── mod_pagespeed.sls
     ├── mod_perl2.sls
     ├── mod_php5.sls
     ├── mod_proxy_fcgi.sls
     ├── mod_proxy_http.sls
     ├── mod_proxy.sls
     ├── mod_remoteip.sls
     ├── mod_rewrite.sls
     ├── mod_security
     │   ├── init.sls
     │   └── rules.sls
     ├── modsecurity.yaml
     ├── mod_socache_shmcb.sls
     ├── mod_ssl.sls
     ├── mod_suexec.sls
     ├── modules.sls
     ├── mod_vhost_alias.sls
     ├── mod_wsgi.sls
     ├── mod_xsendfile.sls
     ├── no_default_vhost.sls
     ├── osfingermap.yaml
     ├── own_default_vhost.sls
     ├── register_site.sls
     ├── uninstall.sls
     └── vhosts
         ├── minimal.tmpl
         ├── proxy.tmpl
         ├── redirect.tmpl
         ├── standard.sls
         └── standard.tmpl
View Code  卸载spm包:
  spm remove apache
  (五)在file_roots中配置spm源,即可配置本地spm源,也可以配置网络spm源  


      


file_roots:
base:
1. /srv/salt
2. /srv/spm/salt
View Code

      


gitfs_remotes:
   - https://github.com/saltstack-formulas/apache-formula
   - https://github.com/saltstack-formulas/memcached-formula
View Code  配置好spm包源之后便于include到state文件中,部署到minion端,以下是几种常见的用法:
  a)include导入spm包        


      


include:
   - epel

python26:
   pkg.installed:
     - require:
       - pkg: epel
View Code  b)在top文件中引用     


      


base:
   'controller':
     - openstack.horizon
     - openstack.keystone
   'hyper-*':
     - openstack.nova
     - openstack.glance
   'storage-*':
     - openstack.swift
View Code  详细的说明参见:https://docs.saltstack.com/en/2016.11/topics/development/conventions/formulas.html
  关于Formulas格式的SPM包的一些初步理解:
  制作一个Formulas格式的spm包,可以在salt环境为我们提供一整套通用管理业务软件的方法,这些方法包括软件包安装,服务管理,配置管理等,当我们include一个spm包之后, 里面可配置的地方全部已经帮我们以模板,变量的方式设置好了,屏蔽了底层因操作系统环境差异而产生的配置差异给我们带来额外的麻烦,减少了冗余。
  示例:
  一个Formulas包的init.sls,这是类似python里面的__init__一个初始化的结构函数。    


    


{% from "apache/map.jinja" import apache with context %}

apache:
   pkg.installed:
     - name: {{ apache.server }}
   group.present:
     - name: {{ apache.group }}
     - system: True
   user.present:
     - name: {{ apache.user }}
     - gid: {{ apache.group }}
     - system: True
   service.running:
     - name: {{ apache.service }}
     - enable: True

# The following states are inert by default and can be used by other states to
# trigger a restart or reload as needed.
apache-reload:
   module.wait:
     - name: service.reload
     - m_name: {{ apache.service }}

apache-restart:
   module.wait:
     - name: service.restart
     - m_name: {{ apache.service }}
View Code  其中第一行中的{% from "apache/map.jinja" import apache with context %}模板中引入了apache/map.jinja
  再看apache/map.jinja中的内容:    


    


{% import_yaml "apache/osfingermap.yaml" as osfingermap %}
{% import_yaml "apache/modsecurity.yaml" as modsec %}

{% set apache = salt['grains.filter_by']({
     'Gentoo': {
         'server': 'www-servers/apache',
         'service': 'apache2',
         'user': 'apache',
         'group': 'apache',
         'configfile': '/etc/apache2/httpd.conf',

         'mod_wsgi': 'www-apache/mod_wsgi',
         'mod_fcgid': 'www-apache/mod_fcgid',

         'vhostdir': '/etc/apache2/vhosts.d',
         'confdir': '/etc/conf.d/apache2',
         'confext': '.conf',
         'default_site': 'default',
         'default_site_ssl': 'default-ssl',
         'logdir': '/var/log/apache2',
         'logrotatedir': '/etc/logrotate.d/apache2',
         'wwwdir': '/var/www',
     },
     'Debian': {
         'server': 'apache2',
         'service': 'apache2',
         'user': 'www-data',
         'group': 'www-data',
         'configfile': '/etc/apache2/apache2.conf',
         'portsfile': '/etc/apache2/ports.conf',

         'mod_wsgi': 'libapache2-mod-wsgi',
         'mod_php5': 'libapache2-mod-php5',
         'mod_perl2': 'libapache2-mod-perl2',
         'mod_fcgid': 'libapache2-mod-fcgid',
         'mod_pagespeed_source': 'https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb',
         'mod_xsendfile': 'libapache2-mod-xsendfile',
         'mod_fastcgi': 'libapache2-mod-fastcgi',

         'vhostdir': '/etc/apache2/sites-available',
         'confdir': '/etc/apache2/conf.d',
         'confext': '.conf',
         'default_site': 'default',
         'default_site_ssl': 'default-ssl',
         'logdir': '/var/log/apache2',
         'logrotatedir': '/etc/logrotate.d/apache2',
         'wwwdir': '/srv',
     },
     'RedHat': {
         'server': 'httpd',
         'service': 'httpd',
         'user': 'apache',
         'group': 'apache',
         'configfile': '/etc/httpd/conf/httpd.conf',

         'mod_wsgi': 'mod_wsgi',
         'conf_mod_wsgi': '/etc/httpd/conf.d/wsgi.conf',
         'mod_php5': 'php',
         'mod_pagespeed_source': 'https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_x86_64.rpm',

         'vhostdir': '/etc/httpd/vhosts.d',
         'confdir': '/etc/httpd/conf.d',
         'confext': '.conf',
         'default_site': 'default',
         'default_site_ssl': 'default-ssl',
         'logdir': '/var/log/httpd',
         'logrotatedir': '/etc/logrotate.d/httpd',
         'wwwdir': '/var/www',
         'default_charset': 'UTF-8',
     },
     'Suse': {
         'server': 'apache2',
         'service': 'apache2',
         'user': 'wwwrun',
         'group': 'www',
         'configfile': '/etc/apache2/httpd.conf',

         'mod_wsgi': 'apache2-mod_wsgi',
         'mod_php5': 'apache2-mod_php5',
         'mod_fcgid': 'apache2-mod_fcgid',

         'vhostdir': '/etc/apache2/vhosts.d',
         'confdir': '/etc/apache2/conf.d',
         'confext': '.conf',
         'default_site': 'vhost.template',
         'default_site_ssl': 'vhost-ssl.template',
         'logdir': '/var/log/apache2',
         'wwwdir': '/srv/www',
     },
     'FreeBSD': {
         'server': 'apache22',
         'service': 'apache22',
         'user': 'www',
         'group': 'www',
         'configfile': '/usr/local/etc/apache22/httpd.conf',
         'portsfile': '/usr/local/etc/apache22/ports.conf',

         'mod_php5': 'mod_php56',
         'mod_perl2': 'ap22-mod_perl2',
         'mod_wsgi': 'ap22-mod_wsgi3',

         'vhostdir': '/usr/local/etc/apache22/Includes',
         'confdir': '/usr/local/etc/apache22/extra',
         'modulesdir': '/usr/local/etc/apache22/modules.d',
         'global_document_root': '/usr/local/www/apache22/data',

         'confext': '',
         'default_site': 'default',
         'default_site_ssl': 'default-ssl',
         'logdir': '/var/log/',
         'wwwdir': '/usr/local/www/apache22/',
     },
}, merge=salt['grains.filter_by']({
     'precise': {
         'confext': '',
         'default_site': 'default',
         'default_site_ssl': 'default-ssl',
     },
     'trusty': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'utopic': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'vivid': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'wily': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'xenial': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'yakkety': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'zesty': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'artful': {
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'jessie': {
         'wwwdir': '/var/www',
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'stretch': {
         'wwwdir': '/var/www',
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
     'buster': {
         'wwwdir': '/var/www',
         'confext': '.conf',
         'default_site': '000-default.conf',
         'default_site_ssl': 'default-ssl.conf',
     },
}, grain='oscodename', merge=salt['grains.filter_by'](
     osfingermap
, grain='osfinger', merge=salt['pillar.get']('apache:lookup')))) %}

{% set modsecurity = salt['grains.filter_by'](
     modsec
, grain='os_family', merge=salt['pillar.get']('apache:mod_security')) or {} %}

{# merge the os family/codename mod_sec's specific data over the defaults #}
{% do apache.update({ 'mod_security': modsecurity }) %}
View Code  又导入了两个yaml的配置内容


    


default:
   version: '2.4'
Ubuntu-12.04:
   version: '2.2'
Red Hat Enterprise Linux Server-6:
   version: '2.2'
Red Hat Enterprise Linux Server-7:
   version: '2.4'
CentOS-6:
   version: '2.2'
CentOS Linux-7:
   version: '2.4'
   conf_mod_wsgi: '/etc/httpd/conf.modules.d/10-wsgi.conf'
Oracle Linux Server-6:
   version: '2.2'
Oracle Linux Server-7:
   version: '2.4'
Amazon Linux AMI-2014:
   version: '2.2'
Amazon Linux AMI-2015:
   version: '2.2'
Amazon Linux AMI-2016:
   version: '2.2'
View Code

    


default:
   crs_install: False
   manage_config: False
Debian:
   crs_install: False
   manage_config: False
   package: libapache2-mod-security2
   crs_package: modsecurity-crs
   config_file: /etc/modsecurity/modsecurity.conf-recommended
RedHat:
   crs_install: False
   manage_config: False
   package: mod_security
   crs_package: mod_security_crs
   config_file: /etc/httpd/conf.d/mod_security.conf
View Code  里面的配置的grains变量根据minion端的实际配置读取,达到消除部署的差异化,提高配置性的灵活性和便利性。
  先写一点吧,后面再续.........

运维网声明 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-409639-1-1.html 上篇帖子: linux下各安装包的安装方法 下篇帖子: rancher中级(一)(rancher的存储,网络)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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