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
b00e905a
Commit
b00e905a
authored
Jan 14, 2019
by
dobli
Browse files
Added menu to init and join swarm
parent
e014da83
Changes
1
Hide whitespace changes
Inline
Side-by-side
building_manager.py
View file @
b00e905a
...
...
@@ -9,6 +9,9 @@ CONFIG_DIRS = [
'influxdb'
,
'mosquitto'
,
'nodered'
,
'ssh'
,
'treafik'
,
'volumerize'
]
#Default Swarm port
SWARM_PORT
=
2377
# ******************************
# Config file functions {{{
...
...
@@ -75,6 +78,55 @@ def get_machine_env(machine_name):
return
machine_envs
def
get_machine_ip
(
machine_name
):
"""Asks for the ip of the docker machine
:machine_name: Name of the machine to use for init
"""
from
subprocess
import
run
machine_result
=
run
([
'docker-machine'
,
'ip'
,
machine_name
],
text
=
True
,
capture_output
=
True
)
return
machine_result
.
stdout
def
init_swarm_machine
(
machine_name
):
"""Creates a new swarm with the specified machine as leader
:machine_name: Name of the machine to use for init
"""
from
subprocess
import
run
machine_ip
=
get_machine_ip
(
machine_name
)
init_command
=
'docker swarm init --advertise-addr '
+
machine_ip
machine_result
=
run
([
'docker-machine'
,
'ssh'
,
machine_name
,
init_command
],
text
=
True
,
capture_output
=
True
)
return
machine_result
.
stdout
def
join_swarm_machine
(
machine_name
,
leader_name
):
"""Joins the swarm of the specified leader
:machine_name: Name of the machine to join a swarm
:leader_name: Name of the swarm leader machine
"""
from
subprocess
import
run
token_command
=
'docker swarm join-token manager -q'
token_result
=
run
([
'docker-machine'
,
'ssh'
,
leader_name
,
token_command
],
text
=
True
,
capture_output
=
True
)
token
=
token_result
.
stdout
leader_ip
=
get_machine_ip
(
leader_name
)
join_command
=
'docker swarm join --token {} {}{}'
.
format
(
token
,
leader_ip
,
SWARM_PORT
)
join_result
=
run
([
'docker-machine'
,
'ssh'
,
machine_name
,
join_command
],
text
=
True
,
capture_output
=
True
)
return
join_result
.
stdout
# }}}
...
...
@@ -246,16 +298,31 @@ def init_menu():
'type'
:
'checkbox'
,
'name'
:
'machines'
,
'message'
:
'What docker machines will be used?'
,
'choices'
:
[{
'name'
:
m
}
for
m
in
get_machine_list
()]
'choices'
:
generate_checkbox_choices
(
get_machine_list
())
},
]
answers
=
prompt
(
questions
)
leader
=
None
for
machine
in
answers
[
'machines'
]:
# init swarm with first machine
if
leader
is
None
:
leader
=
machine
print
(
init_swarm_machine
(
leader
))
else
:
print
(
join_swarm_machine
(
machine
,
leader
))
print
(
answers
)
def
generate_checkbox_choices
(
list
):
"""Generates checkbox entries for lists of strings
:returns: A list of dicts with name keys
"""
return
[{
'name'
:
m
}
for
m
in
list
]
# }}}
# ******************************
...
...
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