阅读量:0
目录
一.roles概述
1.roles角色
可以把playbook剧本里的每个play看作为一个角色,将每个角色要用到的文件、变量、任务列表定
义到对应角色的目录中,需要时可以直接在playbook中调用角色
作用
实现在playbook中代码复用
2.roles的目录层次
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/
2.1.roles 内各目录含义解释
- files
用来存放由 copy 模块或 script 模块调用的文件。
- templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
- tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含
其它的位于此目录的 task 文件。
- handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
- vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
- defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量
中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量
- meta
此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系
二.实操
1.部署nginx
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
2.部署MySQL
- 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'
3.部署php
- 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
4.编写测试文件
cd /var/www/html vim index.php <?php phpinfo(); ?>
浏览器访问测试
三.总结
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