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"))
|
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/"
|
backupPath = "./build/backup/"
|
||||||
@@ -107,7 +107,8 @@ def createBackupScriptStructure(backupList, baseDomain="", icingaOnly=False):
|
|||||||
|
|
||||||
rsyncScript = rsyncScriptTemplate.render(hostname=hostname, token=icingaToken,
|
rsyncScript = rsyncScriptTemplate.render(hostname=hostname, token=icingaToken,
|
||||||
hostname_base=hostnameBase,
|
hostname_base=hostnameBase,
|
||||||
size_change_commands=sizeChangeNotifyCommands)
|
size_change_commands=sizeChangeNotifyCommands,
|
||||||
|
backup_no_async_icinga=backup_no_async_icinga)
|
||||||
|
|
||||||
# build all filter #
|
# build all filter #
|
||||||
rsyncFilterAll = rsyncFilterTemplate.render(paths=pathsAll)
|
rsyncFilterAll = rsyncFilterTemplate.render(paths=pathsAll)
|
||||||
@@ -185,12 +186,20 @@ def sizeChanged(hostname, pathsToOptions, path):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
# check server #
|
# 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")
|
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, encoding="utf-8")
|
||||||
stdout, stderr = p.communicate()
|
stdout, stderr = p.communicate()
|
||||||
if p.wait() != 0:
|
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))
|
stderr, stdout, hostname))
|
||||||
|
return []
|
||||||
|
|
||||||
# parse response #
|
# parse response #
|
||||||
result = json.loads(stdout)
|
result = json.loads(stdout)
|
||||||
|
|||||||
@@ -88,18 +88,19 @@ if __name__ == "__main__":
|
|||||||
vm_skip_list = ["harbor-registry", "backup", #"irc-new", #"kube1",
|
vm_skip_list = ["harbor-registry", "backup", #"irc-new", #"kube1",
|
||||||
"kube2",
|
"kube2",
|
||||||
"kube1",
|
"kube1",
|
||||||
#"mail",
|
"mail",
|
||||||
|
"opensearch",
|
||||||
"monitoring",
|
"monitoring",
|
||||||
#"paperless",
|
"paperless",
|
||||||
"prometheus", "signal",
|
"prometheus", "signal",
|
||||||
"steam-master", "zabbix",
|
"steam-master", "zabbix",
|
||||||
"git",
|
"git",
|
||||||
#"kathi", "usermanagement", "vpn", "ths", "nextcloud-athq"
|
"kathi", "usermanagement", "vpn", "ths", "nextcloud-athq"
|
||||||
]
|
]
|
||||||
if vm.name() in vm_skip_list:
|
if vm.name() in vm_skip_list:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
vm_white_list = []
|
vm_white_list = ["kathi"]
|
||||||
if vm_white_list:
|
if vm_white_list:
|
||||||
if not vm.name() in vm_white_list:
|
if not vm.name() in vm_white_list:
|
||||||
continue
|
continue
|
||||||
|
|||||||
15
main.py
15
main.py
@@ -21,13 +21,21 @@ if __name__ == "__main__":
|
|||||||
parser.add_argument("--skip-nginx", action="store_const", default=True, const=False)
|
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-icinga", action="store_const", default=True, const=False)
|
||||||
parser.add_argument("--skip-ssh-config", 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()
|
args = parser.parse_args()
|
||||||
|
|
||||||
FILE = "./config/vms.json"
|
FILE = "./config/vms.json"
|
||||||
vmList = []
|
vmList = []
|
||||||
skipVirsh = not any([args.skip_ansible, args.skip_nginx,
|
skipVirsh = not any([args.skip_ansible, args.skip_nginx,
|
||||||
args.skip_icinga, args.skip_ssh_config])
|
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:
|
with open(FILE) as f:
|
||||||
jsonList = json.load(f)
|
jsonList = json.load(f)
|
||||||
for obj in jsonList:
|
for obj in jsonList:
|
||||||
@@ -62,8 +70,9 @@ if __name__ == "__main__":
|
|||||||
# backup #
|
# backup #
|
||||||
with open("./config/backup.json") as f:
|
with open("./config/backup.json") as f:
|
||||||
backup.createBackupScriptStructure(json.load(f), baseDomain=MASTER_ADDRESS,
|
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 #
|
# 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/")
|
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 }}"
|
TOKEN="{{ token }}"
|
||||||
|
|
||||||
if [ $RSYNC_SUCCESS -eq 0 ]; then
|
if [ $RSYNC_SUCCESS -eq 0 ]; then
|
||||||
|
{% if not backup_no_async_icinga %}
|
||||||
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
|
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
|
||||||
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"OK\", \"info\": \"\"}"
|
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"OK\", \"info\": \"\"}"
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# if size changed was copied save new size #
|
# if size changed was copied save new size #
|
||||||
{% if not size_change_commands %}
|
{% if not size_change_commands %}
|
||||||
@@ -56,8 +58,10 @@ if [ $RSYNC_SUCCESS -eq 0 ]; then
|
|||||||
{{ cmd }}
|
{{ cmd }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
else
|
else
|
||||||
|
{% if not backup_no_async_icinga %}
|
||||||
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
|
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
|
||||||
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"CRITICAL\", \"info\": \"\"}"
|
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"CRITICAL\", \"info\": \"\"}"
|
||||||
|
{% endif %}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd ..
|
cd ..
|
||||||
|
|||||||
Reference in New Issue
Block a user