美文网首页
(三)、通过state模块定义主机状态

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

作者: w也不知道 | 来源:发表于2017-10-24 21:05 被阅读0次

    一、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状态模块部署结果

    相关文章

      网友评论

          本文标题:(三)、通过state模块定义主机状态

          本文链接:https://www.haomeiwen.com/subject/fagtpxtx.html