设为首页 收藏本站
查看: 881|回复: 0

[经验分享] SaltStack部署服务及配置管理apache+php-第二篇

[复制链接]

尚未签到

发表于 2018-1-3 21:35:58 | 显示全部楼层 |阅读模式
实验目标
  1.使用SaltStack部署apache和php,
  2.使用salt管理httpd.conf配置文件配置访问info.php使用账户密码
  3.在salt里面增加对conf.d目录进行配置管理
  4.如何使用salt在追加文件内容
  5.学会如何使用 watch require unless

实现步骤

修改master的配置文件,指定base环境路径,base环境是必须指定的
  

[iyunv@linux-node1 base]# grep  -9  ^file_roots /etc/salt/master  |grep -v ^#  
file_roots:
  
base:
  

- /srv/salt/base  
dev:
  

- /srv/salt/dev  
test:
  

- /srv/salt/test  
prod:
  

- /srv/salt/prod  


创建目录
  

[iyunv@linux-node1 base]# mkdir -p /srv/salt/{base,dev,test,prod}  
[iyunv@linux
-node1 base]# tree /srv/salt/  
/srv/salt/
  
├── base
  
├── dev
  
├── prod
  
└── test
  


重启master
  

[iyunv@linux-node1 base]# systemctl restart salt-master  


在base目录下面创建一个web目录用于存放web相关的sls文件
  

[iyunv@linux-node1 base]# mkdir -p web  


cd到bash/web目录里面创建apache.sls文件
  

[iyunv@linux-node1 base]# cd web/  
[iyunv@linux
-node1 web]# cat apache.sls  
apache
-install:   #id 名字自己取 需要形象一点, 一个id下面一个状态只能出现一次  
pkg.installed:  #pkg 是状态模块,installed 是模块里面的方法
  

- name: httpd #方法里面的参数  
apache
-service:  
service.running:
  

- name: httpd  

- enable: True #设置开机自动启动  #yaml里面格式有严格的要求,注释用#号,不能有table,- 两边需要空格,缩进用2个空格层级关系后面要加分号
  


执行状态模块部署服务
  

[iyunv@linux-node1 base]# salt "linux-node2*" state.sls apache  
linux
-node2.example.com:  

----------  
ID: apache
-install  
Function: pkg.installed
  
Name: httpd
  
Result: True
  
Comment: Package httpd is already installed.
  
Started:
14:58:09.228934  
Duration:
633.681 ms  
Changes:
  

----------  
ID: apache
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is running
  
Started:
14:58:09.863302  
Duration:
310.567 ms  
Changes:
  

----------  
httpd:
  
True
  

  
Summary
  

------------  
Succeeded:
2 (changed=1)  
Failed:
0  
------------
  
Total states run:     2
  #此时node2 上面已经部署好了apache
  


高级状态的使用 需要在master配置文件里面打开 state_top: top.sls并重启master
[iyunv@linux-node1 web]# grep -n ^state_top /etc/salt/master

  329:state_top: top.sls
[iyunv@linux-node1 web]# systemctl restart salt-master


在bese环境目录下面添加top.sls
  

[iyunv@linux-node1 base]# more top.sls  
base:
  

'linux-node2.example.com':  

- web.apache  

'linux-node1.example.com':  

- web.apache  
[iyunv@linux
-node1 base]# pwd  
/srv/salt/base
  


执行高级模块方法,高级方法到 base下面找top.sls  文件编排告诉每个minion需要干什么,一般生产环境用高级状态多些
  

[iyunv@linux-node1 base]#   salt "*" state.highstate  
linux
-node1.example.com:  

----------  
ID: apache
-install  
Function: pkg.installed
  
Name: httpd
  
Result: True
  
Comment: Package httpd is already installed.
  
Started:
15:23:08.597951  
Duration:
709.521 ms  
Changes:
  

