(三)、通过state模块定义主机状态

一、state和之前执行模块的区别

执行模块是过程式的,而状态模块是描述式的。当连续几次调用同一个执行模块时,实际上是执行相同的逻辑和指令。状态模块则恰恰相反,它们只执行必要的工作,在目标minion上创建根据描述文件指定的状态。

连续执行 pkg.install
连续执行 state配置
# /srv/salt/vsftpd.sls
install_vsftpd:
    pkg.installed:
        - name: vsftpd

从上面的例子上可以看到 pkg.install 只是运行了 yum install vsftpd -y 的命令,而 state 模块会先判断 vsftpd 软件是否已经安装了,如果没有安装就进行安装操作,如果已经安装过了就什么都不做。所有的状态描述都会遵循这个原则,只有在检测到真实状态和所需状态不同的时候才会执行功能。

二、state模块的语法

SLS配置文件使用YAML语言描述,主要有以下规则:

  • 1、缩进:YAML使用了固定的缩进风格来表示数据层级的关系(和Python用缩进来进行流程控制一样),每个缩进级别可以使用2个或者4个空格(不要用制表符)
  • 2、冒号:字典中的keys在YAML中的表现形式是一个以冒号结尾的字符串,value的表现形式是冒号后面空一格然后写value
key: value

在python中,上面的将映射为下面的字典

{'key': 'value'}
  • 3、短横杠:用一个短横杠加一个空格来表示列表项,多个项使用同一个缩进级别作为同一列表的一部分。
my_list:
  - value_one
  - value_two
  - vlaue_three

在python中,上面的将映射为下面的结构

{'my_list':['value_one','value_two','value_three']}

三、常用状态模块的语法

先介绍两个命令

salt '*' sys.list_state_functions #查看可用的状态模块

salt '*' sys.list_state_functions pkg #查看状态模块中可用的函数
  1. cmd 和 archive 状态模块常用函数
extract_myapp:
    archive.extracted:
        - name: /usr/src #解压文件在minion上的位置

        # 解压zip文件
        # - use_cmd_unzip: True
        # - source: salt://src/nginx-1.12.1.zip #要解压的文件的位置
        
        - source: salt://src/nginx-1.12.2.tar.gz #要解压的文件的位置
        - user: root
        - group: root
        - if_missing: /usr/src/nginx-1.12.2
cmd_test:
    cmd.run:
        - cwd: /usr/src #执行命令的目录
        - name: pwd && date #多条命令一定要用&&,不要一条一条执行
  1. file 状态模块的常用函数
# file.managed: 下发文件到指定minion,确保文件存在
/usr/src/vsftpd.sls: # 发送到minion上的位置
    file.managed:
        - source:
            - salt://vsftpd.sls
        - user: root
        - group: root
        - mode: 644

# file.directory: 在指定minion上创建文件夹
/tmp/mk_salt:
    file.directory:
        - user: root
        - group: root
        - mode: 755
        - makedirs: True

# file.recurse: 下发整个目录
/root/httpd: #发送到minion上的目录位置
    file.recurse:
        - source: salt://service/httpd
        - include_empty: True
# file.symlink: 建立软连接
/tmp/test: # 链接文件位置
    file.symlink:
        - target: /root/httpd/test # 源文件位置
  1. pkg 状态模块的常用函数
install_vsftpd:
    pkg.installed: # yum安装软件
        - pkgs:
            - vsftpd
            - ftp
            - lftp
        - sources: #指定rpm包的位置
            - httpd: salt://rpm/httpd.rpm
  1. service 状态模块常用函数
run_vsftpd:
    service.running:
        - name: vsftpd #启动的服务名
        - enable: True #是否开机自启
        - reload: True
  1. cron 状态模块常用函数
netdate times.aliyun.com &>/dev/null:
    cron.present:
        - user: root
        - minute: '6'
        - hour: '5'
        - daymonth: '6'
        - month: '12'
        - dayweek: 5
  1. user 状态模块常用函数
add_user:
    user.present:
        - name: hong #要添加的用户名
        - fullname: This is test user #用户说明信息
        - shell: /bin/zsh
        - createhome: True # 创建家目录,False时不创建
        - password: $1$f7Mff5j4$H/10mh4IkqgY9y39EKHTj1 # 用户密码,用 openssl passwd -l '密码' 命令来生成
        - groups: # 用户附加组
            - root
            - daemon
  1. 使用 require 和 watch 进行排序控制
      require:只有以来的步骤操作成功后才开始进行本步骤
      watch:一旦检测到 vsftpd.conf 文件发生变化,就重新加载 vsftpd 服务
install_vsftpd:
    pkg.installed:
        - pkgs:
            - vsftpd
            - ftp
            - lftp

run_vsftpd:
    service.running:
        - name: vsftpd #启动的服务名
        - enable: True #是否开机自启
        - reload: True
        - require:
            - pkg: install_vsftpd
        - watch:
            - file: vsftpd_conf 

vsftpd_conf:
    file.managed:
        - name: /etc/vsftpd/vsftpd.conf
        - source: salt://vsftpd.conf
        - user: root
        - group: root
        - mode: 600

四、使用状态模块yum安装 LAMP 环境

apache_install:
    pkg.installed:
        - name: httpd

mysql_install:
    pkg.installed:
        - pkgs:
            - mysql-server
            - mysql
            - mysql-devel

php_install:
    pkg.installed:
        - pkgs:
            - php
            - php-common
            - php-gd
            - php-mbstring
            - php-mcrypt
            - php-devel
            - php-xml
            - php-soap
        - require:
            - pkg: apache_install


httpd_conf:
    file.managed:
        - name: /etc/httpd/conf/httpd.conf
        - source: salt://httpd.conf
        - user: root
        - group: root
        - mode: 644
        - require:
            - pkg: apache_install

php_conf:
    file.managed:
        - name: /etc/php.ini
        - source: salt://php.ini
        - user: root
        - group: root
        - mode: 644
        - require:
            - pkg: php_install

mysql_conf:
    file.managed:
        - name: /etc/my.cnf
        - source: salt://my.cnf
        - user: root
        - group: root
        - mode: 644
        - require:
            - pkg: mysql_install

apache_run:
    service.running:
        - name: httpd
        - enable: True
        - reload: True
        - require:
            - pkg: apache_install
        - watch:
            - file: httpd_conf
            - file: php_conf

mysql_run:
    service.running:
        - name: mysqld
        - enable: True
        - reload: True
        - require:
            - pkg: mysql_install
        - watch:
            - file: mysql_conf
LAMP状态模块部署结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 学习地址[http://tech.mainwise.cn/?p=438] 更新于 3.25 23:16 salt简...
    J书越来越垃圾了阅读 30,757评论 9 36
  • 什么是state模块? 远程执行是salt的核心所在。 管理员可与通过执行远程执行模块,达到对minion的控制(...
    风逍H阅读 882评论 0 0
  • ###### Ansible总结 ##### 运维工作: 系统安装(物理机、虚拟机)-->程序包安装、配置、服务启...
    二郎5阅读 1,953评论 0 4
  • 作为背锅侠运维工作的基本流程 运维工具的分类 : ansible的模块化: ansible密钥登陆 ansible...
    二郎5阅读 4,075评论 0 10