查看“RHCE8.0实训:实施处理程序”的源代码
←
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)配置时出现的各个选项 <nowiki>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。或者重启服务也许</nowiki> ===安装和验证apache服务器=== ansible-playbook intranet.yml <nowiki> --- - 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 </nowiki> ==实验步骤== ===新建目录=== [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 <nowiki> --- - 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</nowiki> *db_packages定义要为数据库服务安装的软件包的名称。 *db_service定义数据库服务的名称。 *resources_url表示远程配置文件所在的资源目录的URL。 *config_file_url表示要安装的数据库配置文件的URL。 *config_file_dst是受管主机上已安装配置文件的位置。 ===添加任务_安装数据库=== 在configure_db.yml文件中定义一个任务,它使用yum模块安装由db_packages 变量定义的必要数据库软件包。如果该任务更改了系统,则表示未安装数据库,您需要 通知set db password处理程序,设置初始数据库用户和密码。请记住,处理程序任 务(如果获得通知)在tasks部分中的每个任务都已运行之前将不会运行 <nowiki> tasks: - name: "{{ db_packages }} packages are installed" yum: name: "{{ db_packages }}" state: present notify: - set db password</nowiki> ===添加任务_启动数据库=== 添加一个任务,以启动并启用数据库服务。该任务应当如下所示: <nowiki> - name: Make sure the database service is running service: name: "{{ db_service }}" state: started enabled: true</nowiki> ===添加任务_下载配置文件=== 添加一项任务,它使用get_url模块将my .cnf. standard下载到受管主机上的/ etc/my.cnf添加通知restart db service处理程序的条件,以在配置文件更改 后重新启动数据库服务。该任务应当如下所示: <nowiki> - 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</nowiki> ===定义处理程序=== 添加handlers关键字以定义处理程序任务的幵头。 定义第一个处理程序restart db service,它重新启动mariadb服务。 定义第二个处理程序set db password,它设置数据库服务的管理密码。该处理程序 使用mysql_user模块来执行命令。 <nowiki> handlers: - name: restart db service service: name: "{{ db_service }}" state: restarted - name: set db password mysql_user: name: root password: redhat</nowiki> ===完整代码=== vi configure_db.yml <nowiki> --- - 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 </nowiki> ===运行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 <nowiki>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 </nowiki> 再次执行脚本,会发现这回不再触发set password: <nowiki> 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 </nowiki> 这一次处理程序被跳过。如果将来更改远程配置文件,执行playbook将触发restart db service处理程序,而不是set db password处理程序。
返回至
RHCE8.0实训:实施处理程序
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息