ansible自動化運維安裝部署實踐-playbook+roles部署lamp環境

roles(⻆⾊)

就是通過分別將variables, tasks及handlers等放置於單獨的⽬錄中,並可以便捷地調⽤它們的⼀種機制。假設我們要寫⼀個playbook來安裝管理lamp環境,那麼這個playbook就會寫很⻓。所以我們希望把這個很⼤的⽂件分成多個功能拆分, 分成apache管理,php管理,mysql管理,然後在需要使⽤的時候直接調⽤就可以了,以免重複寫。就類似編程⾥的模塊化的概念,以達到代碼復⽤的效果。如果以後要部署lnmp,那麼我們只需要再寫個nginx就好了。

roles目錄結構介紹
files:⽤來存放由copy模塊或script模塊調⽤的⽂件。
tasks:⾄少有⼀個main.yml⽂件,定義各tasks。
handlers:有⼀個main.yml⽂件,定義各handlers。
templates:⽤來存放jinjia2模板。
vars:有⼀個main.yml⽂件,定義變量。
meta:有⼀個main.yml⽂件,定義此⻆⾊的特殊設定及其依賴關係。

roles+playbook搭建lamp

#環境
centos7系統,VM虛擬機
#創建roles目錄結構
[root@manage01 ansible]# cd /etc/ansible/
[root@manage01 ansible]# mkdir -p roles/{httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}
[root@manage01 ansible]# touch roles/{httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml
#準備好需要替換的http配置文件和php主頁文件
#httpd.conf修改apache用戶爲lampuser phpinfo.php爲新創建<?php phpinfo();?>
[root@manage01 /]# scp -r  [email protected]:/root/httpd.conf phpinfo.php  /etc/ansible/roles/httpd/files/

#配置http角色
1、配置http變量
[root@manage01 vars]# cat /etc/ansible/roles/httpd/vars/main.yml 
user: lampuser
2、配置調用模塊(常用於重啓服務,可被notify調用,類似java的方法)
[root@manage01 vars]# cat  /etc/ansible/roles/httpd/handlers/main.yml          
- name: restart apache
  service: name=httpd state=restarted
3、配置httpd主模塊方法
- name: httpd軟件包安裝
  yum: name={{item}} state=latest
  with_items:
    - httpd
    - httpd-devel
    - httpd-manual
- name: 創建apache管理賬戶lampuser
  user: name={{user}} state=present
- name: 設置apache開機啓動,並啓動服務
  service: name=httpd enabled=yes state=started
- name: 替換配置文件,初始化業務
  copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
#定義通知調用,當配置文件更新,需要重啓服務
  notify:
  - restart apache
- name: 拷貝php測試頁
  copy: src=/etc/ansible/roles/httpd/files/phpinfo.php dest=/var/www/html/

#配置mysql角色
1、配置http變量
[root@manage01 vars]# cat /etc/ansible/roles/mysql/vars/main.yml 
user: mysql
2、配置mysql主模塊方法
- name: mysql用戶創建
  user: name={{user}} state=present
- name: mysql 軟件安裝
  yum: name={{item}} state=latest
  with_items:
    - mariadb
    - mariadb-server
- name: 啓動服務,並設置開機啓動
  service: name=mariadb enabled=yes state=started
- name: 改變mysql文件的所有者爲mysql
  file: path='/var/lib/mysql' owner={{user}} group={{user}} recurse=yes

#配置php角色
1、準備php-fpm配置文件(如有修改)
[root@manage01 files]# ls /etc/ansible/roles/php/files
www.conf
2、配置調用模塊
[root@manage01 handlers]# cat /etc/ansible/roles/php/handlers/main.yml 
- name: restart php-fpm
service: name=php-fpm state=restarted
3、配置php主模塊方法
[root@manage01 php]# cat /etc/ansible/roles/php/tasks/main.yml 
- name: 安裝php
  yum: name={{item}} state=latest
  with_items:
    - php
    - php-mysql
    - php-gd
    - php-ldap
    - php-odbc
    - php-pear
    - php-xml
    - php-xmlrpc
    - php-mbstring
    - php-snmp
    - php-soap
    - curl
    - curl-devel
    - php-bcmath
    - php-fpm
- name: copy www.conf to /etc/php-fpm.d
  copy: src=/etc/ansible/roles/php/files/www.conf dest=/etc/php-fpm.d force=yes
  notify:
  - restart php-fpm

#配置playbook調用roles
[root@manage01 web]# cat /opt/ansible/playbook/web/lamp.yaml 
---
- hosts: group1
remote_user: root
roles:
- httpd
- mysql
- php

#執行
[root@manage01 yaml]# ansible-playbook -C lamp.yml
[root@manage01 yaml]# ansible-playbook lamp.yml


FAQ:
1、空格格式問題一定要注意,規範很嚴格
ERROR! A malformed block was encountered while loading a block

2、雖然提示user: name={{user}} 這個報錯,但是實際沒半毛關係,所以需要檢查全文。
[root@manage01 web]# ansible-playbook -C lamp.yaml 
ERROR! conflicting action statements: yum, service

The error appears to be in '/etc/ansible/roles/mysql/tasks/main.yml': line 2, column 13, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
  user: name={{user}} state=present
            ^ here
There appears to be both 'k=v' shorthand syntax and YAML in this task. Only one syntax may be used.

3、部署完成後訪問192.168.192.130/phpinfo.php沒有出現頁面,出現了文件內容
原因爲php-fpm配置文件/etc/php-fpm.d/www.conf所屬用戶和用戶組配置成apache了,應該是mysql的用戶,修改後重啓服務。
[root@node03 php-fpm.d]# systemctl restart httpd
[root@node03 php-fpm.d]# systemctl restart mysql
[root@node03 php-fpm.d]# systemctl restart mariadb

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