Ansible Tower的安装程序【SETUP.SH】有个很好的功能是:
1. 备份
2. 恢复

具体的使用可以看下这个文档:

Ansible Tower:备份与恢复

但是上面文档的问题是:
1. 这个功能只能通过命令行去目标服务器上执行
2. 这个功能的备份文件只会在当前目录生成,而不能在其他的指定目录中生成

因此,本文提供的代码将该功能转换成了ANSIBLE TOWER可以引用的GIT代码,以便于TEMPLATE的书写。

代码在这里:
https://github.com/adamhuan/ansible_maintain.git

先介绍下代码中,和原来安装包不一样的部分,以便于朋友们理解这些代码是如何运行的。


如上,其中【ANSIBLE_BACKUP】是我的Ansible的备份代码。

一、修改点:文件【do_backup.yml】


---
- hosts: all
  gather_facts: yes

  tasks:
    - name: Do Backup
      command: "sh {{ playbook_dir }}/setup.sh -b"

do_backup.yml,是后面ANSIBLE TOWER需要执行的PLAYBOOK。
如上,其中写明了执行的命令。

因为setup.sh,在项目目录里,所以加了【{{ playbook_dir }}】,告知ANSIBLE TOWER文件setup.sh的位置。
并且因为ANSIBLE TOWER下载下来的GIT文件存在权限问题,所以对于该SETUP.SH,不能直接执行,需要在前面加上【sh xxxxx】执行。

如果不这样,你会在稍后的ANSIBLE TOWER中执行的时候,会遇到这样的报错:
1. 权限问题:

SSH password: 
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [10.158.1.46]
TASK [Do Backup] ***************************************************************
fatal: [10.158.1.46]: FAILED! => {"changed": false, "cmd": "/var/lib/awx/projects/_13__gitlab_ansible_maintain/Ansible_Backup_Restore/setup.sh -b", "msg": "[Errno 13] Permission denied", "rc": 13}
PLAY RECAP *********************************************************************
10.158.1.46                : ok=1    changed=0    unreachable=0    failed=1   

2. 找不到命令:

SSH password: 
PLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [10.158.1.46]
TASK [Do Backup] ***************************************************************
fatal: [10.158.1.46]: FAILED! => {"changed": false, "cmd": "./setup.sh -b", "msg": "[Errno 2] No such file or directory", "rc": 2}
PLAY RECAP *********************************************************************
10.158.1.46                : ok=1    changed=0    unreachable=0    failed=1   

二、修改点:【roles/backup/defaults/main.yml】
第二个修改地方就是backup这个role的main.yml文件。

下面的是当前我修改后的状态:

而前面修改的记录,在我本地的GITLAB中有记录,可以截图给朋友们看看:

可以看到,原来【backup_dest】是【”{{ playbook_dir }}/”】,现在已经被修改成了【/backup/ansible_data/】。
也就是我期望的备份文件被保存的路径。

该路径如果服务器中不存在,会由ANSIBLE自己创建。

三、roles
roles部分,只选取了BACKUP.YML中需要的三个roles目录:

backup.yml

---
- hosts: tower:instance_group_*
  gather_facts: yes
  roles:
    - role: check_config_static
    - role: config_dynamic
    - role: backup

backup.yml,保持了原样没有变动。

四、inventory

文件:inventory

[tower]
localhost ansible_connection=local

[database]

[all:vars]
admin_password='admin'

pg_host='127.0.0.1'
pg_port='5432'

pg_database='awx'
pg_username='awx'
pg_password='admin'

rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password='admin'
rabbitmq_cookie=cookiemonster

rabbitmq_use_long_name=false

# Isolated Tower nodes automatically generate an RSA key for authentication;
# To disable this behavior, set this value to false
isolated_key_generation=true

原安装介质中的inventory也保持了原样没有改变。
该文件是setup.sh执行过程中所必须的。

否则就会出现这样的错误:

fatal: [10.158.1.46]: FAILED! => {“changed”: true, “cmd”: [“sh”, “/var/lib/awx/projects/_13__gitlab_ansible_maintain/Ansible_Backup_Restore/setup.sh”, “-b”], “delta”: “0:00:00.019604”, “end”: “2019-01-07 11:25:50.299195”, “msg”: “non-zero return code”, “rc”: 64, “start”: “2019-01-07 11:25:50.279591”, “stderr”: “”, “stderr_lines”: [], “stdout”: “[error] No inventory file could be found at inventory.\nRun ./configure to create one, or specify one manually with -i.”, “stdout_lines”: [“[error] No inventory file could be found at inventory.”, “Run ./configure to create one, or specify one manually with -i.”]}

————————————
以上就是为了让备份任务在ANSIBLE TOWER中可以被调用,而做出的修改。

下面,开始配置ANSIBLE TOWER中的TEMPLATE。

