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为新创建
[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

你可能感兴趣的:(ansible,ansible,roles,playbook,运维,自动化运维)