1、实验环境中的3台服务器
host1:192.168.34.7
host2:192.168.34.17
host3:192.168.34.27
2、在host1上安装ansible
yum -y install ansible
3、创建一个名为app的roles
cd /etc/ansible/roles/
mkdir -pv app/{vars,tasks,files,templates,handlers,defaults,meta}
4、在各目录中编辑相应的文件,具体文件如下
[root@localhost roles]# tree
.
└── app
├── defaults
├── files
│ └── my.cnf
├── handlers
│ └── main.yml
├── meta
├── tasks
│ └── main.yml
├── templates
│ └── httpd.conf.j2
└── vars
└── main.yml
5、在此例中,httpd的配置文件需要调用变量,所以放在templates目录下,并使用j2后缀名
mariadb的配置文件没有调用变量,所以放在files目录中。
6、创建要使用的变量
[root@localhost roles]# cat app/vars/main.yml
servicetype: httpd
httpdpath: /data/httpd
7、在httpd.conf.j2中调用相关变量
DocumentRoot "{{ httpdpath }}/html"
<Directory "{{ httpdpath }}">
AllowOverride None
Require all granted
</Directory>
<Directory "{{ httpdpath }}/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
8、配置task任务
[root@localhost roles]# cat app/tasks/main.yml
- name: install httpd
yum:
name: httpd
state: installed
when: servicetype=="httpd"
- name: make httpd dir
file:
state: directory
path: "{{ httpdpath }}/html"
mode: 755
when: servicetype=="httpd"
- name: config httpd
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart httpd
when: servicetype=="httpd"
- name: start httpd
service:
name: httpd
state: started
when: servicetype=="httpd"
- name: intall mysql
yum:
name: mariadb-server
state: installed
when: servicetype=="mysqld"
- name: config mysql
copy:
src: my.cnf
dest: /etc/my.cnf
notify: restart mysqld
when: servicetype=="mysqld"
- name: start mysqld
service:
name: mariadb
state: started
when: servicetype=="mysqld"
9、配置handler任务
[root@localhost roles]# cat app/handlers/main.yml
- name: restart httpd
service:
name: httpd
state: restarted
- name: restart mysqld
service:
name: mariadb
state: restarted
10、在主机列表中创建两个组
[root@localhost ~]# cat /etc/ansible/hosts
[web]
192.168.34.7
[mysql]
192.168.34.17
192.168.34.27
11、使用ansible-playbook调用roles
[root@localhost ~]# cat app.yml
- hosts: web
remote_user: root
roles:
- app
- hosts: mysql
remote_user: root
roles:
- {role: app, servicetype: mysqld}
[root@localhost ~]# ansible-playbook app.yml