Ansible个人学习roles使用实践(mariadb安装)

坚强是说给别人听的谎言 提交于 2020-02-28 03:45:18

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!