----------  
ID: apache
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is
in the desired state  
Started:
15:23:09.308417  
Duration:
233.623 ms  
Changes:
  

  
Summary
  

------------  
Succeeded:
2  
Failed:
0  
------------
  
Total states run:     2
  
linux-node2.example.com:
  
----------
  
ID: apache-install
  
Function: pkg.installed
  
Name: httpd
  
Result: True
  
Comment: Package httpd is already installed.
  
Started: 15:23:09.171596
  
Duration: 721.901 ms
  
Changes:
  
----------
  
ID: apache-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is in the desired state
  
Started: 15:23:09.894209
  
Duration: 221.615 ms
  
Changes:
  

  
Summary
  
------------
  
Succeeded: 2
  
Failed:    0
  
------------
  
Total states run:     2
  


上面我们使用了2个状态模块pkg和service,下面我们使用file文件配置模块
  模块使用参考文档
  

https://www.unixhot.com/docs/saltstack/ref/states/all/salt.states.file.html#module-salt.states.file   


在base/web目录下面添加一个lamp.sls,一般在添加里面的内容之前需要在外面找一台服务器进行测试拿到准确的包信息后再进行配置
[iyunv@linux-node1 web]# cat lamp.sls

  lamp-install:
  pkg.installed:
  - pkgs:
  - httpd
  - php
  - php-pdo
  - php-mysql
  apache-config:
  file.managed:
  - name: /etc/httpd/conf/httpd.conf #服务实际使用的文件路径
  - source: salt://web/files/httpd.conf #salt的源文件用于分发到minion上面 路径是base目录下面的web 这里也支持http和ftp方式
  - user: root
  - group: root
  - mode: 644
  php-config:
  file.managed:
  - name: /etc/php.ini
  - source: salt://web/files/php.ini
  - user: root
  - group: root
  - mode: 644
  lamp-service:
  service.running:
  - name: httpd
  - enable: True

拷贝源文件到base/web目录下,这个根据自己的实际情况找源文件拷贝过来
[iyunv@linux-node1 web]# cp /etc/httpd/conf/httpd.conf /srv/salt/base/web/files/

[iyunv@linux-node1 web]# cp /etc/php.ini /srv/salt/base/web/files/


执行状态模块部署服务
  

[iyunv@linux-node1 web]# salt "*" state.sls web.lamp  
linux
-node1.example.com:  

----------  
ID: lamp
-install  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started:
15:43:56.883540  
Duration:
633.814 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:
15:43:57.520199  
Duration:
4.242 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:
15:43:57.524589  
Duration:
4.149 ms  
Changes:
  

----------  
ID: lamp
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is
in the desired state  
Started:
15:43:57.529404  
Duration:
258.952 ms  
Changes:
  

  
Summary
  

------------  
Succeeded:
4  
Failed:
0  
------------
  
Total states run:     4
  
linux-node2.example.com:
  
----------
  
ID: lamp-install
  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started: 15:43:58.566172
  
Duration: 611.409 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: 15:43:59.180091
  
Duration: 4.063 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: 15:43:59.184248
  
Duration: 3.803 ms
  
Changes:
  
----------
  
ID: lamp-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is in the desired state
  
Started: 15:43:59.188496
  
Duration: 208.1 ms
  
Changes:
  

  
Summary
  
------------
  
Succeeded: 4
  
Failed:    0
  
------------
  
Total states run:     4
  


使用file模块下面的recurse方法进行apache的conf.d目录管理配置如下
  

apache-conf:  

file.recurse:  

- name: /etc/httpd/conf.d  

- source: salt://web/files/apache-conf.d  


创建salt源目录,并拷贝数据导源文件目录,数据文件来源根据自己业务的实际情况
  

[iyunv@linux-node1 ~]# mkdir /srv/salt/base/web/files/apache-conf.d  
[iyunv@linux
-node1 ~]# cd /srv/salt/base/web/files/apache-conf.d/  
[iyunv@linux
-node1 apache-conf.d]# cp -a /etc/httpd/conf.d/* .  
[iyunv@linux-node1 apache-conf.d]# ls
  
