前言:
有关ansible服务的搭建:自动化运维工具Ansible的搭建
ansible-playbook配置思路:
1.通过vars中的main.yml配置变量,主要为源码存放目录及安装目录
2.通过tasks中的copy.yml将源码文件传输到异地服务器上源码存放目录
3.通过tasks中的install.yml调用模板mysql_install.sh,将mysql安装到变量中定义的安装目录
4.通过tasks中的main.yml调用copy模块和install模块
5.通过mysql.yml调用剧本(playbook):mysql_install
playbook的目录结构
[root@test ansible]# cd /etc/ansible/
[root@test ansible]# mkdir -p roles/mysql_install/{files,handlers,meta,tasks,templates,vars}
[root@test ansible]# tree /etc/ansible
├── ansible.cfg
├── hosts
├── mysql.yml
├── roles
│ └── mysql_install
│ ├── files
│ │ ├── my.cnf
│ │ └── mysql-5.6.22.tar.gz
│ ├── handlers
│ ├── meta
│ ├── tasks
│ │ ├── copy.yml
│ │ ├── install.yml
│ │ └── main.yml
│ ├── templates
│ │ └── mysql_install.sh
│ └── vars
│ └── main.yml
说明:
files:存放需要同步到异地服务器的源码文件及配置文件;
handlers:当资源发生变化时需要进行的操作,若没有此目录可以不建或为空;
meta:角色定义可留空;
tasks:mysql安装过程成需要进行的执行的任务;
templates:用于执行mysql安装的模板文件,一般为脚本;
vars:本次安装定义的变量
一、建立角色目录并配置
更改配置文件,指定角色目录
[devops@server1 ansible]$ vim ansible.cfg
[defaults]
inventory = inventory
roles_path = roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[devops@server1 ansible]$ mkdir roles
初始化生成playbook的默认目录(也可以自己建立,建议用命令生成)
[devops@server1 ansible]$ ansible-galaxy list
[devops@server1 ansible]$ cd roles/
[devops@server1 roles]$ ls
[devops@server1 roles]$ ansible-galaxy init apache
可以查看一下我们apache角色的目录树结构
首先编写我们的任务目录的yml文件:
[devops@server1 apache]$ ls
defaults files handlers meta README.md tasks templates vars
[devops@server1 apache]$ vim tasks/main.yml
---
- name: install httpd
yum:
name: httpd
state: latest
- name: create index.html
copy:
content: "{{ ansible_facts.hostname }} {{ ansible_facts['default_ipv4']['address'] }}\n"
dest: /var/www/html/index.html
tags: one
- name: configure httpd
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 644
notify: restart httpd
- name: start httpd
service:
name: httpd
state: started
enabled: true
- name: start firewalld
service:
name: firewalld
state: started
enabled: true
- name: configure firewalld
firewalld:
service: http
state: enabled
permanent: yes
immediate: yes
可以看到在configure httpd这个任务里面定义了一个触发器,接下来我们配置这个触发器:
[devops@server1 apache]$ vim handlers/main.yml
---
# handlers file for apache
- name: restart httpd
service:
name: httpd
state: restarted
我们需要把之前的httpd服务的配置文件拷贝到templates目录:
[devops@server1 apache]$ ls
defaults files handlers meta README.md tasks templates vars
[devops@server1 apache]$ cd templates/
[devops@server1 templates]$ cp ../../../templates/httpd.conf.j2 .
[devops@server1 templates]$ vim httpd.conf.j2
可以看到端口这里我们定义了一个变量,我们需要在vars目录里面说明
[devops@server1 apache]$ pwd
/home/devops/ansible/roles/apache
[devops@server1 apache]$ vim vars/main.yml
---
# vars file for apache
http_port: 80
现在角色的配置就基本完成了,可是在推送的是否需要一个yml文件。我们现在编辑这个文件,指定使用的角色
[devops@server1 ansible]$ vim apache.yml
---
- hosts: all
roles:
- apache
接下来就是推送
查看server2和server3的80端口是否打开
最后我们更改vars目录下定义http_port的变量为8080
[devops@server1 ansible]$ vim roles/apache/vars/main.yml
---
# vars file for apache
http_port: 8080
重新推送,看是否生效
可以看到configure httpd和restart httpd两个任务执行了。
端口更改为8080了