SaltStack配置管理(1) – 函数

salt state函数

salt state函数就是指在salt state中所做的实际工作,是saltstack配置管理最重要的东西。
函数用来安装和配置应用,创建用户,分发文件和关于你配置你系统的所有其它事情。
在我们调用函数之前,我们来看一下salt state函数的语法。

语法

salt state使用YAML来描述系统状态,YAML是描述结构化数据(类似JSON,但更人性化)的简单语言。
下面的图表显示salt state的声明格式:

salt state第一行声明是是一个ID。
ID下面是你调用一个或多个salt state函数的地方。

  • ID和函数的行以冒号结尾。每个函数调用在ID的下行缩进两个空格。参数以列表形式传递给函数。函数的下面每行一个参数,先缩进两个空格,然后一个连字符,再一个空格,之后就是参数名称和值了。
  • 如果参数只有一个值,那么参数名称和值在同一行,以冒号和一个空格分隔。如果参数值是一个列表,那么列表在下一行开始,缩进两个空格。
  • 函数示例

    最好学习salt state函数的方法是学习一个示例。我们再次使用之前搭建的demo环境来学习这个示例https://www.centos.bz/2016/11/saltstack-demo-environment/。
    打开终端,切换到salt-vagrant-demo-master目录,执行vagrant up命令。
    当环境启动后,创建一个名称为salt-vagrant-demo-master/saltstack/salt/examples.sls的文件,以便你能运行这么示例。

    安装软件包

    把下面的代码复制到刚才创建的examples.sls文件:

    1. install vim:
    2.   pkg.installed:
    3.     - name: vim

    ssh到salt master服务器:

    1. vagrant ssh master

    用如下命令应用examples.sls state:

    1. sudo salt 'minion1' state.apply examples

    创建目录

    下面是创建目录的示例。

    1. create my_new_directory:
    2.  file.directory:
    3.    - name: /opt/my_new_directory
    4.    - user: root
    5.    - group: root
    6.    - mode: 755

    运行服务

    下面的state用来确保一个服务正在运行在salt minion:

    1. Make sure the mysql service is running:
    2.   service.running:
    3.     - name: mysql

    每一个state声明以一个state ID来区分。state ID必须是唯一的,它们能包含空格和数字。
    你可以在一个state ID下添加多个salt state函数:

    1. Install mysql and make sure the mysql service is running:
    2.   pkg.installed:
    3.     - name: mysql
    4.   service.running:
    5.     - name: mysql

    开始启动服务

    当你调用一个函数时,确保你把函数的参数全部看一遍,因为通常你仅需传递额外的参数就可以完成许多事件。通过传递enable: True到service.running函数,saltstack就会确保服务开机启动。

    1. Make sure the mysql service is running and enable it to start at boot:
    2.   service.running:
    3.     - name: mysql
    4.     - enable: True

    下载GIT仓库

    每个函数都有一个name参数。如果你没有设置,那么salt就使用state的ID。在这个示例中,name参数为https://github.com/saltstack/salt.git:

    1. https://github.com/saltstack/salt-bootstrap:
    2.   git.latest:
    3.     - rev: develop
    4.     - target: /tmp/salt

    使用ID作为name参数值的确省了敲打一些字符,不过还是推荐都设置一个name,如下:

    1. Clone the SaltStack bootstrap script repo:
    2.   pkg.installed:
    3.     - name: git # make sure git is installed first!
    4.   git.latest:
    5.     - name: https://github.com/saltstack/salt-bootstrap
    6.     - rev: develop
    7.     - target: /tmp/salt

    这样能让你的state更明了,更容易维护。

    添加用户

    1. user account for pete:
    2.   user.present:
    3.     - name: pete
    4.     - shell: /bin/bash
    5.     - home: /home/pete
    6.     - groups:
    7.       - sudo

    参数groups的值是一个列表,所以放到下一行,缩进两个空格再加一个短破折号。

    添加条目到hosts文件

    1. myserver in hosts file:
    2.   host.present:
    3.     - name: myserver
    4.     - ip: 192.168.0.42

    平台规范化的一个很好的例子。即使每个平台配置的hosts方式有所不同,salt state仍然能正确地在各个系统配置hosts(不需要关心salt实现的细节)。

    调用执行函数

    service.restart和其它执行函数可以在salt state调用。

    1. restart vsftpd:
    2.   module.run:
    3.     - name: service.restart
    4.     - m_name: vsftpd  # m_name gets passed to the execution module as "name"

    salt执行和salt state函数的区别

    你可能好奇为什么不使用service state函数而使用service执行函数,为什么salt state和salt执行函数看起来类似有很多重叠的地方。
    如果你比较salt执行函数与salt state函数的名称,如service.restart和service.running,你可能会注意到重要的区别。salt state函数设计用来只在必要的时候应用配置,没有必要时不做任何更改。salt执行函数在每次调用时都执行。
    当你调用service.running state函数时,函数首先先查看服务是否已经运行,如果没有就启动,否则不做任何事情。当你调用service.restart执行函数时,始终会重启服务。

    test=True

    在目标系统应用一个salt state会发生许多更改。salt state函数提供了一个机制来测试显示在运行期间将会做怎样的变更。

    1. sudo salt 'minion1' state.apply examples test=True
    标签:SaltStack 发布于:2019-11-20 15:13:57