autoindex.conf php.conf README userdir.conf welcome.conf
  
[iyunv@linux-node1 apache-conf.d]#
  

  测试在files/apache-conf.d/welcome.conf 添加一行#xiewenming test
  

[iyunv@linux-node1 files]# echo "#xieweming test" >> apache-conf.d/welcome.conf   


验证目录管理是否生效
  可以先使用test=True 只做测试,不会在minion节点上面真正执行,确认无问题后再让minion去执行
  

[iyunv@linux-node1 files]# salt "linux-node2*" state.highstate test=True  
linux
-node2.example.com:  

----------  
ID: lamp
-install  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started:
16:12:56.440265  
Duration:
666.288 ms  
Changes:
  

----------  
ID: apache
-config  
Function:
file.managed  
Name:
/etc/httpd/conf/httpd.conf  
Result: True
  
Comment: The
file /etc/httpd/conf/httpd.conf is in the correct state  
Started:
16:12:57.108448  
Duration:
3.959 ms  
Changes:
  

----------  
ID: php
-config  
Function:
file.managed  
Name:
/etc/php.ini  
Result: True
  
Comment: The
file /etc/php.ini is in the correct state  
Started:
16:12:57.112503  
Duration:
3.61 ms  
Changes:
  

----------  
ID: lamp
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is
in the desired state  
Started:
16:12:57.116505  
Duration:
244.585 ms  
Changes:
  

----------  
ID: apache
-conf  
Function:
file.recurse  
Name:
/etc/httpd/conf.d  
Result: None
  
Comment: ####
/etc/httpd/conf.d/welcome.conf ####  
The
file /etc/httpd/conf.d/welcome.conf is set to be changed  
Started:
16:12:57.361390  
Duration:
1096.52 ms  
Changes:
  

----------  
/etc/httpd/conf.d/welcome.conf:
  
----------
  
diff:
  
---
  
+++
  
@@ -20,3 +20,4 @@
  
Alias /noindex/css/open-sans.css /usr/share/httpd/noindex/css/open-sans.css
  
Alias /images/apache_pb.gif /usr/share/httpd/noindex/images/apache_pb.gif
  
Alias /images/poweredby.png /usr/share/httpd/noindex/images/poweredby.png
  
+#xieweming test
  

  
Summary
  
------------
  
Succeeded: 5 (unchanged=1, changed=1)
  
Failed:    0
  
------------
  
Total states run:     5
  


验证没有问题在node1和node2上面都执行
  我们这里就2台所有可以直接用*

  

[iyunv@linux-node1 files]# salt "*" state.highstate  
linux
-node1.example.com:  

----------  
ID: lamp
-install  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started:
16:19:31.724191  
Duration:
782.903 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:
16:19:32.509438  
Duration:
4.62 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:
16:19:32.514200  
Duration:
4.418 ms  
Changes:
  

----------  
ID: lamp
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is
in the desired state  
Started:
16:19:32.519273  
Duration:
234.566 ms  
Changes:
  

----------  
ID: apache
-conf  
Function:
file.recurse  
Name:
/etc/httpd/conf.d  
Result: True
  
Comment: Recursively updated
/etc/httpd/conf.d  
Started:
16:19:32.754002  
Duration:
1082.389 ms  
Changes:
  

----------  
/etc/httpd/conf.d/welcome.conf:
  
----------
  
diff:
  
---
  
+++
  
@@ -20,3 +20,4 @@
  
Alias /noindex/css/open-sans.css /usr/share/httpd/noindex/css/open-sans.css
  
Alias /images/apache_pb.gif /usr/share/httpd/noindex/images/apache_pb.gif
  
Alias /images/poweredby.png /usr/share/httpd/noindex/images/poweredby.png
  
