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

View File

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

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-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"
vmList = []
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/")

View File

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