RHCE8.0实训:管理事实
实训目的
- 从主机收集事实。
- 创建使用所收集事实的任务。
实训步骤
查看事实
Ansible setup模块从系统检索事实。运行一个临时命令,检索slave组中所有服务器的事实。
输出中将以JSON格式显示为servera.lab.ex&mple.coni收集的所有事实。检 查显小的部分变量。
[root@servera ansible]# cd data-facts
[root@servera data-facts]# ansible slave -m setup
localhost | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.0.0.30" ], "ansible_all_ipv6_addresses": [ "fe80::dffd:fae2:f3d3:9000" ], "ansible_apparmor": { "status": "disabled" },
创建事实
创建名为custom.fact 的事实文件。
该事实文件定义要在servera上安装的软件包和启动的服务。该文件应当如下所示:
[general] package = httpd service = httpd state = started enabled = true
创建 setup_facts. yml playbook,以生成 /etc/ansible/facts.d 远程目录并将 custom.fact文件保存到该目录。
--- - name: Install remote facts hosts: slave vars: remote_dir: /etc/ansible/facts.d facts_file: custom.fact tasks: - name: create the remote directory file: state: directory recurse: yes path: "{{ remote_dir }}" - name: Install the new facts copy: src: "{{ facts_file }}" dest: "{{ remote_dir }}"
使用setup模块运行一个临时命令。搜索输出中的ansible_local部分。这时应当没有任何自定义事实。
[student@workstation data-facts]$ ansible slave -m setup
输出:
"ansible_local": {},
运行该playbook前,通过运行ansible-playbook --syntax-check来验证其语法是否正确。如果报告任何错误,请更正后再继续下一步。您应看到类似于下文的输岀:
[student@workstation data-facts]$ ansible-playbook --syntax-check setup_facts.yml
运彳亍 setup_facts. yml playbook
[root@servera data-facts]# ansible-playbook setup_facts.yml
PLAY [Install remote facts] ***************************************************************** TASK [Gathering Facts] ********************************************************************** ok: [localhost] ok: [10.0.0.30] TASK [create the remote directory] ********************************************************** changed: [localhost] ok: [10.0.0.30] TASK [Install the new facts] **************************************************************** changed: [localhost] ok: [10.0.0.30] PLAY RECAP ********************************************************************************** 10.0.0.30 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
现在执行刚才的命令,ansible slave -m setup
发现ansible_local有输出了:
"ansible_local": { "custom": { "general": { "enabled": "true", "package": "httpd", "service": "httpd", "state": "started" } } },
编写主playbook
现在可以创建主playbook,以同时使用默认事实和用户事实来配置servera。在接下中,您要向playbook文件添加内容。创建playbook. yml playbook,使其包含以下内 容
--- - name: Install Apache and starts the service hosts: web tasks: - name: Install the required package yum: name: "{{ ansible_facts['ansible_local']['custom']['general']['package'] }}" state: latest - name: Start the service service: name: "{{ ansible_facts['ansible_local']['custom']['general']['service'] }}" state: "{{ ansible_facts['ansible_local']['custom']['general']['state'] }}" enabled: "{{ ansible_facts['ansible_local']['custom']['general']['enabled'] }}"
在运行playbook前,先使用临时命令验证httpd服务目前尚未在servera±运行。
通过运行ansible-playbook - -syntax-check,验证playbook的语法。如果报告任何 错误,请更正后再继续下一步。您应看到类似于下文的输出:
[student@workstation data-facts]$ ansible-playbook --syntax-check playbook.yml
playbook: playbook.yml
使用ansible-playbook命令运行该playbook。观察输出结果,Ansible将先安装软件 包,然后启用服务。
[student@workstation data-facts]$ ansible-playbook playbook.yml
PLAY [Install Apache and starts the service] ************************************************ TASK [Gathering Facts] ********************************************************************** ok: [localhost] ok: [10.0.0.30] TASK [Install the required package] ********************************************************* ok: [localhost] ok: [10.0.0.30] TASK [Start the service] ******************************************************************** changed: [localhost] ok: [10.0.0.30] PLAY RECAP ********************************************************************************** 10.0.0.30 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
使用一个临时命令来执行systemctl,以确定servera现在是否在运行httpd服务
[root@servera data-facts]# ansible 10.0.0.30 -m command -a 'systemctl status httpd'
10.0.0.30 | CHANGED | rc=0 >> ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2021-02-14 22:42:57 CST; 1min 25s ago Docs: man:httpd(8) man:apachectl(8) Process: 86139 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS) Main PID: 86648 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─86648 /usr/sbin/httpd -DFOREGROUND ├─86651 /usr/sbin/httpd -DFOREGROUND ├─86654 /usr/sbin/httpd -DFOREGROUND ├─86655 /usr/sbin/httpd -DFOREGROUND ├─86656 /usr/sbin/httpd -DFOREGROUND ├─86657 /usr/sbin/httpd -DFOREGROUND └─86658 /usr/sbin/httpd -DFOREGROUND Feb 14 22:42:57 servera.lab.example.com systemd[1]: Starting The Apache HTTP Server... Feb 14 22:42:57 servera.lab.example.com systemd[1]: Started The Apache HTTP Server.