Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos.core
Commits
204b6a99
Commit
204b6a99
authored
Jun 25, 2013
by
Marco Mariani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cli: moved register.py under cli/ and reindented
parent
00d5fa49
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
270 additions
and
309 deletions
+270
-309
slapos/cli/register.py
slapos/cli/register.py
+270
-1
slapos/register/__init__.py
slapos/register/__init__.py
+0
-6
slapos/register/register.py
slapos/register/register.py
+0
-302
No files found.
slapos/cli/register.py
View file @
204b6a99
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import
ConfigParser
import
getpass
import
os
import
shutil
import
stat
import
sys
import
sys
import
tempfile
import
subprocess
import
requests
from
slapos.cli.command
import
Command
,
must_be_root
from
slapos.cli.command
import
Command
,
must_be_root
from
slapos.
register.register
import
do_register
,
RegisterConfig
from
slapos.
util
import
parse_certificate_key_pair
class
RegisterCommand
(
Command
):
class
RegisterCommand
(
Command
):
...
@@ -89,3 +98,263 @@ class RegisterCommand(Command):
...
@@ -89,3 +98,263 @@ class RegisterCommand(Command):
return_code
=
err
return_code
=
err
sys
.
exit
(
return_code
)
sys
.
exit
(
return_code
)
# XXX dry_run will happily register a new node on the slapos master. Isn't it supposed to be no-op?
def
check_credentials
(
url
,
login
,
password
):
"""Check if login and password are correct"""
req
=
requests
.
get
(
url
,
auth
=
(
login
,
password
),
verify
=
False
)
return
'Logout'
in
req
.
text
def
get_certificate_key_pair
(
logger
,
master_url_web
,
node_name
,
token
=
None
,
login
=
None
,
password
=
None
):
"""Download certificates from SlapOS Master"""
if
token
:
req
=
requests
.
post
(
'/'
.
join
([
master_url_web
,
'add-a-server/WebSection_registerNewComputer'
]),
data
=
{
'title'
:
node_name
},
headers
=
{
'X-Access-Token'
:
token
},
verify
=
False
)
else
:
register_server_url
=
'/'
.
join
([
master_url_web
,
(
"add-a-server/WebSection_registerNewComputer?dialog_id=WebSection_viewServerInformationDialog&dialog_method=WebSection_registerNewComputer&title={}&object_path=/erp5/web_site_module/hosting/add-a-server&update_method=&cancel_url=https%3A//www.vifib.net/add-a-server/WebSection_viewServerInformationDialog&Base_callDialogMethod=&field_your_title=Essai1&dialog_category=None&form_id=view"
.
format
(
node_name
))])
req
=
requests
.
get
(
register_server_url
,
auth
=
(
login
,
password
),
verify
=
False
)
if
not
req
.
ok
and
'Certificate still active.'
in
req
.
text
:
# raise a readable exception if the computer name is already used,
# instead of an opaque 500 Internal Error.
# this will not work with the new API.
logger
.
error
(
'The node name "%s" is already in use. '
'Please change the name, or revoke the active '
'certificate if you want to replace the node.'
,
node_name
)
sys
.
exit
(
1
)
if
req
.
status_code
==
403
:
if
token
:
msg
=
'Please check the authentication token or require a new one.'
else
:
msg
=
'Please check username and password.'
logger
.
critical
(
'Access denied to the SlapOS Master. %s'
,
msg
)
sys
.
exit
(
1
)
elif
not
req
.
ok
and
'NotImplementedError'
in
req
.
text
and
not
token
:
logger
.
critical
(
'This SlapOS server does not support login/password '
'authentication. Please use the token.'
)
sys
.
exit
(
1
)
else
:
req
.
raise_for_status
()
return
parse_certificate_key_pair
(
req
.
text
)
def
get_computer_name
(
certificate
):
"""Parse certificate to get computer name and return it"""
k
=
certificate
.
find
(
"COMP-"
)
i
=
certificate
.
find
(
"/email"
,
k
)
return
certificate
[
k
:
i
]
def
save_former_config
(
conf
):
"""Save former configuration if found"""
former
=
'/etc/opt/slapos'
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
former
,
'slapos.cfg'
)):
return
saved
=
former
+
'.old'
while
os
.
path
.
exists
(
saved
):
conf
.
logger
.
info
(
'Slapos configuration detected in %s'
,
saved
)
if
saved
[
-
1
]
==
'd'
:
saved
+=
'.1'
else
:
# XXX this goes from 19 to 110
saved
=
saved
[:
-
1
]
+
str
(
int
(
saved
[
-
1
])
+
1
)
conf
.
logger
.
info
(
'Former slapos configuration detected '
'in %s moving to %s'
,
former
,
saved
)
shutil
.
move
(
former
,
saved
)
def
get_slapos_conf_example
():
"""
Get slapos.cfg.example and return its path
"""
_
,
path
=
tempfile
.
mkstemp
()
with
open
(
path
,
'wb'
)
as
fout
:
req
=
requests
.
get
(
'http://git.erp5.org/gitweb/slapos.core.git/blob_plain/HEAD:/slapos.cfg.example'
)
fout
.
write
(
req
.
content
)
return
path
def
slapconfig
(
conf
):
"""Base Function to configure slapos in /etc/opt/slapos"""
dry_run
=
conf
.
dry_run
# Create slapos configuration directory if needed
slap_conf_dir
=
os
.
path
.
normpath
(
conf
.
slapos_configuration
)
# Make sure everybody can read slapos configuration directory:
# Add +x to directories in path
directory
=
os
.
path
.
dirname
(
slap_conf_dir
)
while
True
:
if
os
.
path
.
dirname
(
directory
)
==
directory
:
break
# Do "chmod g+xro+xr"
os
.
chmod
(
directory
,
os
.
stat
(
directory
).
st_mode
|
stat
.
S_IXGRP
|
stat
.
S_IRGRP
|
stat
.
S_IXOTH
|
stat
.
S_IROTH
)
directory
=
os
.
path
.
dirname
(
directory
)
if
not
os
.
path
.
exists
(
slap_conf_dir
):
conf
.
logger
.
info
(
'Creating directory: %s'
,
slap_conf_dir
)
if
not
dry_run
:
os
.
mkdir
(
slap_conf_dir
,
0o711
)
user_certificate_repository_path
=
os
.
path
.
join
(
slap_conf_dir
,
'ssl'
)
if
not
os
.
path
.
exists
(
user_certificate_repository_path
):
conf
.
logger
.
info
(
'Creating directory: %s'
,
user_certificate_repository_path
)
if
not
dry_run
:
os
.
mkdir
(
user_certificate_repository_path
,
0o711
)
key_file
=
os
.
path
.
join
(
user_certificate_repository_path
,
'key'
)
cert_file
=
os
.
path
.
join
(
user_certificate_repository_path
,
'certificate'
)
for
src
,
dst
in
[
(
conf
.
key
,
key_file
),
(
conf
.
certificate
,
cert_file
)
]:
conf
.
logger
.
info
(
'Copying to %r, and setting minimum privileges'
,
dst
)
if
not
dry_run
:
with
open
(
dst
,
'w'
)
as
destination
:
destination
.
write
(
''
.
join
(
src
))
os
.
chmod
(
dst
,
0o600
)
os
.
chown
(
dst
,
0
,
0
)
certificate_repository_path
=
os
.
path
.
join
(
slap_conf_dir
,
'ssl'
,
'partition_pki'
)
if
not
os
.
path
.
exists
(
certificate_repository_path
):
conf
.
logger
.
info
(
'Creating directory: %s'
,
certificate_repository_path
)
if
not
dry_run
:
os
.
mkdir
(
certificate_repository_path
,
0o711
)
# Put slapos configuration file
slap_conf_file
=
os
.
path
.
join
(
slap_conf_dir
,
'slapos.cfg'
)
conf
.
logger
.
info
(
'Creating slap configuration: %s'
,
slap_conf_file
)
# Get example configuration file
slapos_cfg_example
=
get_slapos_conf_example
()
new_configp
=
ConfigParser
.
RawConfigParser
()
new_configp
.
read
(
slapos_cfg_example
)
os
.
remove
(
slapos_cfg_example
)
for
section
,
key
,
value
in
[
(
'slapos'
,
'computer_id'
,
conf
.
computer_id
),
(
'slapos'
,
'master_url'
,
conf
.
master_url
),
(
'slapos'
,
'key_file'
,
key_file
),
(
'slapos'
,
'cert_file'
,
cert_file
),
(
'slapos'
,
'certificate_repository_path'
,
certificate_repository_path
),
(
'slapformat'
,
'interface_name'
,
conf
.
interface_name
),
(
'slapformat'
,
'ipv4_local_network'
,
conf
.
ipv4_local_network
),
(
'slapformat'
,
'partition_amount'
,
conf
.
partition_number
),
(
'slapformat'
,
'create_tap'
,
conf
.
create_tap
)
]:
new_configp
.
set
(
section
,
key
,
value
)
if
conf
.
ipv6_interface
:
new_configp
.
set
(
'slapformat'
,
'ipv6_interface'
,
conf
.
ipv6_interface
)
if
not
dry_run
:
with
open
(
slap_conf_file
,
'w'
)
as
fout
:
new_configp
.
write
(
fout
)
conf
.
logger
.
info
(
'SlapOS configuration: DONE'
)
class
RegisterConfig
(
object
):
"""
Class containing all parameters needed for configuration
"""
def
__init__
(
self
,
logger
):
self
.
logger
=
logger
def
setConfig
(
self
,
options
):
"""
Set options given by parameters.
"""
# Set options parameters
for
option
,
value
in
options
.
__dict__
.
items
():
setattr
(
self
,
option
,
value
)
def
COMPConfig
(
self
,
slapos_configuration
,
computer_id
,
certificate
,
key
):
self
.
slapos_configuration
=
slapos_configuration
self
.
computer_id
=
computer_id
self
.
certificate
=
certificate
self
.
key
=
key
def
displayUserConfig
(
self
):
self
.
logger
.
debug
(
'Computer Name: %s'
,
self
.
node_name
)
self
.
logger
.
debug
(
'Master URL: %s'
,
self
.
master_url
)
self
.
logger
.
debug
(
'Number of partition: %s'
,
self
.
partition_number
)
self
.
logger
.
info
(
'Using Interface %s'
,
self
.
interface_name
)
self
.
logger
.
debug
(
'Ipv4 sub network: %s'
,
self
.
ipv4_local_network
)
self
.
logger
.
debug
(
'Ipv6 Interface: %s'
,
self
.
ipv6_interface
)
def
gen_auth
(
conf
):
ask
=
True
if
conf
.
login
:
if
conf
.
password
:
yield
conf
.
login
,
conf
.
password
ask
=
False
else
:
yield
conf
.
login
,
getpass
.
getpass
()
while
ask
:
yield
raw_input
(
'SlapOS Master Login: '
),
getpass
.
getpass
()
def
do_register
(
conf
):
"""Register new computer on SlapOS Master and generate slapos.cfg"""
if
conf
.
login
or
conf
.
login_auth
:
for
login
,
password
in
gen_auth
(
conf
):
if
check_credentials
(
conf
.
master_url_web
,
login
,
password
):
break
conf
.
logger
.
warning
(
'Wrong login/password'
)
else
:
return
1
certificate
,
key
=
get_certificate_key_pair
(
conf
.
logger
,
conf
.
master_url_web
,
conf
.
node_name
,
login
=
login
,
password
=
password
)
else
:
while
not
conf
.
token
:
conf
.
token
=
raw_input
(
'Computer security token: '
).
strip
()
certificate
,
key
=
get_certificate_key_pair
(
conf
.
logger
,
conf
.
master_url_web
,
conf
.
node_name
,
token
=
conf
.
token
)
# get computer id
COMP
=
get_computer_name
(
certificate
)
# Getting configuration parameters
conf
.
COMPConfig
(
slapos_configuration
=
'/etc/opt/slapos/'
,
computer_id
=
COMP
,
certificate
=
certificate
,
key
=
key
)
# Save former configuration
if
not
conf
.
dry_run
:
save_former_config
(
conf
)
# Prepare Slapos Configuration
slapconfig
(
conf
)
conf
.
logger
.
info
(
'Node has successfully been configured as %s.'
,
COMP
)
# XXX hardcoded value, relying on package installation
# We shall fix that later
conf
.
logger
.
info
(
'Running starting script'
)
if
os
.
path
.
isfile
(
"/usr/sbin/slapos-start"
):
try
:
subprocess
.
check_call
(
"/usr/sbin/slapos-start"
)
except
subprocess
.
CalledProcessError
:
conf
.
logger
.
error
(
'Error while trying to run /usr/sbin/slapos-start'
)
else
:
conf
.
logger
.
warning
(
'Missing file /usr/sbin/slapos-start'
)
return
0
slapos/register/__init__.py
deleted
100644 → 0
View file @
00d5fa49
# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
try
:
__import__
(
'pkg_resources'
).
declare_namespace
(
__name__
)
except
ImportError
:
from
pkgutil
import
extend_path
__path__
=
extend_path
(
__path__
,
__name__
)
slapos/register/register.py
deleted
100644 → 0
View file @
00d5fa49
# -*- coding: utf-8 -*-
# vim: set et sts=2:
##############################################################################
#
# Copyright (c) 2012 Vifib SARL and Contributors. All Rights Reserved.
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly advised to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 3
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
# XXX dry_run will happily register a new node on the slapos master. Isn't it supposed to be no-op?
import
ConfigParser
import
getpass
import
os
import
shutil
import
stat
import
sys
import
tempfile
import
subprocess
from
subprocess
import
CalledProcessError
import
requests
from
slapos.util
import
parse_certificate_key_pair
def
check_credentials
(
url
,
login
,
password
):
"""Check if login and password are correct"""
req
=
requests
.
get
(
url
,
auth
=
(
login
,
password
),
verify
=
False
)
return
'Logout'
in
req
.
text
def
get_certificate_key_pair
(
logger
,
master_url_web
,
node_name
,
token
=
None
,
login
=
None
,
password
=
None
):
"""Download certificates from SlapOS Master"""
if
token
:
req
=
requests
.
post
(
'/'
.
join
([
master_url_web
,
'add-a-server/WebSection_registerNewComputer'
]),
data
=
{
'title'
:
node_name
},
headers
=
{
'X-Access-Token'
:
token
},
verify
=
False
)
else
:
register_server_url
=
'/'
.
join
([
master_url_web
,
(
"add-a-server/WebSection_registerNewComputer?dialog_id=WebSection_viewServerInformationDialog&dialog_method=WebSection_registerNewComputer&title={}&object_path=/erp5/web_site_module/hosting/add-a-server&update_method=&cancel_url=https%3A//www.vifib.net/add-a-server/WebSection_viewServerInformationDialog&Base_callDialogMethod=&field_your_title=Essai1&dialog_category=None&form_id=view"
.
format
(
node_name
))])
req
=
requests
.
get
(
register_server_url
,
auth
=
(
login
,
password
),
verify
=
False
)
if
not
req
.
ok
and
'Certificate still active.'
in
req
.
text
:
# raise a readable exception if the computer name is already used,
# instead of an opaque 500 Internal Error.
# this will not work with the new API.
logger
.
error
(
'The node name "%s" is already in use. '
'Please change the name, or revoke the active '
'certificate if you want to replace the node.'
,
node_name
)
sys
.
exit
(
1
)
if
req
.
status_code
==
403
:
if
token
:
msg
=
'Please check the authentication token or require a new one.'
else
:
msg
=
'Please check username and password.'
logger
.
critical
(
'Access denied to the SlapOS Master. %s'
,
msg
)
sys
.
exit
(
1
)
elif
not
req
.
ok
and
'NotImplementedError'
in
req
.
text
and
not
token
:
logger
.
critical
(
'This SlapOS server does not support login/password '
'authentication. Please use the token.'
)
sys
.
exit
(
1
)
else
:
req
.
raise_for_status
()
return
parse_certificate_key_pair
(
req
.
text
)
def
get_computer_name
(
certificate
):
"""Parse certificate to get computer name and return it"""
k
=
certificate
.
find
(
"COMP-"
)
i
=
certificate
.
find
(
"/email"
,
k
)
return
certificate
[
k
:
i
]
def
save_former_config
(
conf
):
"""Save former configuration if found"""
former
=
'/etc/opt/slapos'
if
not
os
.
path
.
exists
(
os
.
path
.
join
(
former
,
'slapos.cfg'
)):
return
saved
=
former
+
'.old'
while
os
.
path
.
exists
(
saved
):
conf
.
logger
.
info
(
'Slapos configuration detected in %s'
,
saved
)
if
saved
[
-
1
]
==
'd'
:
saved
+=
'.1'
else
:
# XXX this goes from 19 to 110
saved
=
saved
[:
-
1
]
+
str
(
int
(
saved
[
-
1
])
+
1
)
conf
.
logger
.
info
(
'Former slapos configuration detected '
'in %s moving to %s'
,
former
,
saved
)
shutil
.
move
(
former
,
saved
)
def
get_slapos_conf_example
():
"""
Get slapos.cfg.example and return its path
"""
_
,
path
=
tempfile
.
mkstemp
()
with
open
(
path
,
'wb'
)
as
fout
:
req
=
requests
.
get
(
'http://git.erp5.org/gitweb/slapos.core.git/blob_plain/HEAD:/slapos.cfg.example'
)
fout
.
write
(
req
.
content
)
return
path
def
slapconfig
(
conf
):
"""Base Function to configure slapos in /etc/opt/slapos"""
dry_run
=
conf
.
dry_run
# Create slapos configuration directory if needed
slap_conf_dir
=
os
.
path
.
normpath
(
conf
.
slapos_configuration
)
# Make sure everybody can read slapos configuration directory:
# Add +x to directories in path
directory
=
os
.
path
.
dirname
(
slap_conf_dir
)
while
True
:
if
os
.
path
.
dirname
(
directory
)
==
directory
:
break
# Do "chmod g+xro+xr"
os
.
chmod
(
directory
,
os
.
stat
(
directory
).
st_mode
|
stat
.
S_IXGRP
|
stat
.
S_IRGRP
|
stat
.
S_IXOTH
|
stat
.
S_IROTH
)
directory
=
os
.
path
.
dirname
(
directory
)
if
not
os
.
path
.
exists
(
slap_conf_dir
):
conf
.
logger
.
info
(
'Creating directory: %s'
,
slap_conf_dir
)
if
not
dry_run
:
os
.
mkdir
(
slap_conf_dir
,
0o711
)
user_certificate_repository_path
=
os
.
path
.
join
(
slap_conf_dir
,
'ssl'
)
if
not
os
.
path
.
exists
(
user_certificate_repository_path
):
conf
.
logger
.
info
(
'Creating directory: %s'
,
user_certificate_repository_path
)
if
not
dry_run
:
os
.
mkdir
(
user_certificate_repository_path
,
0o711
)
key_file
=
os
.
path
.
join
(
user_certificate_repository_path
,
'key'
)
cert_file
=
os
.
path
.
join
(
user_certificate_repository_path
,
'certificate'
)
for
src
,
dst
in
[
(
conf
.
key
,
key_file
),
(
conf
.
certificate
,
cert_file
)
]:
conf
.
logger
.
info
(
'Copying to %r, and setting minimum privileges'
,
dst
)
if
not
dry_run
:
with
open
(
dst
,
'w'
)
as
destination
:
destination
.
write
(
''
.
join
(
src
))
os
.
chmod
(
dst
,
0o600
)
os
.
chown
(
dst
,
0
,
0
)
certificate_repository_path
=
os
.
path
.
join
(
slap_conf_dir
,
'ssl'
,
'partition_pki'
)
if
not
os
.
path
.
exists
(
certificate_repository_path
):
conf
.
logger
.
info
(
'Creating directory: %s'
,
certificate_repository_path
)
if
not
dry_run
:
os
.
mkdir
(
certificate_repository_path
,
0o711
)
# Put slapos configuration file
slap_conf_file
=
os
.
path
.
join
(
slap_conf_dir
,
'slapos.cfg'
)
conf
.
logger
.
info
(
'Creating slap configuration: %s'
,
slap_conf_file
)
# Get example configuration file
slapos_cfg_example
=
get_slapos_conf_example
()
new_configp
=
ConfigParser
.
RawConfigParser
()
new_configp
.
read
(
slapos_cfg_example
)
os
.
remove
(
slapos_cfg_example
)
for
section
,
key
,
value
in
[
(
'slapos'
,
'computer_id'
,
conf
.
computer_id
),
(
'slapos'
,
'master_url'
,
conf
.
master_url
),
(
'slapos'
,
'key_file'
,
key_file
),
(
'slapos'
,
'cert_file'
,
cert_file
),
(
'slapos'
,
'certificate_repository_path'
,
certificate_repository_path
),
(
'slapformat'
,
'interface_name'
,
conf
.
interface_name
),
(
'slapformat'
,
'ipv4_local_network'
,
conf
.
ipv4_local_network
),
(
'slapformat'
,
'partition_amount'
,
conf
.
partition_number
),
(
'slapformat'
,
'create_tap'
,
conf
.
create_tap
)
]:
new_configp
.
set
(
section
,
key
,
value
)
if
conf
.
ipv6_interface
:
new_configp
.
set
(
'slapformat'
,
'ipv6_interface'
,
conf
.
ipv6_interface
)
if
not
dry_run
:
with
open
(
slap_conf_file
,
'w'
)
as
fout
:
new_configp
.
write
(
fout
)
conf
.
logger
.
info
(
'SlapOS configuration: DONE'
)
class
RegisterConfig
(
object
):
"""
Class containing all parameters needed for configuration
"""
def
__init__
(
self
,
logger
):
self
.
logger
=
logger
def
setConfig
(
self
,
options
):
"""
Set options given by parameters.
"""
# Set options parameters
for
option
,
value
in
options
.
__dict__
.
items
():
setattr
(
self
,
option
,
value
)
def
COMPConfig
(
self
,
slapos_configuration
,
computer_id
,
certificate
,
key
):
self
.
slapos_configuration
=
slapos_configuration
self
.
computer_id
=
computer_id
self
.
certificate
=
certificate
self
.
key
=
key
def
displayUserConfig
(
self
):
self
.
logger
.
debug
(
'Computer Name: %s'
,
self
.
node_name
)
self
.
logger
.
debug
(
'Master URL: %s'
,
self
.
master_url
)
self
.
logger
.
debug
(
'Number of partition: %s'
,
self
.
partition_number
)
self
.
logger
.
info
(
'Using Interface %s'
,
self
.
interface_name
)
self
.
logger
.
debug
(
'Ipv4 sub network: %s'
,
self
.
ipv4_local_network
)
self
.
logger
.
debug
(
'Ipv6 Interface: %s'
,
self
.
ipv6_interface
)
def
gen_auth
(
conf
):
ask
=
True
if
conf
.
login
:
if
conf
.
password
:
yield
conf
.
login
,
conf
.
password
ask
=
False
else
:
yield
conf
.
login
,
getpass
.
getpass
()
while
ask
:
yield
raw_input
(
'SlapOS Master Login: '
),
getpass
.
getpass
()
def
do_register
(
conf
):
"""Register new computer on SlapOS Master and generate slapos.cfg"""
if
conf
.
login
or
conf
.
login_auth
:
for
login
,
password
in
gen_auth
(
conf
):
if
check_credentials
(
conf
.
master_url_web
,
login
,
password
):
break
conf
.
logger
.
warning
(
'Wrong login/password'
)
else
:
return
1
certificate
,
key
=
get_certificate_key_pair
(
conf
.
logger
,
conf
.
master_url_web
,
conf
.
node_name
,
login
=
login
,
password
=
password
)
else
:
while
not
conf
.
token
:
conf
.
token
=
raw_input
(
'Computer security token: '
).
strip
()
certificate
,
key
=
get_certificate_key_pair
(
conf
.
logger
,
conf
.
master_url_web
,
conf
.
node_name
,
token
=
conf
.
token
)
# get computer id
COMP
=
get_computer_name
(
certificate
)
# Getting configuration parameters
conf
.
COMPConfig
(
slapos_configuration
=
'/etc/opt/slapos/'
,
computer_id
=
COMP
,
certificate
=
certificate
,
key
=
key
)
# Save former configuration
if
not
conf
.
dry_run
:
save_former_config
(
conf
)
# Prepare Slapos Configuration
slapconfig
(
conf
)
conf
.
logger
.
info
(
'Node has successfully been configured as %s.'
,
COMP
)
# XXX hardcoded value, relying on package installation
# We shall fix that later
conf
.
logger
.
info
(
'Running starting script'
)
if
os
.
path
.
isfile
(
"/usr/sbin/slapos-start"
):
try
:
subprocess
.
check_call
(
"/usr/sbin/slapos-start"
)
except
CalledProcessError
:
conf
.
logger
.
error
(
'Error while trying to run /usr/sbin/slapos-start'
)
else
:
conf
.
logger
.
warning
(
'Missing file /usr/sbin/slapos-start'
)
return
0
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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