ansible管理配置文件
Posted 人间忽晚,山河以秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible管理配置文件相关的知识,希望对你有一定的参考价值。
一个可以管理nginx配置文件的playbook
1、首先,就像安装一样,需要创建一些目录,存放管理配置文件数据的目录
[root@ansible-01 ~]# mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}
可以看到在roles下,分出了两个目录new和old
new:更新时用到的
old:回滚时用到的
在下面的目录
files下面为nginx.conf文件和vhosts目录
handlers为重启nginx服务的命令
2、接下来,把虚拟主机文件vhost目录和配置文件nginx.conf复制到files目录下
但是我的没有虚拟主机文件,所以需要创建一个vhosts
[root@ansible-01 ansible]# cd /usr/local/nginx/conf/
[root@ansible-01 conf]# mkdir vhosts
[root@ansible-01 conf]# cd vhosts/
[root@ansible-01 vhosts]# touch 1.conf
3、还要把虚拟主机目录写到配置文件
添加下面的
include /usr/local/nginx/conf/vhosts/*.conf;
[root@ansible-01 ]# vim /usr/local/nginx/conf/nginx.conf
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
cation ~ \\.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/1ocal/nginx/html$fastcgi_scrip
t_name;
}
}
include /usr/local/nginx/conf/vhosts/*.conf;
}
"nginx.conf" 62L, 1526C 已写入
编写定义变量的文件
[root@ansible-01 conf]# cd cd /etc/ansible/nginx_config
[root@ansible-01 nginx_config]# vim roles/new/vars/main.yml
nginx_basedir: /usr/local/nginx
~
~
~
~
~
~
"roles/new/vars/main.yml" [新] 1L, 32C 已写入
编写重新加载nginx的文件
[root@ansible-01 nginx_config]# vim roles/new/handlers/main.yml
- name: restart nginx
shell: /etc/init.d/nginx reload
~
~
~
~
~
~
~
~
<ew/handlers/main.yml" [新] 2L, 56C 已写入
核心任务,复制.conf 和hosts文件
[root@ansible-01 nginx_config]# vim roles/new/tasks/main.yml
- name: copy conf file
copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.d
est }}backup=yes owner=root group=root mode=0644
with_items:
- { src: nginx.conf, dest: conf/nginx.conf }
- { src: vhosts, dest: conf/ }
notify: restart nginx
~
~
~
~
~
~
~
~
~
</new/tasks/main.yml" [新] 6L, 255C 已写入
更新文件
[root@ansible-01 nginx_config]# vim /etc/ansible/nginx_config/update.yml
---
- hosts: testhost
user: root
roles:
- new
~
~
~
~
~
~
~
~
~
"update.yml" [新] 5L, 54C 已写入
执行一下
[root@ansible-01 nginx_config]# ansible-playbook /etc/ansible/nginx_config/update.yml
PLAY [testhost] ****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [127.0.0.1]
ok: [10.30.59.216]
TASK [new : copy conf file] ****************************************************
changed: [127.0.0.1] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
changed: [10.30.59.216] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
changed: [127.0.0.1] => (item={u'dest': u'conf/', u'src': u'vhosts'})
changed: [10.30.59.216] => (item={u'dest': u'conf/', u'src': u'vhosts'})
NNING HANDLER [new : restart nginx] ******************************************
changed: [127.0.0.1]
changed: [10.30.59.216]
PLAY RECAP *********************************************************************
10.30.59.216 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
127.0.0.1 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible-01 nginx_config]#
在执行update.yml前,应备份当前配置文件,当执行之后发现错误,则进行回滚操作。关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致,命令如下:
[root@ansible-01 nginx_config]# rsync -av /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/
sending incremental file list
files/
files/nginx.conf
files/vhosts/
files/vhosts/1.conf
handlers/
handlers/main.yml
tasks/
tasks/main.yml
vars/
vars/main.yml
sent 2,418 bytes received 131 bytes 5,098.00 bytes/sec
total size is 1,869 speedup is 0.73
[root@ansible-01 nginx_config]# vim /etc/ansible/nginx_config/rollback.yml
---
- hosts: testhost
user: root
roles:
- old
~
~
~
~
~
~
~
~
~
~
"rollback.yml" [新] 5L, 54C 已写入
[root@ansible-01 nginx_config]# ansible-playbook /etc/ansible/nginx_config/rollback.yml
PLAY [testhost] ****************************************************************
TASK [Gathering Facts] *********************************************************
ok: [127.0.0.1]
ok: [10.30.59.216]
TASK [old : copy conf file] ****************************************************
ok: [127.0.0.1] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
ok: [10.30.59.216] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
ok: [127.0.0.1] => (item={u'dest': u'conf/', u'src': u'vhosts'})
ok: [10.30.59.216] => (item={u'dest': u'conf/', u'src': u'vhosts'})
PLAY RECAP *********************************************************************
10.30.59.216 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
127.0.0.1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible-01 nginx_config]#
回滚操作就是把旧的配置覆盖,然后重新加载nginx服务, 每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files。
到此,对于ansible的学习先停一段落。
以上是关于ansible管理配置文件的主要内容,如果未能解决你的问题,请参考以下文章