INVENTORIES:

指向ANSIBLE TOWER服务器所在的主机。

CREDENTIALS:

给出该服务器的操作系统口令。

PROJECT:

指向上面的ANSIBLE BACKUP所在的GIT的地址,并且要保证上图中高亮的【REVISON】是当前GIT最新的版本。

当前GIT的版本:

TEMPLATE:

注意:
INVENTORY,指向ANSIBLE TOWER所在的目录
CREDENTIAL,指向该服务器的认证信息
PROJECT,指向代码所在的GIT
PLAYBOOK,指向前面我们提到的do_backup.yml,以便于后面可以直接运行我们每次要在服务器上执行的【./setup.sh -b】

至此,TEMPLATE,任务模板的配置就完成了。
——————————————————————

验证。

在运行(LAUCH)这个TEMPLATE(任务模板)前,我们先看看我们目标路径的状态:

[root@ansible-server ~]# ls -ltr /backup/
total 458124
-rwxrwxrwx 1 root root       773 Jan  4 15:25 gitlab_gitlab-ce.repo
-rwxrwxrwx 1 root root 468388088 Jan  4 18:06 gitlab-ce-11.6.1-ce.0.el7.x86_64.rpm
-rwxrwxrwx 1 root root       130 Jan  7 10:32 main.yml
-rw-rw-r-- 1 awx  awx          0 Jan  7 10:33 me
-rw-r--r-- 1 root root    718129 Jan  7 10:35 tower-backup-2019-01-07-10:34:11.tar.gz
lrwxrwxrwx 1 root root        47 Jan  7 10:35 tower-backup-latest.tar.gz -> /backup/tower-backup-2019-01-07-10:34:11.tar.gz
drwxr-xr-x 2 root root       275 Jan  7 12:10 ansible_data
[root@ansible-server ~]# 
[root@ansible-server ~]# ls -ltr /backup/ansible_data/
total 3520
-rw-r--r-- 1 root root 738181 Jan  7 10:48 tower-backup-2019-01-07-10:47:01.tar.gz
-rw-r--r-- 1 root root 768478 Jan  7 11:22 tower-backup-2019-01-07-11:21:34.tar.gz
-rw-r--r-- 1 root root 787163 Jan  7 11:28 tower-backup-2019-01-07-11:27:45.tar.gz
-rw-r--r-- 1 root root 798694 Jan  7 11:32 tower-backup-2019-01-07-11:31:50.tar.gz
-rw-r--r-- 1 root root 500906 Jan  7 12:10 tower-backup-2019-01-07-12:09:37.tar.gz
lrwxrwxrwx 1 root root     60 Jan  7 12:10 tower-backup-latest.tar.gz -> /backup/ansible_data/tower-backup-2019-01-07-12:09:37.tar.gz
[root@ansible-server ~]# 
[root@ansible-server ~]# mv /backup/ansible_data/ /backup/ansible_data_orig_20190107
[root@ansible-server ~]# 
[root@ansible-server ~]# ls -ltr /backup/ | grep ansible_data
drwxr-xr-x 2 root root       275 Jan  7 12:10 ansible_data_orig_20190107
[root@ansible-server ~]# 

我们的目标路径是:/backup/ansible_data
为了演示ANSIBLE可以自动创建目录,我上面将/backup/ansible_data换了名字,这样该目录下就没有ansible_data目录了。

理想情况是,当任务模板执行完成后:
1. 会自行创建ansible_data
2. ansible_data中会有一份当前ANSIBLE TOWER的备份数据。

下面开始执行:


可以看到,任务已经成功执行了。

再看看服务器上目录的情况:

[root@ansible-server ~]# ls -ltr /backup/ | grep ansible_data
drwxr-xr-x 2 root root       275 Jan  7 12:10 ansible_data_orig_20190107
drwxr-xr-x 2 root root        87 Jan  7 13:11 ansible_data
[root@ansible-server ~]# 
[root@ansible-server ~]# ls -ltr /backup/ansible_data
total 512
-rw-r--r-- 1 root root 522837 Jan  7 13:11 tower-backup-2019-01-07-13:10:22.tar.gz
lrwxrwxrwx 1 root root     60 Jan  7 13:11 tower-backup-latest.tar.gz -> /backup/ansible_data/tower-backup-2019-01-07-13:10:22.tar.gz
[root@ansible-server ~]# 
[root@ansible-server ~]# du -sh /backup/ansible_data/*
512K    /backup/ansible_data/tower-backup-2019-01-07-13:10:22.tar.gz
0       /backup/ansible_data/tower-backup-latest.tar.gz
[root@ansible-server ~]# 

可以看到,目录确实被自动创建了,并且,备份数据已经生成了。

至此,ANSIBLE TOWER的备份任务,设置完成。
——————————————————————
Done。

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