saltstack state.sls常用功能模板编写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了saltstack state.sls常用功能模板编写相关的知识,希望对你有一定的参考价值。

saltstack常用功能模块编写

 

一.简介

Master - 控制中心,salt命令运行和资源状态管理端

Minions - 需要管理的客户端机器,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息

States - 配置管理的指令集

Modules- 包含命令行下运行的指令,和在配置文件里面使用的指令模块可以的函数可以在命令行下运行

Grains - minion端的变量,静态

pillar - minion端的变量,动态,可自定义

highstate - 给minion永久添加状态,从sls配置文件读取到

salt schedule - 自动保持客户端配置

 

二.常用功能

执行命令cmd.run

Sls模板state.sls

Pillar

自定义模块

 

三.State.sls

       本文主要介绍state.sls常用基础功能写法,主要包含通过sls模板实现以下几块的管理:

  1. 1.    用户管理

  2. 2.    文件管理

  3. 3.    目录管理

  4. 4.    安装包管理

  5. 5.    计划任务

 

用户管理

用户管理分为创建和删除用户,分别对应user.present和user.absent,如下sls模板,如用户不存在,则新建用户admin和admin1,并设置相关属性:

[[email protected]]# catinit.sls

admin:

  user.present:

    - shell: /bin/bash

    - home: /home/admin

    - uid: 888

admin1:

  user.present:

- uid: 1111

如下则是删除用户

  admin:

    user.absent:

      - purge:True

      - force:True

Purge:为True指删除该用户家目录以及下面的文件,类似于userdel –r

Force:为True指即使该用户当前在线也强制删除

添加用户的模板一般用于其他sls调用,如安装mysql的sls模板可以先调用此模板新建mysql用户。如果是临时需要新建用户,直接用cmd.run即可

 

文件管理:

文件管理主要分为文件的上传和文件附加内容

文件上传管理一般通过file.managed,如下sls,即为在minion端备份gz包之后,将gz包传到minion目录/usr/local下,并设置相关属性

[[email protected]]# cat init.sls

/usr/local/nginx-2.1.2.tar.gz:

  file.managed:

    - source:salt://nginx/nginx-xxx.xxx.tar.gz

    - user: root

    - group:root

    - mode: 755

    - backup:minion

    - template:jinja

先备份在minion端的目录/var/cache/salt/minion/file_backup下,然后上传,长期使用备份目录会增大,恢复可用salt命令恢复或者直接手动考备份文件均可

 

file.append用于追加文件,如下,用于安装完jdk之后将环境变量追加入profile文件里面(假设jdk安装目录为下),用于jdk安装模块调用:

 

/etc/profile:

  file.append:

    - text:

      - "exportJAVA_HOME=/usr/local/jdk1.6.0_13"

      - "exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH"

      - "exportCLASSPATH=$JAVA_HOME/lib/:$JAVA_HOME/jre/lib:$CLASSPATH"

 

目录管理

       file.recurse将目录下的所有文件覆盖到目标minion目录,目录递归复制,类似于rsync,如果master端减少了文件,minion端默认不会删除,如下将本地conf目录的文件全部同步到线上conf,并设置相关属性

/usr/local/nginx/conf:

  file.recurse:

    -source: salt://nginx/conf

    -user: root

    -group: root

    -file_mode: 644

    -dir_mode: 755

    -template: jinja

- backup: minion

- makedirs: True

- include_empty: True

- recurse:

  - user

  - group

  - mode

 

以上模板注意空格调整成一致,一般缩进空2格

 

新建目录,如新建/web/logstash目录,并设置相关属性,一般用于其他模板调用

/web/logstash:

 file.directory:

    - user: web

    - group: web

    - file_mode:644

    - dir_mode:755

    - makedirs:True

    -include_empty: True

    - template:jinja

    - backup:minion

 

包管理

       如下,如在linux下即调用系统yum命令安装相关包,常用于初始化环境或者其他模块调用依赖包,如nginx的pcre-devel等

installpackages:

   pkg.latest:

      - pkgs:

        - aspell

        - ncurses

        - ncurses-devel

        - pcre-devel

        - telnet

        - libcurl

        - libcurl-devel

计划任务

添加计划任务salt ‘xxx‘ cron.set_job root 0 3 ‘*‘ ‘*‘ ‘*‘ "echo‘abc‘" "mytest"

删除计划任务salt ‘xxx‘ cron.rm_job root "echo ‘abc‘“

第二种方式就是写sls也可做计划任务

/usr/local/test.sh >> /var/log/test.log2>&1:

  cron.present:

   - identifier:test cron  #计划任务描述,同上面的mytest

    -user: root

       -minute: ‘0‘

 - hour: ‘4‘

 

/usr/sbin/ntpdatetime.windows.com:

  cron.present:   

    - identifier: ntpdate rsync   

    - user: root   

    - minute: ‘*/30‘

 

如下是一个完整的nginx安装模板:整个模板的功能就是讲nginx安装包通过file.managed上传到相关目录,调用cmd.run执行安装命令,调用用户管理模板新建用户,调用目录管理上传配置文件目录以及目录内部配置文件。

 

#用include调用引入外部模板,用于新建nginx需要的用户,新建用户模板见上面用户管理

include:  

  - nginx_user

#安装nginx

install_nginx:

  cmd.run:

    - name: tar -zxvf nginx-2.1.2.tar.gz&& cd nginx-2.1.2 && sh configure --prefix=/usr/local/nginx--with-http_ssl_module --with-http_stub_status_module && make&& make install

    - cwd: /usr/local  #执行上面的命令需要在此目录

    - unless: test -f/usr/local/nginx/sbin/nginx #测试nginx此文件不存在,则执行上面name后面的命令

    - require:

      - file: /usr/local/nginx-2.1.2.tar.gz  #执行之前需要先执行此模块,此模块写在下面

#上传nginx安装包模块

/usr/local/nginx-2.1.2.tar.gz:

  file.managed:

    - source: salt://nginx/nginx-2.1.2.tar.gz

    - unless: test -f /usr/local/nginx-2.1.2.tar.gz

    - user: root

    - group: root

    - mode: 755

    - template: jinja

    - require:

      - sls: nginx_user

#上传nginx配置文件模块

/usr/local/nginx/conf:

  file.recurse:

  - source: salt://nginx/conf

  - user: root

  - group: root

  - file_mode: 644

  - dir_mode: 755

  - template: jinja

  - backup: minion

  - makedirs: True

  - include_empty: True

  - recurse:

    - user

    - group

    - mode

  - require:

- cmd: install_nginx

 

注意上面用到的依赖关系和模板外部调用方法,如下,这里不做详解,可自行查询

     include

   - modulename

     require

    - file:

    - cmd:

    - sls:

 

此外还有:

变量使用

Watch用法

Pillar自定义变量

以及模块开发等,此文不做详述,后面文章可能会写到


本文出自 “运维基础” 博客,请务必保留此出处http://4169523.blog.51cto.com/4159523/1932677

以上是关于saltstack state.sls常用功能模板编写的主要内容,如果未能解决你的问题,请参考以下文章

saltstack执行state.sls耗时长的坑

saltstack/salt的state.sls和pillar定义以及使用

SaltStack 部署案例 02

saltstack之配置管理mount

ansible和saltstack简单使用

saltstack操作远程执行命令报错:“is running as PID 113257 and was started at”的解决