zoukankan      html  css  js  c++  java
  • 2018年7月1日笔记

    • pillar

    Pillar在salt中是非常重要的组成部分,利用它可以完成很强大的功能,它可以指定一些信息到指定的minion上,不像grains一样是分发到所有Minion上的,它保存的数据可以是动态的,Pillar以sls来写的,格式是键值对

    适用情景:

    1.比较敏感的数据,比如密码,key等

    2.特殊数据到特定Minion上

    3.动态的内容

    4.其他数据类型

    查看Minion的Pillar信息

    salt '*' pillar.items

    查看某个Pillar值

    salt '*' pillar.item <key>      #只能看到顶级的
    salt '*' pillar.get <key>:<key> #可以取到更小粒度的

    编写pillar数据

    1.指定pillar_roots,默认是/srv/pillar(可通过修改master配置文件修改),建立目录

    mkdir /srv/pillar
    cd /srv/pillar

    2.编辑一个pillar数据文件

    vim test1.sls
    name: 'salt'
     users:
       hadoop: 1000
    redhat: 2000
    ubuntu: 2001

    3.建立top file指定minion到pillar数据文件

    vim top.sls
     base:
       '*':
         - test1

    4.刷新Pillar数据

    salt '*' saltutil.refresh_pillar

    5.测试

    salt '*' pillar.get name
    salt '*' pillar.item name

    在state中通过jinja使用pillar数据

    vim /srv/salt/user.sls
     {% for user, uid in pillar.get(’users’, {}).items() %}  ##pillar.get('users',{})可用pillar['users']代替,前者在没有得到值的情况下,赋默认值
     {{user}}:
       user.present:
         - uid: {{uid}}
     {% endfor %}

    当然也可以不使用jinja模板

    vim /srv/salt/user2.sls
    {{ pillar.get('name','') }}:
     user.present:
       - uid: 2002

    通过jinja模板配合grains指定pillar数据

    /srv/pillar/pkg.sls
    
    pkgs:
     {% if grains[’os_family’] == ’RedHat’ %}
     apache: httpd
     vim: vim-enhanced
     {% elif grains[’os_family’] == ’Debian’ %}
     apache: apache2
     vim: vim
     {% elif grains[’os’] == ’Arch’ %}
     apache: apache
     vim: vim
     {% endif %}
    • grains

    服务器的一些静态信息,这里强调的是静态,就是不会变的东西,比如说os是centos,如果不会变化,除非重新安装系统

    定义minion的grains可以写在/etc/salt/minion中格式如下

    grains:
     roles:
       - webserver
       - memcache
     deployment: datacenter4
     cabinet: 13
     cab_u: 14-15

    或者写在/etc/salt/grains中,格式如下

    roles:
     - webserver
     - memcache
    deployment: datacenter4
    cabinet: 13
    cab_u: 14-15

    也可以在master中编写grains的模块,同步到minion中,用Python来写很简单的

    1.在/srv/salt中建立_grains目录

    mkdir /srv/salt/_grains

    2.编写grains文件,需要返回一个字典

     vim test1.py
     def hello():                      ##函数名字无所谓,应该是所有函数都会运行
       agrain = {}
       agrain['hello'] = 'saltstack'
    return agrain                   ##返回这个字典

    3.同步到各个minion中去

    salt '*' saltutil.sync_grains
    salt '*' saltutil.sync_all
    salt '*' state.highstate

    4.验证

    salt '*' grains.item hello
    • 使用 salt state

    它的核心是写sls(SaLt State file)文件,sls文件默认格式是YAML格式(以后会支持XML),并默认使用jinja模板,YAML与XML类似,是一种简单的适合用来传输数据的格式,而jinja是根据django的模板语言发展而来的语言,简单并强大,支持for if 等循环判断。salt state主要用来描述系统,软性,服务,配置文件应该出于的状态,常常被称为配置管理!

    通常state,pillar,top file会用sls文件来编写。state文件默认是放在/srv/salt中,它与你的master配置文件中的file_roots设置有关

    示例: apache.sls文件内容 ##/srv/salt/apahce.sls,以后没有用绝对路径意思就是在/srv/salt下

    apache:            ##state ID,全文件唯一,如果模块没跟-name默认用的ID作为-name
     pkg:             ##模块
       - installed    ##函数
      #- name: apache ##函数参数,可以省略
     service:         ##模块
       - running      ##函数
      #- name: apache ##函数参数,这个是省略的,也可以写上
       - require:     ##依赖系统
         - pkg: apache  ##表示依赖id为apache的pkg状态

    下面来解释上面示例的意思:

    声明一个叫apache的状态id,该id可以随意,最好能表示一定意思

    pkg代表的是pkg模块

    installed是pkg模块下的一个函数,描述的是状态,该函数表示apache是否部署,返回值为True或者False,为真时,表示状态OK,否则会去满足该状态(下载安装apache),如果满足不了会提示error,在该模块上面省略了参数-name: apache,因为ID为apache,这些参数是模块函数需要的(可以去查看源码)

    service是指的service模块,这个模块下主要是描述service状态的函数,running状态函数表示apache在运行,省略-name不在表述,-require表示依赖系统,依赖系统是state system的重要组成部分,在该处描述了apache服务的运行需要依赖apache软件的部署,这里就要牵涉到sls文件的执行,sls文件在salt中执行时无序(如果没有指定顺序,后面会讲到order),假如先执行了service这个状态,它发现依赖pkg包的安装,会去先验证pkg的状态有没有满足,如果没有依赖关系的话,我们可以想象,如果没有安装apache,apache 的service肯定运行会失败的,我们来看看怎么执行这个sls文件:

    salt '*' state.sls apache   

    在命令行里这样执行就ok了,.sls不要写,如果在目录下,将目录与文件用’.’隔开,如: httpd/apache.sls –> httpd.apache

    或者

    salt '*' state.highstate 

    这需要我们配置top file执定哪个minion应用哪个状态文件

    top.sls内容

    base:
     '*':
       - apache

    下面我们继续看一些比较复杂的:

    ssh/init.sls文件内容

    openssh-client:
     pkg.installed
    /etc/ssh/ssh_config:
     file.managed:
       - user: root
    - group: root
    - mode 644
    - source: salt://ssh/ssh_config
    - require:
     - pkg: openssh-client

    ssh/server.sls文件内容

    include:
     - ssh
    
    openssh-server:
     pkg.installed
    
    sshd:
     service.running:
       - require:
     - pkg: openssh-client
     - pkg: openssh-server
     - file: /etc/ssh/banner
     - file: /etc/ssh/sshd_config
    
    /etc/ssh/sshd_config:
     file.managed:
       - user: root
    - group: root
    - mode: 644
    - source: salt://ssh/sshd_config
    - require:
     - pkg: openssh-server
    
    /etc/ssh/banner:
     file:
       - managed
    - user: root
    - group: root
    - mode: 644
    - source: salt://ssh/banner
    - require:
     - pkg: openssh-server

    ssh/init.sls,学过Python的都知道目录下面的init文件是特殊文件,它怎么特殊呢,它特殊在当我们应用目录时会应用该文件的内容,如我们执行 salt ‘*’ state.sls ssh时应用的就是init.sls文件,明白了吗?再看里面的内容,前两行我们已经看过了,是描述某个rpm包有没有安装的,第三行是ID,也可以用来表示-name,以省略-name,file.managed是file模块与函数managed的快捷写法,看server.sls下最后就知道了,managed它描述了某个文件的状态,后面跟的是managed的参数,user,group,mode你们一看就知道什么意思了,关于这个source是指从哪下载源文件,salt://ssh/sshd_config是指的从salt的文件服务器里面下载,salt文件服务器其实就是file_roots默认/srv/salt/明白了吗,所以salt://ssh/sshd_config指的就是 /srv/salt/ssh/sshd_config,出来用salt的文件服务器,也可以用http,ftp服务器。- require是依赖系统不表,以后会详细说它的。再往下是server.sls文件,include表示包含意思,就是把ssh/init.sls直接包含进来

    这时你会看到/srv/salt的目录树是:

    ssh/init.sls
    ssh/server.sls
    ssh/banner
    ssh/ssh_config
    ssh/sshd_config

    下面再来看一个官方样例:

    ssh/custom-server.sls 文件内容

    include:
     - ssh.server
    extend:
     /etc/ssh/banner:
       file:
     - source: salt://ssh/custom-banner

    python/mod_python.sls文件内容

    include:
     - apache
    
    extend:
     apache:
       service:
     - watch:
       - pkg: mod_python

    首先我们include的别的文件,但是里面的内容并不是全部符合我们的要求,这时我们就需要用extend来重写部分内容,特殊的是依赖关系都是追加。custom-server.sls文件意思是包含ssh/server.sls,扩展/etc/ssh/banner,重新其source而其它的如user,group等不变,与include一致。 mode_python.sls文件意思是把apache.sls包含进来,想apache-service是追加了依赖关系(watch也是依赖系统的函数).

    常用状态配置 salt-states-master.zip

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    SpringSecurity03 基于内存验证
    SpringSecurity02 表单登录、SpringSecurity配置类
    SpringSecurity01 SpringSecurity环境搭建
    密码的加密和匹配
    SpringBoot05 数据操作03 -> JPA查询方法的规则定义
    SpringBoot05 数据操作02 -> JPA接口详解
    SpringBoot05 数据操作01 -> JPA的基本使用、基本使用02
    linux中目录操作<1>
    linux以行为单位进行读写操作
    linux以字符为单位进行读写操作
  • 原文地址:https://www.cnblogs.com/karl-python/p/9255909.html
Copyright © 2011-2022 走看看