+#xieweming test
  

  
Summary
  
------------
  
Succeeded: 5 (changed=1)
  
Failed:    0
  
------------
  
Total states run:     5
  
linux-node2.example.com:
  
----------
  
ID: lamp-install
  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started: 16:19:32.296865
  
Duration: 789.23 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: 16:19:33.089019
  
Duration: 3.807 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: 16:19:33.092933
  
Duration: 3.459 ms
  
Changes:
  
----------
  
ID: lamp-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is in the desired state
  
Started: 16:19:33.096823
  
Duration: 232.349 ms
  
Changes:
  
----------
  
ID: apache-conf
  
Function: file.recurse
  
Name: /etc/httpd/conf.d
  
Result: True
  
Comment: Recursively updated /etc/httpd/conf.d
  
Started: 16:19:33.329410
  
Duration: 1079.801 ms
  
Changes:
  
----------
  
/etc/httpd/conf.d/welcome.conf:
  
----------
  
diff:
  
---
  
+++
  
@@ -20,3 +20,4 @@
  
Alias /noindex/css/open-sans.css /usr/share/httpd/noindex/css/open-sans.css
  
Alias /images/apache_pb.gif /usr/share/httpd/noindex/images/apache_pb.gif
  
Alias /images/poweredby.png /usr/share/httpd/noindex/images/poweredby.png
  
+#xieweming test
  

  
Summary
  
------------
  
Succeeded: 5 (changed=1)
  
Failed:    0
  
------------
  
Total states run:     5
  


salt "*" state.highstate
使用watch在apache配置文件发送变化时,重新加载apache配置
  增加下面的红色字体部分
  

[iyunv@linux-node1 web]# more lamp.sls  
lamp
-install:  
pkg.installed:
  

- pkgs:  

- httpd  

- php  

- php-pdo  

- php-mysql  

  
apache
-config:  

file.managed:  

- name: /etc/httpd/conf/httpd.conf  

- source: salt://web/files/httpd.conf  
- user: root
  
- group: root
  
- mode: 644
  

  
php-config:
  
file.managed:
  
- name: /etc/php.ini
  
- source: salt://web/files/php.ini
  
- user: root
  
- group: root
  
- mode: 644
  

  
lamp-service:
  
service.running:
  
- name: httpd
  
- enable: True
  
->  
- watch: #增加
  
- file: apache-config #监控上面的apache-config>  

apache-conf:  

file.recurse:  

- name: /etc/httpd/conf.d  

- source: salt://web/files/apache-conf.d  

  另外一种watc_in写法,我们只需要掌握一种就可以


  

...  
lamp
-service:  
service.running:
  

- name: httpd  

- enable: True  

->

- watch:  

- file: apache-config  
apache
-conf:  

file.recurse:  

- name: /etc/httpd/conf.d  

- source: salt://web/files/apache-conf.d  
- watch_in:
  
- service: lamp-service
  
...
  


View Code  修改一下配置文件进行验证成功

  

[iyunv@linux-node1 files]# salt "*" state.highstate  
linux
-node1.example.com:  

----------  
ID: lamp
-install  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started:
16:39:08.336027  
Duration:
733.712 ms  
Changes:
  

----------  
ID: apache
-config  
Function:
file.managed  
Name:
/etc/httpd/conf/httpd.conf  
Result: True
  
Comment: File
/etc/httpd/conf/httpd.conf updated  
Started:
16:39:09.071795  
Duration:
13.576 ms  
Changes:
  

----------  
diff:
  
---
  
+++
  
@@ -28,6 +28,7 @@
  
# same ServerRoot for multiple httpd daemons, you will need to change at
  
# least PidFile.
  
#
  
+
  
ServerRoot "/etc/httpd"
  

  
#
  
----------
  
ID: php-config
  
Function: file.managed
  
Name: /etc/php.ini
  
