role用法
角色(roles)是用于层次性,结构化地组织playbook,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。
一、role的层级目录结构
role是以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;
roles/
role_name/:定义的role的名字
file/: 用于存放copy或script等模块调用的函数
tasks/: 用于定义各种task,此目录一定要有main.yml;其他文件需要main.yml包含调用
handlers/: 用于定义各种handlers,此目录一定要有main.yml;其他文件需要main.yml包含调用
vars/: 用于定义variables,此目录一定要有main.yml;其他文件需要main.yml包含调用
templates/:存储由template模块调用的模板文本;
meta/: 定义当前角色的特殊设定及其依赖关系,此目录中至少应该有一个名为main.yml的文件;其它的文件需要由main.yml进行"包含"调用;
default/: 此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
目录解释:
group_vars:全局变量
yml文件:用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中;
files目录:存放由copy或script等模块调用的文件;
templates目录:templates模块会自动在此目录中寻找Jinja2模板文件;
tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件;
handlers目录:此目录中应当包含一个main;
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;
使用ansible-playbook实现mariadb安装:
1、目录结构:
[root@localhost ~]# mkdir /opt/mariadb/{roles,group_vars}
[root@localhost ~]# mkdir /opt/mariadb/roles/mariadb/{handlers,tasks,templates}
[root@localhost ~]# cd /opt/mariadb/
2、主机清单:
[root@localhost mariadb]# vim hosts
[mariadb]
192.168.8.131
192.168.8.132
3、入口yml配置:
[root@localhost mariadb]# vim mariadb.yml
--- #标识
- name: Install MariaDB
hosts: mariadb
remote_user: root
roles:
- mariadb
4、全局变量
[root@localhost mariadb]# vim group_vars/all
--- #标识
#Variables listed here are applicable to all host groups
#MySQL settings
mysqlservice: mariadb
mysql_port: 3306
5、配置roles任务
[root@localhost mariadb]# cd roles/mariadb
[root@localhost mariadb]# vim handlers/main.yml
--- #标识
#Handler to handle DB tier notifications
- name: restart mariadb
service: name=mariadb state=restarted
[root@localhost mariadb]# vim tasks/main.yml
--- #标识
#This playbook will install MariaDB and create db user and give permissions.
- name: Install MariaDB package
yum: name={{ item }} state=installed
with_items:
- mariadb-server
- mariadb
- MySQL-python
- libselinux-python
- libsemanage-python
- name: Configure SELinux to start mysql on any port
seboolean: name=mysql_connect_any state=true persistent=yes
- name: Create Mysql configuration file
template: src=my.cnf.j2 dest=/etc/my.cnf
notify:
- restart mariadb
- name: Create MariaDB log file
file: path=/var/log/mysqld.log state=touch owner=mysql group=mysql mode=0775
- name: Start MariaDB Service
service: name={{ mysqlservice }} state=started enabled=yes
- name: insert firewalld rule
firewalld: port={{ mysql_port }}/tcp permanent=true state=enabled immediate=yes
ignore_errors: yes
[root@localhost mariadb]# vim templates/my.cnf.j2
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
port={{ mysql_port }}
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mariadb/mysqld.pid
6、执行安装命令
[root@localhost mariadb]# cd /opt/mariadb
[root@localhost mariadb]# ansible-playbook -i hosts mariadb.yml
来源:51CTO
作者:love8度幸福
链接:https://blog.51cto.com/8355320/2473010