playbook更新配置文件和回滚

1.需求

不是发布代码,软件配置更改上线,出问题了回滚

2.模拟

  1. 控制端建立一系列目录,*/roles/{old,new}/{handlers,vars,tasks,files}
    其中old目录放回滚文件,new放更新文件
  2. 整体思路:不管是回滚还是更新,本质上都是把控制端的文件覆盖远端的文件,所以old和new下面的目录和文件基本上一模一样,最大的不同就是files下面的配置文件不同,new下面是控制端待更新的配置文件,old下面是远端未更新前的配置文件。
[root@node1 roles]# tree /tmp/conf/
/tmp/conf/
└── roles
    ├── new
    │   ├── files
    │   │   ├── conf1up
    │   │   └── conf2up
    │   ├── handlers
    │   │   └── main.yml
    │   ├── tasks
    │   │   └── main.yml
    │   ├── update.retry
    │   ├── update.yml
    │   └── vars
    │       └── main.yml
    └── old
        ├── files
        │   ├── conf1
        │   └── conf2
        ├── handlers
        │   └── main.yml
        ├── rollback.retry
        ├── rollback.yml
        ├── tasks
        │   └── main.yml
        └── vars
            └── main.yml
  1. 看下new下面的文件
[root@node1 roles]# cat new/handlers/main.yml 
- name: test handlers //类似于shell里的 command1 && command2 ,1执行成功才执行2
  shell: echo `date`,"update;restart is done">>/tmp/w.txt
[root@node1 roles]# cat new/tasks/main.yml 
---
- name: copy conf
  copy: src={
     { item.src }} dest={
     { nginx_basedir }}/{
     { item.dest }} backup=yes mode=0644
  with_items: 
  - {src: conf1up,dest: conf1new}
  - {src: conf2up,dest: conf2new}
  notify: test handlers //此处的test handlers几个字要和handlers/main.yml里的name一样
[root@node1 roles]# cat new/vars/main.yml 
nginx_basedir: /root/conf/
[root@node1 roles]# cat new/update.yml 
---
- hosts: test
  user: root
  gather_facts: no
  roles: 
  - new

转载于:https://my.oschina.net/u/3746745/blog/3028987

你可能感兴趣的:(shell)