Result: True
  
Comment: File /etc/php.ini is in the correct state
  
Started: 16:39:09.085478
  
Duration: 3.597 ms
  
Changes:
  
----------
  
ID: lamp-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service>  
Started: 16:39:09.337223
  
Duration: 253.101 ms
  
Changes:
  
----------
  
httpd:
  
True
  
----------
  
ID: apache-conf
  
Function: file.recurse
  
Name: /etc/httpd/conf.d
  
Result: True
  
Comment: The directory /etc/httpd/conf.d is in the correct state
  
Started: 16:39:09.590622
  
Duration: 25.654 ms
  
Changes:
  

  
Summary
  
------------
  
Succeeded: 5 (changed=2)
  
Failed:    0
  
------------
  
Total states run:     5
  
linux-node2.example.com:
  
----------
  
ID: lamp-install
  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started: 16:39:08.904921
  
Duration: 735.305 ms
  
Changes:
  
----------
  
ID: apache-config
  
Function: file.managed
  
Name: /etc/httpd/conf/httpd.conf
  
Result: True
  
Comment: File /etc/httpd/conf/httpd.conf updated
  
Started: 16:39:09.643019
  
Duration: 16.038 ms
  
Changes:
  
----------
  
diff:
  
---
  
+++
  
@@ -28,6 +28,7 @@
  
# same ServerRoot for multiple httpd daemons, you will need to change at
  
# least PidFile.
  
#
  
+
  
ServerRoot "/etc/httpd"
  

  
#
  
----------
  
ID: php-config
  
Function: file.managed
  
Name: /etc/php.ini
  
Result: True
  
Comment: File /etc/php.ini is in the correct state
  
Started: 16:39:09.659260
  
Duration: 3.724 ms
  
Changes:
  
----------
  
ID: lamp-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service>  
Started: 16:39:09.900780
  
Duration: 255.082 ms
  
Changes:
  
----------
  
httpd:
  
True
  
----------
  
ID: apache-conf
  
Function: file.recurse
  
Name: /etc/httpd/conf.d
  
Result: True
  
Comment: The directory /etc/httpd/conf.d is in the correct state
  
Started: 16:39:10.156119
  
Duration: 165.767 ms
  
Changes:
  

  
Summary
  
------------
  
Succeeded: 5 (changed=2)
  
Failed:    0
  
------------
  
Total states run:     5
  


View Code
使用require可以让各ID之间产生依赖关系,避免无效执行
  比如执行apache-config>  

lamp-install:  
pkg.installed:
  

- pkgs:  

- httpd  

- php  

- php-pdo  

- php-mysql  

  
apache
-config:  

file.managed:  

- name: /etc/httpd/conf/httpd.conf  

- source: salt://web/files/httpd.conf  
- user: root
  
- group: root
  
- mode: 644
  
    - require:
  
- pkg: lamp-install
  


测试apache php环境工作是否正常,在2个节点上的apache工作目录下创建phpinfo文件
  

[iyunv@linux-node2 conf.d]# cd /var/www/html/  
[iyunv@linux
-node2 html]# mkdir admin  
[iyunv@linux
-node2 html]# cd admin/  
[iyunv@linux
-node2 admin]# vi info.php  
[iyunv@linux
-node2 admin]# cat info.php  

<?php  
phpinfo()
  

?>  

  可以正常打开


现在使用salt添加访问phpinfo需要账号密码
  在salt的apache的配置管理文件里面添加验证 如下红色字体部分
[iyunv@linux-node1 files]# pwd

  /srv/salt/base/web/files
[iyunv@linux-node1 files]#

