Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
smartpublicbuilding
openhab-pb-stack
Commits
fdd08177
Commit
fdd08177
authored
Mar 21, 2019
by
dobli
Browse files
added basic backup support
parent
08d627d9
Changes
2
Hide whitespace changes
Inline
Side-by-side
building_manager.py
View file @
fdd08177
...
...
@@ -98,6 +98,8 @@ class Service(ServiceBody, Enum):
POSTGRES
=
ServiceBody
(
"Postgre SQL"
,
"postgres"
,
True
,
False
)
MQTT
=
ServiceBody
(
"Mosquitto MQTT Broker"
,
"mqtt"
,
True
,
False
)
FILES
=
ServiceBody
(
"File Manager"
,
"files"
,
False
,
True
,
icon
=
'folder'
)
BACKUP
=
ServiceBody
(
"Volumerize Backups"
,
"backup"
,
False
,
False
,
sftp
=
True
)
@
classmethod
def
service_by_prefix
(
cls
,
prefix
):
...
...
@@ -278,7 +280,7 @@ def add_postgres_service(base_dir, hostname, postfix=None):
def
add_file_service
(
base_dir
,
hostname
):
"""Generates a
n
file manager entry and adds it to the compose file
"""Generates a file manager entry and adds it to the compose file
:base_dir: base directory for configuration files
:hostname: names of host that the services is added to
...
...
@@ -287,7 +289,7 @@ def add_file_service(base_dir, hostname):
# compose file
compose_path
=
base_path
+
'/'
+
COMPOSE_NAME
# service name
service_name
=
f
'
files
_
{
hostname
}
'
service_name
=
f
'
{
Service
.
FILES
.
prefix
}
_
{
hostname
}
'
# template
template
=
get_service_template
(
base_dir
,
Service
.
FILES
.
prefix
)
# add command that sets base url
...
...
@@ -308,6 +310,32 @@ def add_file_service(base_dir, hostname):
add_or_update_compose_service
(
compose_path
,
service_name
,
template
)
def
add_volumerize_service
(
base_dir
,
hostname
):
"""Generates a volumerize backup entry and adds it to the compose file
:base_dir: base directory for configuration files
:hostname: names of host that the services is added to
"""
base_path
=
base_dir
+
'/'
+
CUSTOM_DIR
# compose file
compose_path
=
base_path
+
'/'
+
COMPOSE_NAME
# service name
service_name
=
f
'
{
Service
.
BACKUP
.
prefix
}
_
{
hostname
}
'
# template
template
=
get_service_template
(
base_dir
,
Service
.
BACKUP
.
prefix
)
# only label contraint is building
template
[
'deploy'
][
'placement'
][
'constraints'
][
0
]
=
(
f
"
{
CONSTRAINTS
[
'building'
]
}
==
{
hostname
}
"
)
# attach volumes
volume_base
=
'/source/'
template
[
'volumes'
].
extend
(
get_attachable_volume_list
(
base_dir
,
volume_base
,
hostname
))
add_or_update_compose_service
(
compose_path
,
service_name
,
template
)
# Functions to delete services
def
delete_service
(
base_dir
,
service_name
):
"""Deletes a service from the compose file
...
...
@@ -417,9 +445,13 @@ def get_attachable_volume_list(base_dir, volume_base, host):
for
host_service
in
host_services
:
name
,
instance
=
get_service_entry_info
(
host_service
)
volume_service
=
Service
.
service_by_prefix
(
name
)
# only apply to services that want their volumes attatched
if
volume_service
.
sftp
:
volumes
=
get_service_volumes
(
base_dir
,
host_service
)
vlist
=
[
f
'
{
v
}
:
{
volume_base
}{
v
}
'
for
v
in
volumes
]
# collect volumes not already in list
vlist
=
[
f
'
{
v
}
:
{
volume_base
}{
v
}
'
for
v
in
volumes
if
f
'
{
v
}
:
{
volume_base
}{
v
}
'
not
in
volume_list
]
volume_list
.
extend
(
vlist
)
return
volume_list
...
...
@@ -752,7 +784,8 @@ def generate_id_rsa_files(base_dir):
# execute ssh-keygen
id_result
=
run
(
[
'ssh-keygen'
,
'-t'
,
'rsa'
,
'-b'
,
'4096'
,
'-f'
,
id_path
,
'-N'
,
''
],
[
'ssh-keygen'
,
'-m'
,
'PEM'
,
'-t'
,
'rsa'
,
'-b'
,
'4096'
,
'-f'
,
id_path
,
'-N'
,
''
],
universal_newlines
=
True
,
stdout
=
PIPE
)
return
id_result
.
returncode
==
0
...
...
@@ -837,7 +870,8 @@ def generate_volumerize_file(base_dir, hosts):
for
h
in
hosts
:
host_config
=
{
'description'
:
f
'Backup Server on
{
h
}
'
,
'url'
:
f
'sftp://ohadmin@sftp_
{
h
}
://home/ohadmin/backup_data/
{
h
}
'
'url'
:
f
'sftp://ohadmin@sftp_
{
h
}
:'
f
'//home/ohadmin/backup_data/backup/
{
h
}
'
}
configs
.
append
(
host_config
)
...
...
@@ -1410,7 +1444,7 @@ def init_menu(args):
generate_initial_compose
(
base_dir
)
# Generate config files based on input
username
=
ADMIN_USER
generate_sftp_file
(
base_dir
,
username
,
password
)
generate_sftp_file
(
base_dir
,
username
,
password
,
[
'backup_data/backup'
]
)
generate_postgres_files
(
base_dir
,
username
,
password
)
generate_mosquitto_file
(
base_dir
,
username
,
password
)
generate_traefik_file
(
base_dir
,
username
,
password
)
...
...
@@ -1462,6 +1496,8 @@ def init_machine_menu(base_dir, host, increment):
add_mqtt_service
(
base_dir
,
host
,
increment
)
if
Service
.
POSTGRES
in
services
:
add_postgres_service
(
base_dir
,
host
)
if
Service
.
BACKUP
in
services
:
add_volumerize_service
(
base_dir
,
host
)
if
Service
.
FILES
in
services
:
add_file_service
(
base_dir
,
host
)
if
Service
.
SFTP
in
services
:
...
...
template_configs/docker-templates.yml
View file @
fdd08177
...
...
@@ -52,11 +52,6 @@ services:
backup
:
image
:
blacklabelops/volumerize
volumes
:
-
"
openhab_userdata:/source/openhab_userdata"
-
"
openhab_conf:/source/openhab_conf"
-
"
openhab_addons:/source/openhab_addons"
-
"
nodered_data:/source/nodered_data"
-
"
influxdb_data:/source/influxdb_data"
-
"
backup_cache:/volumerize-cache"
-
"
backup_data:/backup"
configs
:
...
...
@@ -70,7 +65,7 @@ services:
mode
:
0400
environment
:
-
VOLUMERIZE_SOURCE=/source
-
VOLUMERIZE_TARGET=
'
multi:///backup_config.json?mode=mirror&onfail=abort
'
-
VOLUMERIZE_TARGET=multi:///backup_config.json?mode=mirror&onfail=abort
-
VOLUMERIZE_DUPLICITY_OPTIONS=--ssh-options "-oStrictHostKeyChecking=no"
networks
:
-
habnet
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment