saltstack 實現lamp批量部署

學了三天的saltstack,今天實際配置批量部署lamp(yum 安裝)


環境: base, dev(開發環境), test(測試環境), prod(生產環境)
vim  /etc/salt/master

  1. file_roots:
  2. base:
  3.     - /srv/salt/
  4.   dev:
  5.     - /srv/salt/dev
  6.   test:
  7.     - /srv/salt/test
  8.   prod:
  9.     - /srv/salt/prod
  1. mkdir  /srv/salt/{dev,test,prod}


案例一:初始化配置
vim /srv/salt/top.sls  //內容如下
  1. base:
  2.   '*':
  3.     - init.dns    //如果寫成帶一個點的形式,那麼點前面是目錄名字,後面是sls文件名字。
  1. mkdir  init 
  2. cd init
vim dns.sls //內容
  1. /etc/resolve.conf:
  2.   file.managed:
  3.     - source: salt://init/files/resolv.conf   //說明 salt://爲當前環境(base)的主目錄(/srv/salt/)下。
  4.     - user: root
  5.     - group: root
  6.     - mode: 644

  1. mkdir /srv/salt/init/files   //在此目錄下放resolv.conf作爲模板文件
運行: salt '*' state.highstate


==================================================================

案例二: 自動化部署lamp環境

三個模塊:
pkg 安裝軟件包
file  管理配置文件
service   服務管理

思路: lamp需要安裝的軟件包有  httpd, php, mysql, mysql-server, php-mysql, php-pdo
預設:我們把這個lamp的安裝項目放到dev環境下

  1. cd /srv/salt/dev/

  1. mkdir   /srv/salt/dev/files/ (放配置文件)

  1. vim /srv/salt/dev/lamp.sls 

 //lamp配置文件如下:
  1. #包安裝ID
  2. lamp-pkg-install:
  3. pkg.installed:
  4.     - names:
  5.       - php
  6.       - mysql
  7.       - php-cli
  8.       - php-common
  9.       - php-mysql
  10.       - php-pdo
  11. #apache ID
  12. apache-service:
  13.   pkg.installed:
  14.     - name: httpd
  15.   file.managed:
  16.     - name: /etc/httpd/conf/httpd.conf
  17.     - source: salt://files/httpd.conf
  18.     - user: root
  19.     - group: root
  20.     - mode: 644
  21.     - require: #require方法: file這個操作的時候,文件改動需要依賴於pkg這個包安裝完成,如果這個包沒有安裝成功,後面的file操作就會失敗
  22.       - pkg: apache-service
  23.   service.running:
  24.     - name: httpd
  25.     - enable: True
  26.     - reload: True
  27.     - watch: #watch方法:service這個模塊關注file模塊,如果file狀態改變,service重載reload.
  28.       - file: apache-service
  29. #mysql ID
  30. mysql-service:
  31. pkg.installed:
  32. - name: mysql-server
  33. - require_in: # require_in 方法: pkg的執行狀態被file所以來,如果我執行不成功,file就不執行.
  34. - file: mysql-service
  35. file.managed:
  36. - name: /etc/my.cnf
  37. - source: salt://files/my.cnf
  38.     - user: root
  39.     - group: root
  40.     - mode: 644
  41. - watch_in: # watch_in方法:上級模塊file被service模塊所關注,如果file狀態改變,service模塊就重啓.
  42. - service: mysql-service
  43. service.running:
  44.     - name: mysqld
  45.     - enable: True
vim  /srv/salt/top.sls    //注意top.sls的路徑
  1. #指定項目根路徑
  2. dev:
  3. 'web2.coohx.com':
  4. - lamp
執行: 
  1. salt 'web2*' state.highstate
說明:
  1. 處理狀態之間關係用到的幾個重要的方法:
    1. require 我依賴某個狀態   (常用於包安裝)
    2. require_in: 我被某個狀態所依賴
    3. watch  我關注某個狀態  (常用於文件改動)
    4. watch_in: 我被某個狀態所關注

更改配置文件,測試依賴關係:

  1. [root@web1 salt]# salt 'web2*' state.highstate
  2. web2.coohx.com:
  3. ....
  4. ...
  5. ----------
  6. ID: apache-service
  7. Function: file.managed
  8. Name: /etc/httpd/conf/httpd.conf
  9. Result: True
  10. Comment: File /etc/httpd/conf/httpd.conf updated
  11. Started: 19:22:16.063742
  12. Duration: 56.123 ms
  13. Changes:
  14. ----------
  15. diff:
  16. ---
  17. +++
  18. @@ -273,7 +273,7 @@
  19. # You will have to access it by its address anyway, and this will make
  20. # redirections work in a sensible way.
  21. #
  22. -#ServerName www.example.com:80
  23. +ServerName www.coohx.com:80
  24. #
  25. # UseCanonicalName: Determines how Apache constructs self-referencing
  26. ----------
  27. ID: apache-service
  28. Function: service.running
  29. Name: httpd
  30. Result: True
  31. Comment: Service reloaded
  32. Started: 19:22:16.189186
  33. Duration: 267.497 ms
  34. Changes:
  35. ----------
  36. httpd:
  37. True
  38. ----------
  39. ID: mysql-service
  40. Function: pkg.installed
  41. Name: mysql-server
  42. Result: True
  43. Comment: Package mysql-server is already installed.
  44. Started: 19:22:16.457774
  45. Duration: 4.411 ms
  46. Changes:
  47. ----------
  48. ID: mysql-service
  49. Function: file.managed
  50. Name: /etc/my.cnf
  51. Result: True
  52. Comment: File /etc/my.cnf updated
  53. Started: 19:22:16.463750
  54. Duration: 25.095 ms
  55. Changes:
  56. ----------
  57. diff:
  58. ---
  59. +++
  60. @@ -13,6 +13,8 @@
  61. # If you want to know which options a program supports, run the program
  62. # with the "--help" option.
  63. +#web2.coohx.com
  64. +
  65. # The following options will be passed to all MySQL clients
  66. [client]
  67. #password = your_password
  68. @@ -24,7 +26,7 @@
  69. # The MySQL server
  70. [mysqld]
  71. port = 3306
  72. -socket = /var/lib/mysql/mysql.sock
  73. +socket = /tmp/mysql.sock
  74. character_set_server = utf8
  75. skip-locking
  76. key_buffer_size = 256M
  77. ----------
  78. ID: mysql-service
  79. Function: service.running
  80. Name: mysqld
  81. Result: False
  82. Comment: Failed to restart the service
  83. Started: 19:22:16.548901
  84. Duration: 2260.008 ms
  85. Changes:
  86. ----------
  87. mysqld:
  88. False
  89. Summary
  90. -------------
  91. Succeeded: 11 (changed=4)
  92. Failed: 1
  93. -------------
  94. Total states run: 12
 修改了配置文件後,根據依賴關係服務重啓.(這裏顯示minion服務器mysql啓動失敗,是因爲試驗機器上不小心誤刪了mysql.sock文件.)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章