try: backupService.initDuplicity(BACKUP_PATH, backend) except Exception as e: logger.info( "No backup found (probably the first) or already initialized") pass # We dump the container if needed # Get all services (potential dump) if DISABLE_DUMP != "true": listServices = rancherService.getServices() listDump = backupService.searchDump(BACKUP_PATH, listServices, listSettings) backupService.runDump(listDump) # We dump the rancher settings if DISABLE_DUMP_RANCHER != "true": listStacks = rancherService.getStacks() backupService.dumpStacksSettings(BACKUP_PATH + '/rancher', listStacks) # We run the backup backupService.runDuplicity(BACKUP_PATH, backend, BK_FULL_FREQ, BK_KEEP_FULL, BK_KEEP_FULL_CHAIN, VOLUME_SIZE) except Exception as e: logger.error("Unattented error occur : %s", e.message) logger.error(traceback.format_exc()) sys.exit(1)
# We dump the databases services if needed if settings['module']['databases'] is True: logger.info("Start to dump databases...") listServices = rancherService.getServices() listDump = backupService.searchDump( settings['duplicity']['source-path'] + '/dump', listServices) backupService.runDump(listDump) logger.info("The dumping databases is finished.") # We dump the rancher stack settings if needed if settings['module']['stack'] is True: logger.info("Start to export stack as json...") listStacks = rancherService.getStacks() backupService.dumpStacksSettings( settings['duplicity']['source-path'] + '/rancher', listStacks) logger.info("The exporting of stack if finished") # We dump the rancher database if needed if settings['module']['rancher-db'] is True: logger.info("Start to dump Rancher database...") backupService.dumpRancherDatabase( settings['duplicity']['source-path'] + '/rancher', rancherDatabaseSettings) logger.info("The Rancher database dumping is finished.") # We run the backup if os.getenv("BACKUP_DUPLICITY_enable") == "true": logger.info( "Start to externalize the backup with Duplicity...")
def testdumpStacksSettings(self, mock_makedirs, mock_file): backupService = Backup() listStack = [ { "id": "1e44", "type": "environment", "links": { "self": "/v1/projects/1a203/environments/1e44", "account": "/v1/projects/1a203/environments/1e44/account", "services": "/v1/projects/1a203/environments/1e44/services", "composeConfig": "/v1/projects/1a203/environments/1e44/composeconfig", }, "actions": { "upgrade": "/v1/projects/1a203/environments/1e44/?action=upgrade", "update": "/v1/projects/1a203/environments/1e44/?action=update", "remove": "/v1/projects/1a203/environments/1e44/?action=remove", "addoutputs": "/v1/projects/1a203/environments/1e44/?action=addoutputs", "activateservices": "/v1/projects/1a203/environments/1e44/?action=activateservices", "deactivateservices": "/v1/projects/1a203/environments/1e44/?action=deactivateservices", "exportconfig": "/v1/projects/1a203/environments/1e44/?action=exportconfig", }, "name": "Default", "state": "active", "accountId": "1a203", "created": "2016-09-14T07:41:09Z", "createdTS": 1473838869000, "description": None, "dockerCompose": None, "environment": None, "externalId": None, "healthState": "healthy", "kind": "environment", "outputs": None, "previousEnvironment": None, "previousExternalId": None, "rancherCompose": None, "removed": None, "startOnCreate": None, "transitioning": "no", "transitioningMessage": None, "transitioningProgress": None, "uuid": "e2c02a5f-5585-4ee7-8bdb-3672e874de10", 'settings': { "id": None, "type": "composeConfig", "links": {}, "actions": {}, "dockerComposeConfig": "test:\r\n environment:\r\n BACKEND: ftp://test\r\n FTP_PASSWORD: test\r\n CRON_SCHEDULE: 0 0 * * *\r\n BK_FULL_FREQ: 1D\r\n BK_KEEP_FULL: '7'\r\n BK_KEEP_FULL_CHAIN: '1'\r\n VOLUME_SIZE: '1000'\r\n RANCHER_API_URL: https://test/v1/projects/1a203\r\n RANCHER_API_KEY: test\r\n RANCHER_API_SECRET: test\r\n DEBUG: 'false'\r\n labels:\r\n io.rancher.container.pull_image: always\r\n backup.disable: 'true'\r\n tty: true\r\n image: webcenter/rancher-backup:develop\r\n privileged: true\r\n stdin_open: true\r\nmariadb:\r\n environment:\r\n MYSQL_ROOT_PASSWORD: root-pass\r\n MYSQL_DATABASE: teampass\r\n MYSQL_PASSWORD: user-pass\r\n MYSQL_USER: teampass\r\n labels:\r\n io.rancher.container.pull_image: always\r\n tty: true\r\n image: mariadb\r\n stdin_open: true\r\npostgres:\r\n environment:\r\n PGDATA: /var/lib/postgresql/data/pgdata\r\n POSTGRES_DB: alfresco\r\n POSTGRES_USER: user\r\n POSTGRES_PASSWORD: pass\r\n labels:\r\n io.rancher.container.pull_image: always\r\n tty: true\r\n image: postgres:9.4\r\n volumes:\r\n - /data/postgres:/var/lib/postgresql/data/pgdata\r\n stdin_open: true\r\nmysql:\r\n environment:\r\n MYSQL_ROOT_PASSWORD: root-pass\r\n MYSQL_DATABASE: teampass\r\n MYSQL_PASSWORD: user-pass\r\n MYSQL_USER: teampass\r\n labels:\r\n io.rancher.container.pull_image: always\r\n tty: true\r\n image: mysql/mysql-server:5.5\r\n stdin_open: true\r\n", "rancherComposeConfig": "test:\r\n scale: 1\r\nmariadb:\r\n scale: 1\r\npostgres:\r\n scale: 1\r\nmysql:\r\n scale: 1\r\n", } }, { "id": "1e45", "type": "environment", "links": { "self": "/v1/projects/1a203/environments/1e45", "account": "/v1/projects/1a203/environments/1e45/account", "services": "/v1/projects/1a203/environments/1e45/services", "composeConfig": "/v1/projects/1a203/environments/1e45/composeconfig", }, "actions": { "upgrade": "/v1/projects/1a203/environments/1e45/?action=upgrade", "update": "/v1/projects/1a203/environments/1e45/?action=update", "remove": "/v1/projects/1a203/environments/1e45/?action=remove", "addoutputs": "/v1/projects/1a203/environments/1e45/?action=addoutputs", "activateservices": "/v1/projects/1a203/environments/1e45/?action=activateservices", "deactivateservices": "/v1/projects/1a203/environments/1e45/?action=deactivateservices", "exportconfig": "/v1/projects/1a203/environments/1e45/?action=exportconfig", }, "name": "seedbox", "state": "active", "accountId": "1a203", "created": "2016-09-14T07:43:01Z", "createdTS": 1473838981000, "description": None, "dockerCompose": "plex:\n ports:\n - 32400:32400/tcp\n environment:\n PLEX_USERNAME: user\n PLEX_PASSWORD: pass\n PLEX_DISABLE_SECURITY: '0'\n SKIP_CHOWN_CONFIG: 'false'\n PLEX_ALLOWED_NETWORKS: 10.0.0.0/8\n labels:\n io.rancher.container.pull_image: always\n tty: true\n hostname: home\n image: timhaak/plex\n volumes:\n - /mnt/nas:/data\n - /data/seedbox/plex:/config\n stdin_open: true", "environment": None, "externalId": "", "healthState": "healthy", "kind": "environment", "outputs": None, "previousEnvironment": None, "previousExternalId": None, "rancherCompose": "plex:\n scale: 1", "removed": None, "startOnCreate": True, "transitioning": "no", "transitioningMessage": None, "transitioningProgress": None, "uuid": "1a5c08a4-c851-4651-b516-e950982d617b", 'settings': { "id": None, "type": "composeConfig", "links": {}, "actions": {}, "dockerComposeConfig": "plex:\r\n ports:\r\n - 32400:32400/tcp\r\n environment:\r\n PLEX_ALLOWED_NETWORKS: 10.0.0.0/8\r\n PLEX_DISABLE_SECURITY: '0'\r\n PLEX_PASSWORD: test\r\n PLEX_USERNAME: test\r\n SKIP_CHOWN_CONFIG: 'false'\r\n labels:\r\n io.rancher.container.pull_image: always\r\n tty: true\r\n hostname: home\r\n image: timhaak/plex\r\n volumes:\r\n - /mnt/nas:/data\r\n - /data/seedbox/plex:/config\r\n stdin_open: true\r\n", "rancherComposeConfig": "plex:\r\n scale: 1\r\n", } }, { "id": "1e48", "type": "environment", "links": { "self": "/v1/projects/1a203/environments/1e48", "account": "/v1/projects/1a203/environments/1e48/account", "services": "/v1/projects/1a203/environments/1e48/services", "composeConfig": "/v1/projects/1a203/environments/1e48/composeconfig", }, "actions": { "upgrade": "/v1/projects/1a203/environments/1e48/?action=upgrade", "update": "/v1/projects/1a203/environments/1e48/?action=update", "remove": "/v1/projects/1a203/environments/1e48/?action=remove", "addoutputs": "/v1/projects/1a203/environments/1e48/?action=addoutputs", "activateservices": "/v1/projects/1a203/environments/1e48/?action=activateservices", "deactivateservices": "/v1/projects/1a203/environments/1e48/?action=deactivateservices", "exportconfig": "/v1/projects/1a203/environments/1e48/?action=exportconfig", }, "name": "test", "state": "active", "accountId": "1a203", "created": "2016-10-21T09:21:46Z", "createdTS": 1477041706000, "description": None, "dockerCompose": None, "environment": None, "externalId": "", "healthState": "healthy", "kind": "environment", "outputs": None, "previousEnvironment": None, "previousExternalId": None, "rancherCompose": None, "removed": None, "startOnCreate": True, "transitioning": "no", "transitioningMessage": None, "transitioningProgress": None, "uuid": "0fec46ea-99d5-494d-b430-eac97beb419f", "settings": { "id": None, "type": "composeConfig", "links": {}, "actions": {}, "dockerComposeConfig": "elasticsearch:\r\n labels:\r\n io.rancher.container.pull_image: always\r\n tty: true\r\n image: elasticsearch\r\n stdin_open: true\r\nmongo:\r\n labels:\r\n io.rancher.container.pull_image: always\r\n tty: true\r\n command:\r\n - mongod\r\n - --smallfiles\r\n - --oplogSize\r\n - '128'\r\n image: mongo\r\n stdin_open: true\r\n", "rancherComposeConfig": "elasticsearch:\r\n scale: 1\r\nmongo:\r\n scale: 1\r\n", } }, { "id": "1e49", "type": "environment", "links": { "self": "/v1/projects/1a203/environments/1e49", "account": "/v1/projects/1a203/environments/1e49/account", "services": "/v1/projects/1a203/environments/1e49/services", "composeConfig": "/v1/projects/1a203/environments/1e49/composeconfig", }, "actions": { "upgrade": "/v1/projects/1a203/environments/1e49/?action=upgrade", "update": "/v1/projects/1a203/environments/1e49/?action=update", "remove": "/v1/projects/1a203/environments/1e49/?action=remove", "addoutputs": "/v1/projects/1a203/environments/1e49/?action=addoutputs", "activateservices": "/v1/projects/1a203/environments/1e49/?action=activateservices", "deactivateservices": "/v1/projects/1a203/environments/1e49/?action=deactivateservices", "exportconfig": "/v1/projects/1a203/environments/1e49/?action=exportconfig", }, "name": "lb", "state": "active", "accountId": "1a203", "created": "2016-10-24T09:55:44Z", "createdTS": 1477302944000, "description": None, "dockerCompose": None, "environment": None, "externalId": "", "healthState": "healthy", "kind": "environment", "outputs": None, "previousEnvironment": None, "previousExternalId": None, "rancherCompose": None, "removed": None, "startOnCreate": True, "transitioning": "no", "transitioningMessage": None, "transitioningProgress": None, "uuid": "7ac2a47f-b084-4002-a2fb-919a1e738bda", "settings": { "id": None, "type": "composeConfig", "links": {}, "actions": {}, "dockerComposeConfig": "{}\r\n", "rancherComposeConfig": "{}\r\n", } }, ] backupService.dumpStacksSettings('/backup', listStack) #print("Call makedirs: %s", mock_makedirs.call_args_list) #print("Call open: %s", mock_file.call_args_list) mock_makedirs.assert_any_call('/backup/Default') mock_makedirs.assert_any_call('/backup/seedbox') mock_makedirs.assert_any_call('/backup/test') mock_makedirs.assert_any_call('/backup/lb') mock_file.assert_any_call('/backup/Default/docker-compose.yml', 'w') mock_file.assert_any_call('/backup/Default/rancher-compose.yml', 'w') mock_file.assert_any_call('/backup/seedbox/docker-compose.yml', 'w') mock_file.assert_any_call('/backup/seedbox/rancher-compose.yml', 'w') mock_file.assert_any_call('/backup/test/docker-compose.yml', 'w') mock_file.assert_any_call('/backup/test/rancher-compose.yml', 'w') mock_file.assert_any_call('/backup/lb/docker-compose.yml', 'w') mock_file.assert_any_call('/backup/lb/rancher-compose.yml', 'w')