SaltStack配置管理–状态间的关系

文章目录

[隐藏]

  • 1、include的引用
  • 2、extend的使用
  • 3、require和require_in的使用
  • 4、watch和watch_in的使用
  • 5、unless:状态间的条件判断
1、include的引用

需求场景:用于含有多个SLS的状态,使用include可以进行多个状态的组合

[root@linux-node1 prod]# pwd  /srv/salt/prod  [root@linux-node1 prod]# vim lamp.sls  include:    - apache.init    - php.init    - mysql.init  [root@linux-node1 prod]# vim ../base/top.sls  prod:    'linux-node1.example.com':      - lamp  [root@linux-node1 prod]# salt -S "192.168.56.11" state.highstate  linux-node1.example.com:  ----------            ID: apache-install      Function: pkg.installed          Name: httpd        Result: True       Comment: All specified packages are already installed       Started: 09:29:20.324067      Duration: 984.864 ms       Changes:  ----------            ID: apache-config      Function: file.managed          Name: /etc/httpd/conf/httpd.conf        Result: True       Comment: File /etc/httpd/conf/httpd.conf is in the correct state       Started: 09:29:21.311111      Duration: 50.95 ms       Changes:  ----------            ID: apache-service      Function: service.running          Name: httpd        Result: True       Comment: The service httpd is already running       Started: 09:29:21.362769      Duration: 52.404 ms       Changes:  ----------            ID: php-install      Function: pkg.installed        Result: True       Comment: All specified packages are already installed       Started: 09:29:21.415555      Duration: 0.693 ms       Changes:  ----------            ID: php-config      Function: file.managed          Name: /etc/php.ini        Result: True       Comment: File /etc/php.ini is in the correct state       Started: 09:29:21.416438      Duration: 15.578 ms       Changes:  ----------            ID: mysql-install      Function: pkg.installed        Result: True       Comment: All specified packages are already installed       Started: 09:29:21.432162      Duration: 0.542 ms       Changes:  ----------            ID: mysql-config      Function: file.managed          Name: /etc/my.cnf        Result: True       Comment: File /etc/my.cnf is in the correct state       Started: 09:29:21.432807      Duration: 38.858 ms       Changes:  ----------            ID: mysql-service      Function: service.running          Name: mariadb        Result: True       Comment: The service mariadb is already running       Started: 09:29:21.471799      Duration: 38.431 ms       Changes:    Summary for linux-node1.example.com  ------------  Succeeded: 8  Failed:    0  ------------  Total states run:     8  Total run time:   1.182 s  
2、extend的使用

需求场景:软件包安装的时候,需求假设:只在node1上按装php-mbstring包,其他的机器不安装。

[root@linux-node1 prod]# pwd  /srv/salt/prod  [root@linux-node1 prod]# vim lamp.sls  include:    - apache.init    - php.init    - mysql.init    extend:    php-install:      pkg.installed:        - name: php-mbstring  [root@linux-node1 prod]# salt -S "192.168.56.11" state.highstate  
3、require和require_in的使用

require:我依赖谁
require_in:我被谁依赖
需求场景:如果安装不成功或者配置httpd不成功,不启动httpd

(1)require使用  [root@linux-node1 apache]# pwd  /srv/salt/prod/apache  [root@linux-node1 apache]# systemctl stop httpd  [root@linux-node1 apache]# vim init_require.sls  apache-install:    pkg.installed:      - name: httpd    apache-config:    file.managed:      - name: /etc/httpd/conf/httpd.conf      - source: salt://apache/files/httpd1.conf----->将此处的文件改错,模拟配置错误      - user: root      - group: root      - mode: 644    apache-service:    service.running:      - name: httpd      - enable: True      - require:---------------------------->使用require,表示依赖        - pkg: apache-install--------------->依赖的状态模块为pkg模块,id为apache-install        - file: apache-config--------------->依赖的状态模块为file模块,id为apache-config  [root@linux-node1 apache]# salt -S "192.168.56.11" state.highstate   #执行模块提示会有报错,此时httpd不会正常启动  ......  ----------            ID: apache-config      Function: file.managed          Name: /etc/httpd/conf/httpd.conf        Result: False       Comment: Source file salt://apache/files/httpd1.conf not found       Started: 09:48:33.459243      Duration: 40.414 ms       Changes:  ----------            ID: apache-service      Function: service.running          Name: httpd        Result: False       Comment: One or more requisite failed: apache.init.apache-config       Changes:  ----------  ......  Summary for linux-node1.example.com  ------------  Succeeded: 6  Failed:    2  ------------  Total states run:     8  Total run time:   1.110 s  [root@linux-node1 apache]# systemctl status httpd  ● httpd.service - The Apache HTTP Server     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)     Active: inactive (dead) since Sat 2018-01-20 09:44:04 CST; 4min 59s ago       Docs: man:httpd(8)             man:apachectl(8)    Process: 65439 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)   Main PID: 1025 (code=exited, status=0/SUCCESS)     Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"    Jan 17 10:41:59 linux-node1 systemd[1]: Starting The Apache HTTP Server...  Jan 17 10:42:02 linux-node1 systemd[1]: Started The Apache HTTP Server.  Jan 18 03:49:02 linux-node1 systemd[1]: Reloaded The Apache HTTP Server.  Jan 20 09:43:53 linux-node1 systemd[1]: Stopping The Apache HTTP Server...  Jan 20 09:44:04 linux-node1 systemd[1]: Stopped The Apache HTTP Server.      (2)require_in使用  [root@linux-node1 apache]# vim init_require_in.sls  apache-install:    pkg.installed:      - name: httpd      - require_in:------------------>被依赖        - service: apache-service---->被依赖的模块是service,id为apache-service    apache-config:    file.managed:      - name: /etc/httpd/conf/httpd.conf      - source: salt://apache/files/httpd.conf      - user: root      - group: root      - mode: 644      - require_in:        - service: apache-service    apache-service:    service.running:      - name: httpd      - enable: True    解释说明:require和require_in都能实现依赖的功能,主动和被动的关系不同  
4、watch和watch_in的使用

