一、远程执行命令

salt是众多复杂类型的远程执行的一个典型,和大多数互联网用户使用的一次只能和一台服务器交互的工具不太一样,salt可以允许用户直接在众多主机上运行命令。

1、基本架构

salt是基于Master和Minon的一主多从的思想,从master上发送命令到一组minion。然后执行命令中的既定任务,返回命令执行的结果给master。

2、Targeting minion(目标从节点)

每个远程命令都需要指定一个匹配的target目标,默认是glob。

常用的target类型如下:

类型 解释
Glob,’*’ 默认的target类型,没有命令行选项。
PCRE,-E,—pcre perl语言的正则表达式
list,-L,—list 通过逗号分隔的列表来指定多个minion。
Subnet,-S,—ipcidr 指定一个ipv4地址或者一个cidr的ipv4子网来target minion。
Grain,-G,—grain 使用grains的方式来管理从节点,获取其主机信息。
Pillar,-I,—pillar 通过pillar进行数据匹配。
混合(Compound,-C,—compound) 混合target允许在一个shell中执行多种类型的target
节点组(Nodegroup,-N,—nodegroup) 节点组是在salt内部使用的,从命令行显式使用。

3、运行模块方法

指定了target之后,需要声明运行的方法。 例如,test.ping
方法包含两部分,通过(.)来分割。 .
在salt命令中,模块方法紧跟target其后,也可以在最后给方法加任何参数:
salt . [options…]

salt '*' test.echo 'helloworld!'

salt概览 - 图1
salt常见模块名

  • test.ping
  • test.echo
  • test.sleep
  • test.version
  • pkg.install
  • pkg.remove
  • file.replace
  • sys.doc

    二、SLS文件树

    salt的子系统需要使用SLS文件树,salt state的/srv/salt,其次就是Pillar的/srv/pillar。 它们之间的文件格式不同,但是目录结构是相同的。

    1、SLS文件

    sls,即salt state。 yaml是Python中指代字典类型数据结构的序列化格式,sls文件是一组键值对,每一项都有一个唯一的键,引用一个值。
    sls文件中的每个小节(stanza)的key被称为ID,如果小节内没有显示声明name属性,那么ID作为name。
    ID必须是全局唯一的,重复的ID会报错。

    2、使用top文件将配置进行绑定

    state和pillar系统中,都有一个名为top.sls的文件,用于将sls文件拉在一起并指定在那个环境下应该为minion提供哪些sls文件。
    top.sls文件中的每个key都定义一个环境,一般情况定义一个Base的环境,此环境下包含基础设施中所有的minion。定义其他环境只包含minion的子集。
    1. base:
    2. '*':
    3. - common
    4. - vim
    5. qa:
    6. '*_qa':
    7. - jenkins
    8. web:
    9. 'web_*':
    10. - apache
    声明了三个环境,分别是base、qa和web。base环境指定所有 minion环境执行common和vim State。qa环境指定所有以qa结尾ID的Minon执行jenkins State。web环境指定所有以web开头ID的Minion执行apache State。

3、SLS目录组织

sls文件名可以是sls文件本身的文件名比如apache.sls。也可以是有apache/init.sls这种的文件名。

三、使用State进行管理配置

/srv/salt下的文件用于定义Salt State,这是配置管理格式,用来强制minion处于某一种状态。
例如,软件包package需要安装,文件file需要格式正确,服务service需要开机自启并处于运行状态。

  1. apache2:
  2. pkg:
  3. - installed
  4. service:
  5. - running
  6. file
  7. - managed
  8. - name: /etc/apache2/apache.conf

1、使用Include块

通过使用include块实现,一个文件引用其他sls文件。 通常放在sls文件的顶部:

  1. include:
  2. - base
  3. - emacs

sls文件将inlcude块中的内容替换为base.sls以及emacs.sls的内容。
include作为一个顶级声明,在一个文件中不能重复出现。

2、使用requsite排序

state sls文件具有声明式和命令式的特性,在所有管理配置系统格式中是独一无二的。
命令式,即每个state的评估顺序是按照它们在sls文件中的出现位置排序的。
声明式,因为state可以通过requsite来更改它们实际执行的顺序。