1、准备环境
使用系统角色配置httpd服务需要预先把httpd的配置文件拷贝到ansible主机的/etc/ansible/files/目录下
1.1 从受控节点copy配置文件
先要在受控节点安装httpd服务,并复制httpd的配置文件到控制节点。因为模板要用到配置文件,如果控制节点有httpd的模板就不用做这一步操作。
[root@apache ~]# yum -y install httpd
......
//httpd配置文件路径
[root@apache conf]# pwd
/etc/httpd/conf
[root@ansible files]# scp apache:/etc/httpd/conf/httpd.conf /etc/ansible/files/httpd.conf.j2
[root@ansible files]# ll
总用量 12
-rw-r--r--. 1 root root 11907 8月 5 20:58 httpd.conf.j2
1.2 配置httpd模板
修改服务的端口号,改成82端口。在配置文件中先找到Listen 80 ,然后把端口设置成为一个变量,在写play的时候定义变量值。这就是模板的使用,其他服务的配置基本差不多是一样的。
[root@ansible files]# vim httpd.conf.j2
......
#Listen 12.34.56.78:80
Listen {{ port }}
......
2.编写play配置文件
安装步骤:
1. 安装httpd服务,并传送模板文件 2. 为httpd服务配置selinux放行 3. 重启httpd服务
---
- hosts: apache
vars:
selinux_state: enforcing //设置selinux状态 enforcing:活跃、permissive:宽容模式、disabled:关闭
selinux_ports: //selinux放行规则分别是: 端口、标签、协议、状态
- ports: "82"
setype: "http_port_t"
proto: "tcp"
state: "present"
port: 82
tasks: //安装httpd服务
- name: instasll httpd
yum:
name: httpd
state: present
- name: config httpd //配置httpd服务
template:
src: files/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
- name: selinux for httpd //为httpd服务提供重启
block:
- include_role:
name: selinux
rescue:
- name: if failed reason require reboot
fail:
when: not selinux_reboot_required
- name: reboot
reboot:
- name: config selinux
include_role:
name: selinux
- name: start httpd //重启httpd服务,这样新的配置文件才能生效
service:
name: httpd
state: present
enabled: yes
3.执行playbook,并检查端口和访问网页测试
在ansible配置文件同级的目录下创建一个playbook文件,里面只需要写在哪给主机执行,用什么角色
[root@ansible ansible]# cat httpd.yml
---
- name:
hosts: apache
roles:
- httpd
执行playbook:
[root@ansible ansible]# ansible-playbook httpd.yml
......
ok: [192.168.164.132] => (item={'ports': '82', 'setype': 'http_port_t', 'proto': 'tcp', 'state': 'present'})
TASK [selinux : Set linux user to SELinux user mapping] ************************
PLAY RECAP *********************************************************************
192.168.164.132 : ok=10 changed=2 unreachable=0 failed=0 skipped=14 rescued=0 ignored=0
到受控端查看selinux规则是否修改成功:
[root@apache conf]# semanage port -l | grep http_
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 82, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
[root@apache conf]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:82 *:*
LISTEN 0 128 [::]:22 [::]:*
//此时发现定义的端口号82已经修改成功
|