需求场景:监控配置文件变动,重启服务或重载服务

[root@linux-node1 apache]# pwd  /srv/salt/prod/apache  [root@linux-node1 apache]# vim init_watch.sls  apache-install:    pkg.installed:      - name: httpd    apache-config:    file.managed:      - name: /etc/httpd/conf/httpd.conf      - source: salt://apache/files/httpd.conf      - user: root      - group: root      - mode: 644    apache-service:    service.running:      - name: httpd      - enable: True      - watch:---------------------->使用watch        - file: apache-config------->监控的模块为file,id为apache-config  [root@linux-node1 apache]# vim files/httpd.conf   #随意修改配置文件  [root@linux-node1 apache]# salt -S "192.168.56.11" state.highstate  ......  ----------            ID: apache-config      Function: file.managed          Name: /etc/httpd/conf/httpd.conf        Result: True       Comment: File /etc/httpd/conf/httpd.conf updated       Started: 10:07:14.430189      Duration: 55.133 ms       Changes:                ----------                diff:                    ---                    +++                    @@ -1,4 +1,5 @@                     #                    +#hahahaaha--------------->检测到配置文件增加的内容                     #hahahaaha                     # This is the main Apache HTTP server configuration file.  It contains the                     # configuration directives that give the server its instructions.  ----------            ID: apache-service      Function: service.running          Name: httpd        Result: True       Comment: Service restarted---------------------->将服务重启       Started: 10:07:14.533852      Duration: 1219.798 ms       Changes:                ----------                httpd:                    True  ......    #增加reload参数,让服务重载  [root@linux-node1 apache]# vim init_watch.sls  apache-install:    pkg.installed:      - name: httpd    apache-config:    file.managed:      - name: /etc/httpd/conf/httpd.conf      - source: salt://apache/files/httpd.conf      - user: root      - group: root      - mode: 644    apache-service:    service.running:      - name: httpd      - enable: True      - reload: True----------------------------------->增加参数重载      - watch:        - file: apache-config    [root@linux-node1 apache]# salt -S "192.168.56.11" state.highstate  ----------            ID: apache-config      Function: file.managed          Name: /etc/httpd/conf/httpd.conf        Result: True       Comment: File /etc/httpd/conf/httpd.conf updated------>检测文件有变化       Started: 10:10:08.493557      Duration: 53.016 ms       Changes:                ----------                diff:                    ---                    +++                    @@ -1,4 +1,5 @@                     #                    +#hahahaaha                     #hahahaaha                     #hahahaaha                     # This is the main Apache HTTP server configuration file.  It contains the  ----------            ID: apache-service      Function: service.running          Name: httpd        Result: True       Comment: Service reloaded---------------->服务重载       Started: 10:10:08.596434      Duration: 158.753 ms       Changes:                ----------                httpd:                    True  ----------  #watch_in的使用和require_in是一样的  
5、unless:状态间的条件判断

需求场景:给apache的admin目录进行加密登陆查看

(1)修改配置文件,添加认证功能  [root@linux-node1 apache]# vim files/httpd.conf  <Directory "/var/www/html/admin">          AllowOverride All          Order allow,deny          Allow from all          AuthType Basic          AuthName "haha"          AuthUserFile /etc/httpd/conf/htpasswd_file          Require user admin  </Directory>      (2)修改状态文件init.sls  [root@linux-node1 apache]# vim init.sls  apache-install:    pkg.installed:      - name: httpd    apache-config:    file.managed:      - name: /etc/httpd/conf/httpd.conf      - source: salt://apache/files/httpd.conf      - user: root      - group: root      - mode: 644    apache-auth:    pkg.installed:      - name: httpd-tools    cmd.run:------>使用cmd模块的run方法      - name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin---->生成密码文件      - unless: test -f /etc/httpd/conf/htpasswd_file---->unless判断条件,test -f判断为假则执行。即htpasswd文件如果不存在就执行生成密码    apache-service:    service.running:      - name: httpd      - enable: True      - reload: True      - watch:        - file: apache-config    [root@linux-node1 apache]# salt -S "192.168.56.11" state.highstate  ......  ----------            ID: apache-auth      Function: cmd.run          Name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin        Result: True       Comment: Command "htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin" run       Started: 10:34:54.930867      Duration: 48.152 ms       Changes:                ----------                pid:                    4166                retcode:                    0                stderr:                    Adding password for user admin                stdout:  ----------            ID: apache-service      Function: service.running          Name: httpd        Result: True       Comment: Service reloaded       Started: 10:34:55.014468      Duration: 162.844 ms       Changes:                ----------                httpd:                    True  ......  

浏览器访问192.168.56.11/admin/index.html会出现密码验证

原文出处:51cto -> http://blog.51cto.com/jinlong/2063206

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。