RHCE8.0实训:实施处理程序
目录
实训目的
您应能够在playbook中定义处理程序,并向它们通知配置更改。
服务器A(母机)上已安有mariadb ,现在在服务器B上安装mariadb
实验准备
母机安装mariadb
centos7 安装Mariadb :https://www.cnblogs.com/yhongji/p/9783065.html
安装MariaDB
通过yum安装就行了。简单快捷,安装mariadb-server,默认依赖安装mariadb,一个是服务端、一个是客户端。
[root@mini ~]# yum install mariadb-server
配置MariaDB
1)安装完成后首先要把MariaDB服务开启,并设置为开机启动
[root@mini ~]# systemctl start mariadb # 开启服务
[root@mini ~]# systemctl enable mariadb # 设置为开机自启动服务
2)首次安装需要进行数据库的配置,命令都和mysql的一样
[root@mini ~]# mysql_secure_installation
3)配置时出现的各个选项
Enter current password for root (enter for none): # 输入数据库超级管理员root的密码(注意不是系统root的密码),第一次进入还没有设置密码则直接回车 Set root password? [Y/n] # 设置密码,y New password: # 新密码 Re-enter new password: # 再次输入密码 Remove anonymous users? [Y/n] # 移除匿名用户, y Disallow root login remotely? [Y/n] # 拒绝root远程登录,n,不管y/n,都会拒绝root远程登录 Remove test database and access to it? [Y/n] # 删除test数据库,y:删除。n:不删除,数据库中会有一个test数据库,一般不需要 Reload privilege tables now? [Y/n] # 重新加载权限表,y。或者重启服务也许
安装和验证apache服务器
ansible-playbook intranet.yml
--- - name: Enable intranet services hosts: servera.lab.example.com become: yes tasks: - name: latest version of httpd and firewalld installed yum: name: - httpd - firewalld state: latest - name: test html page is installed copy: content: "Welcome to the example.com intranet!\n" dest: /var/www/html/index.html - name: firewalld enabled and running service: name: firewalld enabled: true state: started - name: firewalld permits access to httpd srevice firewalld: service: http permanent: true state: enabled immediate: yes - name: httpd enabled and running service: name: httpd enabled: true state: started - name: copy inf file to the server'root copy: src: /etc/my.cnf dest: /var/www/html/my.cnf.standard - name: Testintranet web server hosts: serverb.lab.example.com become: no tasks: - name: connect to intranet web server uri: url: http://servera.lab.example.com return_content: yes status_code: 200
实验步骤
新建目录
[root@servera ansible]# mkdir control-handlers
[root@servera ansible]# cd control-handlers/
在该目录中,使用文本编辑器编辑configure_db.yml playbook文件。
此playbook将安装和配置一个数据库服务器。当数据库服务器配置更改时,playbook将触发数据库服务重新 启动并配置数据库管理密码。
变量初始化
使用文本编辑器,查看configure_db. yml playbook 从一些变量的初始化幵始
vi configure_db.yml
--- - name: Installing MariaDB server hosts: database_prod vars: db_packages: - mariadb-server - MySQL-python db_service: mariadb resources_url: http://servera.lab.example.com config_file_url: "{{ resources_url }}/my.cnf.standard" config_file_dst: /etc/my.cnf
- db_packages定义要为数据库服务安装的软件包的名称。
- db_service定义数据库服务的名称。
- resources_url表示远程配置文件所在的资源目录的URL。
- config_file_url表示要安装的数据库配置文件的URL。
- config_file_dst是受管主机上已安装配置文件的位置。
添加任务_安装数据库
在configure_db.yml文件中定义一个任务,它使用yum模块安装由db_packages 变量定义的必要数据库软件包。如果该任务更改了系统,则表示未安装数据库,您需要 通知set db password处理程序,设置初始数据库用户和密码。请记住,处理程序任 务(如果获得通知)在tasks部分中的每个任务都已运行之前将不会运行
tasks: - name: "{{ db_packages }} packages are installed" yum: name: "{{ db_packages }}" state: present notify: - set db password
添加任务_启动数据库
添加一个任务,以启动并启用数据库服务。该任务应当如下所示:
- name: Make sure the database service is running service: name: "{{ db_service }}" state: started enabled: true
添加任务_下载配置文件
添加一项任务,它使用get_url模块将my .cnf. standard下载到受管主机上的/ etc/my.cnf添加通知restart db service处理程序的条件,以在配置文件更改 后重新启动数据库服务。该任务应当如下所示:
- name: The {{ config_file_dst }} file has been installed get_url: url: "{{ config_file_url }}" dest: "{{ config_file_dst }}" owner: mysql group: mysql force: yes notify: - restart db service
定义处理程序
添加handlers关键字以定义处理程序任务的幵头。
定义第一个处理程序restart db service,它重新启动mariadb服务。
定义第二个处理程序set db password,它设置数据库服务的管理密码。该处理程序 使用mysql_user模块来执行命令。
handlers: - name: restart db service service: name: "{{ db_service }}" state: restarted - name: set db password mysql_user: name: root password: redhat
完整代码
vi configure_db.yml
--- - name: Installing MariaDB server hosts: database_prod vars: db_packages: - mariadb-server - MySQL-python db_service: mariadb resources_url: http://servera.lab.example.com config_file_url: "{{ resources_url }}/my.cnf.standard" config_file_dst: /etc/my.cnf tasks: - name: "{{ db_packages }} packages are installed" yum: name: "{{ db_packages }}" state: present notify: - set db password - name: Make sure the database service is running service: name: "{{ db_service }}" state: started enabled: true - name: The {{ config_file_dst }} file has been installed get_url: url: "{{ config_file_url }}" dest: "{{ config_file_dst }}" owner: mysql group: mysql force: yes notify: - restart db service handlers: - name: restart db service service: name: "{{ db_service }}" state: restarted - name: set db password mysql_user: name: root password: redhat
运行play
[root@servera control-handlers]# ansible-playbook configure_db.yml --syntax-check
playbook: configure_db.yml
[root@servera control-handlers]# ansible-playbook configure_db.yml
PLAY [Installing MariaDB server] ************************************************************************ TASK [Gathering Facts] ********************************************************************************** ok: [serverb.lab.example.com] TASK [['mariadb-server', 'MySQL-python'] packages are installed] **************************************** changed: [serverb.lab.example.com] TASK [Make sure the database service is running] ******************************************************** ok: [serverb.lab.example.com] TASK [The /etc/my.cnf file has been installed] ********************************************************** ok: [serverb.lab.example.com] RUNNING HANDLER [restart db service] **************************************************** changed: [serverb.lab.example.com] RUNNING HANDLER [set db password] *********************************************************************** changed: [serverb.lab.example.com] PLAY RECAP ********************************************************************************************** serverb.lab.example.com : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
再次执行脚本,会发现这回不再触发set password:
PLAY [Installing MariaDB server] ********************************************************************************* TASK [Gathering Facts] ******************************************************************************************* ok: [serverb.lab.example.com] TASK [['mariadb-server', 'MySQL-python'] packages are installed] ************************************************* ok: [serverb.lab.example.com] TASK [Make sure the database service is running] ***************************************************************** ok: [serverb.lab.example.com] TASK [The /etc/my.cnf file has been installed] ******************************************************************* ok: [serverb.lab.example.com] PLAY RECAP ******************************************************************************************************* serverb.lab.example.com : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
这一次处理程序被跳过。如果将来更改远程配置文件,执行playbook将触发restart db service处理程序,而不是set db password处理程序。