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")
|
Loading…
Add table
Add a link
Reference in a new issue