目录
一.roles概述
1.roles角色
2.roles的目录层次
2.1.roles 内各目录含义解释
二.实操
1.部署nginx
2.部署MySQL
3.部署php
4.编写测试文件
三.总结
可以把playbook剧本里的每个play看作为一个角色,将每个角色要用到的文件、变量、任务列表定
义到对应角色的目录中,需要时可以直接在playbook中调用角色
作用
实现在playbook中代码复用
cd /etc/ansible/ tree roles/ roles/ ├── web/ #相当于 playbook 中的 每一个 play 主题 │ ├── files/ #用来存放由 copy 模块或 script 模块调用的文件。 │ ├── templates/ #用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。 │ ├── tasks/ #此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。 │ ├── handlers/ #此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。 │ ├── vars/ #此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。 │ ├── defaults/ #此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量 │ └── meta/ #此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系。 └── db/ ├── files/ ├── templates/ ├── tasks/ ├── handlers/ ├── vars/ ├── defaults/ └── meta/ 用来存放由 copy 模块或 script 模块调用的文件。
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含
其它的位于此目录的 task 文件。
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量
中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量
此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系
cd /opt mkdir nginx cd nginx/ 上传nginx.repo、nginx.conf,并且修改nginx.conf为nginx.conf.j2 vim nginx.conf.j2 37、38行 listen {{nginx_addr}}:{{nginx_port}}; server_name {{nginx_hostname}}; 45行 root {{root_dir}}; 68行 fastcgi_pass {{php_addr}}:{{php_port}}; 70行 fastcgi_param SCRIPT_FILENAME {{root_dir}}$fastcgi_script_name; vim lnmp-playbook.yaml - name: nginx play hosts: webservers remote_user: root gather_facts: false vars: - nginx_addr: 192.168.80.101 - nginx_port: 80 - nginx_hostname: www.xy101.com - root_dir: /var/www/html - php_addr: 192.168.80.102 - php_port: 9000 tasks: - name: disable firewalld service: name=firewalld state=stopped enabled=no - name: disable selinux command: 'setenfoce 0' ignore_errors: true - name: copy nginx repo copy: src=/opt/nginx/nginx.repo dest=/etc/yum.repos.d/ - name: install nginx yum: name=nginx state=latest - name: create root dir file: path={{root_dir}} state=directory - name: copy nginx config template file template: src=/opt/nginx/nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: 'reload nginx' - name: create nfs config copy: content="{{root_dir}} 192.168.80.0/24(rw,sync,no_root_squash)" dest=/etc/exports - name: restart rpcbind,nfs,nginx service: name={{item}} state=restarted enabled=yes with_items: - rpcbind - nfs - nginx handlers: - name: reload nginx service: name=nginx state=reloaded ansible-playbook lnmp-playbook.yaml - name: mysql play hosts: dbservers remote_user: root gather_facts: false tasks: - name: disable mysql_server firewalld service: name=firewalld state=stopped enabled=no - name: disable mysql_server selinux command: 'setenforce 0' ignore_errors: true - name: remove mariadb yum: name=mariadb* state=absent - name: copy mysql repo copy: src=/opt/mysql/mysql-community.repo dest=/etc/yum.repos.d/ - name: modify mysql repo replace: path=/etc/yum.repos.d/mysql-community.repo regexp="gpgcheck=1" replace="gpgcheck=0" - name: install mysql yum: name=mysql-server state=present - name: start mysql service: name=mysqld state=started enabled=yes - name: init mysql script: '/opt/mysql/mysql-init.sh' - name: php play hosts: phpservers remote_user: root gather_facts: false vars: - php_username: nginx - php_addr: 192.168.80.102:9000 - nginx_addr: 192.168.80.101 - root_dir: /var/www/html tasks: - name: disable php_server firewalld service: name=firewalld state=stopped enabled=no - name: disable php_server selinux command: 'setenforce 0' - name: unarchive php tar pkg unarchive: copy=yes src=/opt/php/php.tar.gz dest=/mnt/ - name: copy local repo copy: src=/opt/php/local.repo dest=/etc/yum.repos.d/ - name: create repo shell: 'createrepo /mnt && yum clean all && yum makecache' - name: install php yum: name=php72w,php72w-cli,php72w-common,php72w-devel,php72w-embedded,php72w-gd,php72w-mbstring,php72w-pdo,php72w-xml,php72w-fpm,php72w-mysqlnd,php72w-opcache,php72w-ldap,php72w-bcmath state=present - name: create php user user: name={{php_username}} shell=/sbin/nologin create_home=no - name: modify php.ini replace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai" - name: modify user and group in www.conf replace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="{{php_username}}" notify: "reload php-fpm" - name: modify listen in www.conf replace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1:9000" replace="{{php_addr}}" notify: "reload php-fpm" - name: modify listen.allowed_clients in www.conf replace: path=/etc/php-fpm.d/www.conf regexp="127.0.0.1" replace="{{nginx_addr}}" notify: "reload php-fpm" - name: start php-fpm service: name=php-fpm state=started enabled=yes - name: create www root dir file: path={{root_dir}} state=directory - name: mount nfs mount: src="{{nginx_addr}}:{{root_dir}}" path={{root_dir}} fstype=nfs state=mounted opts="defaults,_netdev" handlers: - name: reload php-fpm service: name=php-fpm state=reloaded cd /var/www/html vim index.php 浏览器访问测试

roles目录格式
roles/ #角色总目录,其每个子目录就是一个角色目录 nginx/ #角色目录,一个角色相当于playbook中的一个play主题,目录名就是角色名 files/ #存放copy、script、unarchive等模块默认调用的文件 templates/ #存放template模块默认调用的模板文件 tasks/mian.yml #定义此角色的tasks任务列表 handlers/mian.yml #定义此角色通过nofity触发执行的handlers任务列表 vars/mian.yml #定义此角色使用的自定义变量 defaults/mian.yml #定义此角色使用的默认变量(一般不用) meta/mian.yml #定义此角色的元数据信息和依赖关系 mysql/ .... php/ .... vim XXX.yaml - name: hosts: remote_user: roles: - 角色名1 - 角色名2 .... ansible-playbook XXX.yaml