backup-server: Initial version of role

This commit is contained in:
Timo Makinen 2021-09-08 17:10:48 +00:00
parent 3c4034f80b
commit bf2f2e1f92
3 changed files with 116 additions and 0 deletions

View file

@ -0,0 +1,51 @@
#!/usr/bin/env python3
import os
import json
from subprocess import call
from urllib.request import urlopen
USERS = ["tmakinen"]
BACKUPDIR = "/srv/backup/bitbucket.org"
def repolist(username):
f = urlopen(f"https://api.bitbucket.org/2.0/repositories/{username}")
data = json.load(f)
f.close()
for repo in data["values"]:
yield (
{
"name": repo["name"],
"scm": repo["scm"],
"wiki": repo["has_wiki"],
"issues": repo["has_issues"],
}
)
def gitbackup(destination, repo):
if not os.path.exists(destination):
os.makedirs(destination)
call(["git", "clone", "--quiet", repo, destination])
else:
os.chdir(destination)
call(["git", f"--git-dir={destination}/.git", "pull", "--quiet"])
if __name__ == "__main__":
for user in USERS:
for repo in repolist(user):
if repo["scm"] == "git":
gitbackup(
f"{BACKUPDIR}/{user}/{repo['name']}",
f"https://bitbucket.org/{user}/{repo['name']}.git",
)
if repo["wiki"]:
gitbackup(
f"{BACKUPDIR}/{user}/{repo['name']}-wiki",
f"https://bitbucket.org/{user}/{repo['name']}.git/wiki",
)
else:
raise NotImplementedError("{repo['scm']} repositories not supported")

View file

@ -0,0 +1,64 @@
---
- name: install packages
package:
name: "{{ item }}"
state: installed
with_items:
- git
- rclone
- name: create backup group
group:
name: backup
gid: 1003
- name: create backup user
user:
name: backup
comment: Backup Service
createhome: false
group: backup
home: /var/empty
shell: /bin/sh
uid: 1003
- name: create backup directory
file:
path: /export/backup
state: directory
mode: 0755
owner: root
group: "{{ ansible_wheel }}"
- name: link backup directory
file:
dest: /srv/backup
src: /export/backup
state: link
owner: root
group: "{{ ansible_wheel }}"
follow: false
- name: create bitbucket backup directory
file:
path: /export/backup/bitbucket.org
state: directory
mode: 0775
owner: root
group: backup
- name: install bitbucket backup script
copy:
dest: /usr/local/sbin/backup-bitbucket
src: backup-bitbucket.py
mode: 0755
owner: root
group: "{{ ansible_wheel }}"
- name: add bitbucket backup cron job
cron:
name: bitbucket-backup
job: /usr/local/sbin/backup-bitbucket
hour: "03"
minute: "10"
user: backup

View file

@ -8,3 +8,4 @@ id user group notes
-------------------------------------------------------------------------------
1001 mirror mirror
1002 certbot certbot
1003 backup backup