backup-server: Initial version of role
This commit is contained in:
parent
3c4034f80b
commit
bf2f2e1f92
3 changed files with 116 additions and 0 deletions
51
roles/backup-server/files/backup-bitbucket.py
Normal file
51
roles/backup-server/files/backup-bitbucket.py
Normal 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")
|
64
roles/backup-server/tasks/main.yml
Normal file
64
roles/backup-server/tasks/main.yml
Normal 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
|
|
@ -8,3 +8,4 @@ id user group notes
|
|||
-------------------------------------------------------------------------------
|
||||
1001 mirror mirror
|
||||
1002 certbot certbot
|
||||
1003 backup backup
|
||||
|
|
Loading…
Add table
Reference in a new issue