ansible的触发器和角色

1:触发器

        需要触发才能执行的任务,当之前定义在tasks 中的任务执行完成后,若希望在基础上触发其他的任务,这时就需要定义handlers。例如,当通过 ansible的模块对目标主机的配置文件进行修改之后,如果任务执行成功。可以触发一个触发器。在触发器中定义目标主机的服务重启操作,以使配置文件生效,handlers触发器具有以下优点。

  1. handlers是 Ansible提供的条件机制之一。handlers和 task 很类似,但是他在被task通知

的时候才会触发执行-

  2. handlers只会在所有任务执行完成后执行,而且即使被通知了多次,它也只会执行一次,

handlers 按照定义的顺序依次执行

《1》:vim /etc/ansible/httpd.yml  编写文件

---

- hosts: webserver

  remote_user: root

  tasks:

    - name: xxx

      command: sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf

      notify:

        - rehttpd

  handlers:

    - name: rehttpd

      service: name=httpd state=restarted

...

注释

---                                        #固定开头格式

- hosts: webserver                               #指定运行主机为Rich组

  remote_user: root                        #指定对端运行用户的身份

  tasks:                                    #任务列表

    - name: xxx                            #定义任务名称

      command: sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf        #模块为command:使用sed命令替换监听端口为8080

      notify:                                #完成任务后调用restart httpd server触发器

        - rehttpd

  handlers:                                #配置触发器

    - name: rehttpd                        #指定触发器名字

      service: name=httpd state=restarted    #指定触发条件为重启httpd服务

...                                        #结尾句

《2》:ansible-playbook --syntax-check /etc/ansible/httpd.yml   检测语法

《3》:ansible-playbook -C /etc/ansible/httpd.yml   预执行

《4》:ansible-playbook /etc/ansible/httpd.yml  执行

(注:以上报错指的是建议用sed模块,而不是用shell命令)

《5》:在虚拟机上查看服务器状态

《6》:netstat -lnpt |grep 80 查看端口

2:角色

      将多种不同的tasks 的文件集中存储在某个目录下。则该目录就是角色。角色一般存放在/etc/ansible/roles/目录中,可通过 ansible的配置文件来调整默认的角色目录。/etc/ansible/roles 目录下有很多的子I录,其中每一个子目录对应一个角色。每个角色也有自己的目录结构。

/etc/ansible/roles/  为角色集合,该目录下有自定义的各个子目录

  • mariadb:mysql角色
  • Apache:httpd角色
  • nginx:nginx角色

每个角色的定义,以特定的层级目录结构进行组织,以mariadb(mysql角色)为例

  • files:存放copy或script等模块调用的文件
  • templates:存放template模块查找所有需要的模块文件的目录,如mysql配置文件等模块
  • tasks:任务存放目录
  • handlers:存放相关触发执行器的目录
  • vars:变量存放的目录
  • meta:用于存放此角色元数据
  • default:默认变量存放目录,文件中定义了此角色使用默认变量

   上述目录中tasks,handlers。vars,meta,default至少应该包含一个main.yml,该目录下也可以有其他的yml文件,但是需要在main.yml文件中用include指定将其他yml文件包含进来。

   有了角色之后,可以直接在yml文件中(playbook配置文件)中调用角色实例如下:

实验案例:

     下面通过一个实例配置数据库角色,需要被管理主机自动安装mariadb,安装完成后上传提前准备的配置文件到远端主机,重启服务,然后新建testdb数据库,并允许test用户对其拥有所有的权限

《1》:在管理端配置yum

《2》:mkdir -p /etc/ansible/roles/mariadb/{files,tasks,handlers}  配置数据库角色:分别是放文件的,放任务的,放剧本的。

《3》:vim /etc/ansible/mariadb.yml 编写文件

《4》:写入:

---

- hosts: webserver

  remote_user: root

  roles:

    - mariadb

...

 《5》:cd /etc/ansible/roles/mariadb  切换目录

《6》:ls 查看

《7》:vim tasks/main.yml  编辑文件

《8》:写入:

---

- name: install mariadb

  yum: name=mariadb-server state=present

- name: move config file

  shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"

- name: provide a new config file

  copy: src=my.cnf dest=/etc/my.cnf

- name: reload mariadb

  shell: systemctl restart mariadb

- name: create database testdb

  shell: mysql -u root -e "create database testdb;grant all privileges on testdb.* to 'test'@'192.168.100.%' identified by 'test123';flush privileges;"

  notify:

  - restart mariadb

...

注释

---                                                #固定开头格式

- name: install mariadb                                #指定任务名称安装mariadb数据库

  yum: name=mariadb-server state=present            #执行yum模块安装mariadb

- name: move config file                            #指定任务名称移除原有配置文件

  shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"    #判断有就移除

- name: provide a new config file                    #创建一个新的配置文件

  copy: src=my.cnf dest=/etc/my.cnf            #src源会自动到files文件去找my.cnf文件

- name: reload mariadb                            #指定任务名称为重启mariadb

  shell: systemctl restart mariadb                    #shell模块重启

- name: create database testdb                        #按要求添加执行如下sql语句

  shell: mysql -u root -e "create database testdb;grant all privileges on testdb.* to 'test'@'192.168.100.%' identified by 'test123';flush privileges;"   

  notify:                                            #配置触发器

  - restart mariadb                                #为重启mariadb

...

《9》:vim handlers/main.yml  编写(注:定义触发器)

《10》:写入:

---

- name: restart mariadb

  service: name=mariadb state=restarted

...

注释

---

- name: restart mariadb                    #引用上面配置的触发器

  service: name=mariadb state=restarted        #触发后重启mariadb

...

《11》:cd files/   切换目录

《12》:cp /etc/my.cnf ./  复制

《13》:ls

《14》:vim my.cnf 

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

symbolic-links=0



[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid



!includedir /etc/my.cnf.d

《15》:ansible-playbook -C /etc/ansible/mariadb.yml   预执行

《16》:ansible-playbook /etc/ansible/mariadb.yml  执行

《17》:systemctl status mariadb 查看状态

《18》:mysql  进行连接

《19》:use mysql  切换数据表

《20》:select user from user; 查看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BK_小小关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值