Compare commits

...

5 Commits

5 changed files with 34 additions and 11 deletions

View File

@@ -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)

View File

@@ -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
View File

@@ -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/")

View File

@@ -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 ..