mirror of
https://github.com/FAUSheppy/athq-vm-management
synced 2025-12-06 05:41:35 +01:00
Compare commits
5 Commits
105ce44026
...
a7abf4c5c1
| Author | SHA1 | Date | |
|---|---|---|---|
| a7abf4c5c1 | |||
| f7e4d95ef9 | |||
| 581e741470 | |||
| 7f488a984b | |||
| 7ff0cba340 |
17
backup.py
17
backup.py
@@ -6,7 +6,7 @@ import json
|
||||
|
||||
environment = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath="./templates"))
|
||||
|
||||
def createBackupScriptStructure(backupList, baseDomain="", icingaOnly=False):
|
||||
def createBackupScriptStructure(backupList, baseDomain="", icingaOnly=False, backup_no_async_icinga=True):
|
||||
|
||||
|
||||
backupPath = "./build/backup/"
|
||||
@@ -107,7 +107,8 @@ def createBackupScriptStructure(backupList, baseDomain="", icingaOnly=False):
|
||||
|
||||
rsyncScript = rsyncScriptTemplate.render(hostname=hostname, token=icingaToken,
|
||||
hostname_base=hostnameBase,
|
||||
size_change_commands=sizeChangeNotifyCommands)
|
||||
size_change_commands=sizeChangeNotifyCommands,
|
||||
backup_no_async_icinga=backup_no_async_icinga)
|
||||
|
||||
# build all filter #
|
||||
rsyncFilterAll = rsyncFilterTemplate.render(paths=pathsAll)
|
||||
@@ -185,12 +186,20 @@ def sizeChanged(hostname, pathsToOptions, path):
|
||||
return True
|
||||
|
||||
# check server #
|
||||
cmd = ["ssh", hostname, "-t", "/opt/check_dir_size_for_backup.py", path ]
|
||||
cmd = [
|
||||
"ssh", hostname,
|
||||
"-o", "PasswordAuthentication=no",
|
||||
"-o", "ConnectTimeout=3",
|
||||
"-t", "/opt/check_dir_size_for_backup.py",
|
||||
path
|
||||
]
|
||||
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, encoding="utf-8")
|
||||
stdout, stderr = p.communicate()
|
||||
if p.wait() != 0:
|
||||
raise OSError("ssh commmand for backup size info failed '{}' - '{}' Host: {}".format(
|
||||
print("Warning: ssh commmand for backup size info failed '{}' - '{}' Host: {}".format(
|
||||
stderr, stdout, hostname))
|
||||
return []
|
||||
|
||||
# parse response #
|
||||
result = json.loads(stdout)
|
||||
|
||||
@@ -88,18 +88,19 @@ if __name__ == "__main__":
|
||||
vm_skip_list = ["harbor-registry", "backup", #"irc-new", #"kube1",
|
||||
"kube2",
|
||||
"kube1",
|
||||
#"mail",
|
||||
"mail",
|
||||
"opensearch",
|
||||
"monitoring",
|
||||
#"paperless",
|
||||
"paperless",
|
||||
"prometheus", "signal",
|
||||
"steam-master", "zabbix",
|
||||
"git",
|
||||
#"kathi", "usermanagement", "vpn", "ths", "nextcloud-athq"
|
||||
"kathi", "usermanagement", "vpn", "ths", "nextcloud-athq"
|
||||
]
|
||||
if vm.name() in vm_skip_list:
|
||||
continue
|
||||
|
||||
vm_white_list = []
|
||||
vm_white_list = ["kathi"]
|
||||
if vm_white_list:
|
||||
if not vm.name() in vm_white_list:
|
||||
continue
|
||||
|
||||
13
main.py
13
main.py
@@ -21,6 +21,8 @@ if __name__ == "__main__":
|
||||
parser.add_argument("--skip-nginx", action="store_const", default=True, const=False)
|
||||
parser.add_argument("--skip-icinga", action="store_const", default=True, const=False)
|
||||
parser.add_argument("--skip-ssh-config", action="store_const", default=True, const=False)
|
||||
parser.add_argument("--do-nginx-map-cert-manager", action="store_const", default=False, const=True)
|
||||
parser.add_argument("--backup-no-async-icinga", action="store_const", default=False, const=True)
|
||||
args = parser.parse_args()
|
||||
|
||||
FILE = "./config/vms.json"
|
||||
@@ -28,6 +30,12 @@ if __name__ == "__main__":
|
||||
skipVirsh = not any([args.skip_ansible, args.skip_nginx,
|
||||
args.skip_icinga, args.skip_ssh_config])
|
||||
|
||||
# set master address #
|
||||
OPTIONAL_MASTER_ADDRESS_FILE="master-address.txt"
|
||||
if os.path.isfile(OPTIONAL_MASTER_ADDRESS_FILE):
|
||||
with open(OPTIONAL_MASTER_ADDRESS_FILE) as f:
|
||||
MASTER_ADDRESS = f.read().strip()
|
||||
|
||||
with open(FILE) as f:
|
||||
jsonList = json.load(f)
|
||||
for obj in jsonList:
|
||||
@@ -62,8 +70,9 @@ if __name__ == "__main__":
|
||||
# backup #
|
||||
with open("./config/backup.json") as f:
|
||||
backup.createBackupScriptStructure(json.load(f), baseDomain=MASTER_ADDRESS,
|
||||
icingaOnly=not args.backup)
|
||||
icingaOnly=not args.backup,
|
||||
backup_no_async_icinga=args.backup_no_async_icinga)
|
||||
|
||||
# copy nginx maps #
|
||||
if not args.backup:
|
||||
if not args.backup and args.do_nginx_map_cert_manager:
|
||||
os.system("rsync templates/nginx_maps.j2 root@192.168.122.104:/data/certificate-manager/")
|
||||
|
||||
@@ -45,8 +45,10 @@ SERVICE="backup_{{ hostname_base }}"
|
||||
TOKEN="{{ token }}"
|
||||
|
||||
if [ $RSYNC_SUCCESS -eq 0 ]; then
|
||||
{% if not backup_no_async_icinga %}
|
||||
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
|
||||
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"OK\", \"info\": \"\"}"
|
||||
{% endif %}
|
||||
|
||||
# if size changed was copied save new size #
|
||||
{% if not size_change_commands %}
|
||||
@@ -56,8 +58,10 @@ if [ $RSYNC_SUCCESS -eq 0 ]; then
|
||||
{{ cmd }}
|
||||
{% endfor %}
|
||||
else
|
||||
{% if not backup_no_async_icinga %}
|
||||
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
|
||||
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"CRITICAL\", \"info\": \"\"}"
|
||||
{% endif %}
|
||||
fi
|
||||
|
||||
cd ..
|
||||
|
||||
Reference in New Issue
Block a user