Saltstack入门到精通教程(三):配置管理

在上一节的《Saltstack入门到精通教程(二):实验环境搭建和体验》中,我们通过实验环境的操作,熟悉了如何去写一个简单的state文件,如何在命令行去应用state文件,以及如何利用top文件去对不同的minion去应用不同的state文件。这一节我们基于这些基础进一步来探索配置管理中的更多的功能。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

state函数

书写格式

上一节中,我们简单创建了一个states的sls文件,并且用它改变了其中一个minion的配置。我们再来回顾一下我们创建的nettools.sls文件

install_network_packages:
  pkg.installed:
    - pkgs:
      - rsync
      - lftp
      - curl

这里使用的是YAML格式,是一种比JSON还要更友好的结构语句。我们将上面这6行文字大致对应到下面的这个格式里面来

ID:
  module.function:
    - name: name
    - argument: value
    - argument:
      - value1
      - value2

ID: 用来描述这个state的字符串,可以带空格和数字,但必须要唯一,后面接一个冒号。
module.function: 每一个函数调用都在ID的基础上缩进两个空格(注意不能用tab),后面接一个冒号。需要调用的state模块可以在官方state模块列表中查找到,也就是那些名字为salt.states.*的模块。例如上面这个例子用到的就是salt.states.pkg,点进去模块就会看到很多个函数。上面提到的官方文档会有函数的功能描述,参数详解和使用范例,对于大多数用户来说是够用了。如果想要查看具体的函数源码,可以到salt的github仓库查看,和states有关的模块在salt/salt/states中,这里使用的是salt/salt/states/pkg.py模块中定义的installed函数。
name:参数列表是一个list数据类型,在YAML中由短线表示每个元素,并且要缩进两个空格。name是一个比较特殊的函数参数,大多数的函数都用name来表示比较核心的参数,例如安装包函数的包名,启动进程的进程名,添加用户的用户名等。所以很少有name参数省略的情况,如果name参数省略,那么要么有别的参数代替了它的功能,或者ID被默认赋值给name。像上面这个例子,如果查阅参数详解就能看到,在pkgs这个参数存在的情况下,name可以忽略。
argument:如果参数的值只有一个,直接写到同一行即可,中间由冒号和空格隔开。如果参数也是一个list,那么参数从下一行开始,并且有两个空格的缩进,正如上面的例子所展示的那样。

几个例子

还是采用前一节搭建的测试环境。直接在本地的salt-vagrant-demo-master/saltstack/salt目录里面添加example.sls文件,vagrant会自动将其映射到saltmaster的/srv/salt目录中。通过几个例子来演示下如何去使用state的函数,具体函数不重要,主要是如何去查找函数的思路。

  • 安装软件

如同上面讲解的那样,在调用pkg.installed的时候,不仅可以用pkgs这个参数,还可以用name来表示待安装的包,只不过name后面只能接单个参数。例如

install curl:
  pkg.installed:
    - name: curl

对minion2运行一下

root@saltmaster:/srv/salt# salt minion2 state.apply example

结果如下

minion2:
----------
          ID: install curl
    Function: pkg.installed
        Name: curl
      Result: True
     Comment: All specified packages are already installed
     Started: 09:03:57.208930
    Duration: 98.343 ms
     Changes:

Summary for minion2
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1
Total run time:  98.343 ms
  • 删除软件

salt.states.pkg中查找,发现有purgedremoved两个函数。熟悉ubuntu的朋友应该知道这两者的差别,前者完全删除,后者会保留一些配置文件便于误删恢复。我们选择removed这个函数。

这里会发现函数名都是英文中的过去式,很有意思,而这也正是state的含义所在。state文件定义了一种状态,minion会针对这个状态进行自检,如果不符合这个状态就进行配置修改,如果符合就维持原状。

查看函数的说明,和installed差不多,name参数接一个包名,或者pkgs参数接一个python的list。构建example.sls文件如下

remove curl:
  pkg.removed:
    - name: curl

对minion2运行一下

root@saltmaster:/srv/salt# salt minion2 state.apply example

结果如下

minion2:
----------
          ID: remove curl
    Function: pkg.removed
        Name: curl
      Result: True
     Comment: All targeted packages were removed.
     Started: 10:20:15.377807
    Duration: 5715.589 ms
     Changes:
              ----------
              curl:
                  ----------
                  new:
                  old:
                      7.58.0-2ubuntu3.8
              pollinate:
                  ----------
                  new:
                  old:
                      4.33-0ubuntu1~18.04.1
              ubuntu-server:
                  ----------
                  new:
                  old:
                      1.417.3

Summary for minion2
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   5.716 s
  • 创建目录

在上面的函数列表中并没有发现salt.states.directory这个模块,但是找到了salt.states.file。阅读模块说明发现这个模块不仅可以针对文件,也可以对目录进行操作。

SALT.STATES.FILE
OPERATIONS ON REGULAR FILES, SPECIAL FILES, DIRECTORIES, AND SYMLINKS

发现了其中的salt.states.file.directory函数,刚好就是我们所需要的创建文件夹的功能。如果文件夹不存在就创

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值