[iyunv@linux-node1 files]# tail -15 httpd.conf

  #EnableMMAP off
  EnableSendfile on
  <Directory "/var/www/html/admin">
  AllowOverride All
  Order allow,deny
  Allow from All
  AuthUserFile  /etc/httpd/conf/htpasswd_file
  AuthName "hehe"
  AuthType Basic
  Require user admin
  </Directory>
  # Supplemental configuration
  #
  # Load config files in the "/etc/httpd/conf.d" directory, if any.
  IncludeOptional conf.d/*.conf

在lamp.sls 里面添加一个名为apache-auth 状态ID并使用require指定依赖关系
  

[iyunv@linux-node1 web]# pwd  
/srv/salt/base/web
  
[iyunv@linux-node1 web]# ls
  
apache.sls  files  lamp.sls
  
[iyunv@linux-node1 web]# tail -10 lamp.sls
  
- name: /etc/httpd/conf.d
  
- source: salt://web/files/apache-conf.d
  

  
apache-auth:
  
pkg.installed:
  
- name: httpd-tools
  
- require_in:
  
- cmd: apache-auth   #如果没有这个rpm包下面的cmd.run就不运行,指定依赖关系
  
cmd.run:
  
- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin #创建 账号为admin 密码为admin的密码文件
  

  执行状态模块,验证没有报错


  

[iyunv@linux-node1 web]# salt "*" state.highstate  
linux
-node1.example.com:  

----------  
ID: lamp
-install  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started:
17:26:36.171081  
Duration:
760.101 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:
17:26:36.936510  
Duration:
12.034 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:
17:26:36.948778  
Duration:
5.661 ms  
Changes:
  

----------  
ID: lamp
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is
in the desired state  
Started:
17:26:36.955341  
Duration:
335.213 ms  
Changes:
  

----------  
ID: apache
-conf  
Function:
file.recurse  
Name:
/etc/httpd/conf.d  
Result: True
  
Comment: The directory
/etc/httpd/conf.d is in the correct state  
Started:
17:26:37.290804  
Duration:
26.826 ms  
Changes:
  

----------  
ID: apache
-auth  
Function: pkg.installed
  
Name: httpd
-tools  
Result: True
  
Comment: Package httpd
-tools is already installed.  
Started:
17:26:37.317767  
Duration:
0.518 ms  
Changes:
  

----------  
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:
17:26:37.319460  
Duration:
17.893 ms  
Changes:
  

----------  
pid:
  

20315  
retcode:
  

0  
stderr:
  
Adding password
for user admin  
stdout:
  

  
Summary
  

------------  
Succeeded:
7 (changed=1)  
Failed:
0  
------------
  
Total states run:     7
  
linux-node2.example.com:
  
----------
  
ID: lamp-install
  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started: 17:26:36.819001
  
Duration: 801.418 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: 17:26:37.625380
  
Duration: 5.27 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: 17:26:37.630775
  
Duration: 5.974 ms
  
Changes:
  
----------
  
ID: lamp-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is in the desired state
  
Started: 17:26:37.637798
  
Duration: 276.924 ms
  
Changes:
  
----------
  
ID: apache-conf
  
Function: file.recurse
  
Name: /etc/httpd/conf.d
  
Result: True
  
Comment: The directory /etc/httpd/conf.d is in the correct state
  
Started: 17:26:37.914890
  
Duration: 114.468 ms
  
Changes:
  
----------
  
ID: apache-auth
  
Function: pkg.installed
  
Name: httpd-tools
  
Result: True
  
Comment: Package httpd-tools is already installed.
  
Started: 17:26:38.029465
  
Duration: 0.858 ms
  
Changes:
  
----------
  
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: 17:26:38.031904
  
Duration: 24.688 ms
  
Changes:
  
----------
  
pid:
  
8667
  
retcode:
  
0
  
stderr:
  
Adding password for user admin
  
stdout:
  

  
Summary
  
------------
  
Succeeded: 7 (changed=1)
  
Failed:    0
  
------------
  
Total states run:     7
  


View Code  再次访问phpinfo就有验证了


但是上面有些小问题
  当多次执行apache-auth状态模块的时候,密码文件会被重新创建并覆盖
  解决办法:我们可以使用unless进行判断,unless 如果条件为真就执行,为假就不执行
  修改apache-auth状态模块如下
  

[iyunv@linux-node1 web]# tail -8 lamp.sls  
apache
-auth:  
pkg.installed:
  

- name: httpd-tools  

- require_in:  

- cmd: apache-auth   #如果没有这个rpm包下面的cmd.run就不运行,解决依赖关系  
cmd.run:
  

- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin  

- unless: test -f /etc/httpd/conf/htpasswd_file #unless 不只限于用test 支持脚本等任何命令 只要判断 期返回结果0 或者1 0为真 1为假 就可以  


再次执行lamp.sls状态模块,就解决了上面的问题


  

[iyunv@linux-node1 web]# salt "*" state.highstate  
linux
-node2.example.com:  

----------  
ID: lamp
-install  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started:
17:41:08.415429  
Duration:
739.009 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:
17:41:09.158151  
Duration:
4.038 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:
17:41:09.162303  
Duration:
4.511 ms  
Changes:
  

----------  
ID: lamp
-service  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is
in the desired state  
Started:
17:41:09.167489  
Duration:
260.979 ms  
Changes:
  

----------  
ID: apache
-conf  
Function:
file.recurse  
Name:
/etc/httpd/conf.d  
Result: True
  
Comment: The directory
/etc/httpd/conf.d is in the correct state  
Started:
17:41:09.428715  
Duration:
27.714 ms  
Changes:
  

----------  
ID: apache
-auth  
Function: pkg.installed
  
Name: httpd
-tools  
Result: True
  
Comment: Package httpd
-tools is already installed.  
Started:
17:41:09.456576  
Duration:
0.529 ms  
Changes:
  

----------  
ID: apache
-auth  
Function: cmd.run
  
Name: htpasswd
-bc /etc/httpd/conf/htpasswd_file admin admin  
Result: True
  
Comment: unless execution succeeded
  
Started:
17:41:09.458220  
Duration:
7.17 ms  
Changes:
  

  
Summary
  

------------  
Succeeded:
7  
Failed:
0  
------------
  
Total states run:     7
  
linux-node1.example.com:
  
----------
  
ID: lamp-install
  
Function: pkg.installed
  
Result: True
  
Comment: All specified packages are already installed.
  
Started: 17:41:08.069936
  
Duration: 769.874 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: 17:41:08.842186
  
Duration: 4.2 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: 17:41:08.846533
  
Duration: 4.393 ms
  
Changes:
  
----------
  
ID: lamp-service
  
Function: service.running
  
Name: httpd
  
Result: True
  
Comment: Service httpd is already enabled, and is in the desired state
  
Started: 17:41:08.851964
  
Duration: 244.197 ms
  
Changes:
  
----------
  
ID: apache-conf
  
Function: file.recurse
  
Name: /etc/httpd/conf.d
  
Result: True
  
Comment: The directory /etc/httpd/conf.d is in the correct state
  
Started: 17:41:09.096343
  
Duration: 20.85 ms
  
Changes:
  
----------
  
ID: apache-auth
  
Function: pkg.installed
  
Name: httpd-tools
  
Result: True
  
Comment: Package httpd-tools is already installed.
  
Started: 17:41:09.117331
  
Duration: 0.53 ms
  
Changes:
  
----------
  
ID: apache-auth
  
Function: cmd.run
  
Name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
  
Result: True
  
Comment: unless execution succeeded
  
Started: 17:41:09.119400
  
Duration: 6.484 ms
  
Changes:
  

  
Summary
  
------------
  
Succeeded: 7
  
Failed:    0
  
------------
  
Total states run:     7
  


View Code
base的目录结构如下
  

[iyunv@linux-node1 salt]# tree  base  
base
  
├── fileappend.sls
  
├── top.sls
  
└── web
  
├── apache.sls
  
├── files
  
│   ├── apache
-conf.d  
│   │   ├── autoindex.conf
  
│   │   ├── php.conf
  
│   │   ├── README
  
│   │   ├── userdir.conf
  
│   │   └── welcome.conf
  
│   ├── httpd.conf
  
│   └── php.ini
  
└── lamp.sls
  

  

3 directories, 11 files  


cat lamp.sls


  

[iyunv@linux-node1 base]# cat web/lamp.sls  
lamp
-install:  
pkg.installed:
  

- pkgs:  

- httpd  

- php  

- php-pdo  

- php-mysql  

  
apache
-config:  

file.managed:  

- name: /etc/httpd/conf/httpd.conf  

- source: salt://web/files/httpd.conf  
- user: root
  
- group: root
  
- mode: 644
  
- require:
  
- pkg: lamp-install
  

  
php-config:
  
file.managed:
  
- name: /etc/php.ini
  
- source: salt://web/files/php.ini
  
- user: root
  
- group: root
  
- mode: 644
  

  
lamp-service:
  
service.running:
  
- name: httpd
  
- enable: True

  
->  
- watch:
  
- file: apache-config
  

  
apache-conf:
  
file.recurse:
  
- name: /etc/httpd/conf.d
  
- source: salt://web/files/apache-conf.d
  

  
apache-auth:
  
pkg.installed:
  
- name: httpd-tools
  
- require_in:
  
- cmd: apache-auth   #如果没有这个rpm包下面的cmd.run就不运行,解决依赖关系
  
cmd.run:
  
- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
  
- unless: test -f /etc/httpd/conf/htpasswd_file
  


View Code
至此apache和php测试已完成

这里补充一个file模块的append方法
[iyunv@linux-node1 base]# pwd

  /srv/salt/base
[iyunv@linux-node1 base]# cat fileappend.sls

  /etc/profile:  #这里是ID的另一种用法,可以直接用文件的路径
  file.append:
  - text:
  - "#xiewneming test" #注意如果添加的内容里面有特殊符合,需要加上引号

执行状态模块,添加成功
  

[iyunv@linux-node1 base]# salt "linux-node1*" state.sls fileappend  
linux
-node1.example.com:  

----------  
ID:
/etc/profile  
Function:
file.append  
Result: True
  
Comment: Appended
1 lines  
Started:
17:53:02.877027  
Duration:
7.669 ms  
Changes:
  

----------  
diff:
  
---
  
+++
  
@@ -75,3 +75,4 @@
  
unset i
  
unset -f pathmunge
  
None
  
+#xiewneming test
  

  
Summary
  
------------
  
Succeeded: 1 (changed=1)
  
Failed:    0
  
------------
  
Total states run:     1
  


总结
  1.添加状态模块的时候,应该自己得先在别的机器上面跑一遍流程在添加
  2.状态模块中- source: salt://web/files/apache-conf.d #支持ftp或者http上面 base环境的路径
  3.使用的时候要先测试 test=True
  4.ID 有不同表示方式
  5.状态模块需要执行模块执行才能生效
  6.相同的业务用目录进行分类管理
  7.sls文件是从上往下按照顺序执行
  8.一个ID下面一个状态只能出现一次
  9.pkg是虚拟的包管理,在不同系统下面包的安装命令不同 比如 CentOS 和Ubuntu
  10.watch 和watch_in require和require_in 在状态模块中可以统一用其中的一种
  11.salt默认是有缓存的,可以无关紧要的配置重启进程刷新缓存
  salt任务执行过程中不删除缓存目录里面的文件 缓存目录默认为/var/cache/salt
  附 赵班长的 GitHub saltbook-code网址
  https://github.com/unixhot/saltbook-code/tree/master

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431328-1-1.html 上篇帖子: SaltStack本地管理无master模式-第八篇 下篇帖子: saltstack实战1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表