Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Georgios Dagkakis
slapos
Commits
6eb05fb8
Commit
6eb05fb8
authored
Jan 31, 2017
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WIP: Refactoring.
parent
b3bcb684
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
113 deletions
+52
-113
slapos/recipe/re6stnet/re6stnet.py
slapos/recipe/re6stnet/re6stnet.py
+52
-113
No files found.
slapos/recipe/re6stnet/re6stnet.py
View file @
6eb05fb8
...
@@ -16,7 +16,7 @@ from OpenSSL import crypto
...
@@ -16,7 +16,7 @@ from OpenSSL import crypto
log
=
logging
.
getLogger
(
'SLAPOS-RE6STNET'
)
log
=
logging
.
getLogger
(
'SLAPOS-RE6STNET'
)
logging
.
basicConfig
(
level
=
logging
.
INFO
)
logging
.
basicConfig
(
level
=
logging
.
INFO
)
logging
.
trace
=
logging
.
debug
logging
.
trace
=
logging
.
debug
def
loadJsonFile
(
path
):
def
loadJsonFile
(
path
):
if
os
.
path
.
exists
(
path
):
if
os
.
path
.
exists
(
path
):
...
@@ -37,19 +37,18 @@ def readFile(path):
...
@@ -37,19 +37,18 @@ def readFile(path):
return
content
return
content
return
''
return
''
def
getDb
(
db_path
):
def
updateFile
(
file_path
,
value
):
db
=
sqlite3
.
connect
(
db_path
,
if
readFile
(
file_path
)
!=
value
:
isolation_level
=
None
,
writeFile
(
file_path
,
value
)
check_same_thread
=
False
)
return
True
db
.
text_factory
=
str
return
db
.
cursor
()
return
False
def
bang
(
args
):
def
bang
(
args
):
computer_guid
=
args
[
'computer_id'
]
computer_guid
=
args
[
'computer_id'
]
partition_id
=
args
[
'partition_id'
]
partition_id
=
args
[
'partition_id'
]
slap
=
slapos
.
slap
.
slap
()
slap
=
slapos
.
slap
.
slap
()
# Redeploy instance to update published information
# Redeploy instance to update published information
slap
.
initializeConnection
(
args
[
'server_url'
],
args
[
'key_file'
],
slap
.
initializeConnection
(
args
[
'server_url'
],
args
[
'key_file'
],
args
[
'cert_file'
])
args
[
'cert_file'
])
...
@@ -93,7 +92,7 @@ def requestAddToken(args, can_bang=True):
...
@@ -93,7 +92,7 @@ def requestAddToken(args, can_bang=True):
log
.
info
(
"New token added for slave instance %s. Updating file status..."
%
log
.
info
(
"New token added for slave instance %s. Updating file status..."
%
reference
)
reference
)
status_file
=
os
.
path
.
join
(
base_token_path
,
'%s.status'
%
reference
)
status_file
=
os
.
path
.
join
(
base_token_path
,
'%s.status'
%
reference
)
wri
teFile
(
status_file
,
'TOKEN_ADDED'
)
upda
teFile
(
status_file
,
'TOKEN_ADDED'
)
os
.
unlink
(
request_file
)
os
.
unlink
(
request_file
)
call_bang
=
True
call_bang
=
True
else
:
else
:
...
@@ -118,6 +117,9 @@ def requestRemoveToken(args):
...
@@ -118,6 +117,9 @@ def requestRemoveToken(args):
reference
=
reference_key
.
split
(
'.'
)[
0
]
reference
=
reference_key
.
split
(
'.'
)[
0
]
try
:
try
:
result
=
client
.
requestDeleteToken
(
token
)
result
=
client
.
requestDeleteToken
(
token
)
except
httplib
.
NOTFOUND
:
# Token is alread removed.
result
=
True
except
Exception
:
except
Exception
:
log
.
debug
(
'Request delete token fail for %s...
\
n
%s'
%
(
request_file
,
log
.
debug
(
'Request delete token fail for %s...
\
n
%s'
%
(
request_file
,
traceback
.
format_exc
()))
traceback
.
format_exc
()))
...
@@ -125,7 +127,7 @@ def requestRemoveToken(args):
...
@@ -125,7 +127,7 @@ def requestRemoveToken(args):
else
:
else
:
# certificate is invalidated, it will be revoked
# certificate is invalidated, it will be revoked
writeFile
(
os
.
path
.
join
(
base_token_path
,
'%s.revoke'
%
reference
),
''
)
writeFile
(
os
.
path
.
join
(
base_token_path
,
'%s.revoke'
%
reference
),
''
)
if
result
==
'True'
:
if
result
in
[
'True'
,
True
)
:
# update information
# update information
log
.
info
(
"Token deleted for slave instance %s. Clean up file status..."
%
log
.
info
(
"Token deleted for slave instance %s. Clean up file status..."
%
reference
)
reference
)
...
@@ -152,7 +154,7 @@ def requestRevoqueCertificate(args):
...
@@ -152,7 +154,7 @@ def requestRevoqueCertificate(args):
email
=
'%s@slapos'
%
reference
.
lower
()
email
=
'%s@slapos'
%
reference
.
lower
()
if
revokeByMail
(
args
[
'registry_url'
],
if
revokeByMail
(
args
[
'registry_url'
],
'%s@slapos'
%
reference
.
lower
(),
'%s@slapos'
%
reference
.
lower
(),
args
[
'db'
]):
args
[
'db'
]):
os
.
unlink
(
os
.
path
.
join
(
base_token_path
,
reference_key
))
os
.
unlink
(
os
.
path
.
join
(
base_token_path
,
reference_key
))
log
.
info
(
"Certificate revoked for slave instance %s."
%
reference
)
log
.
info
(
"Certificate revoked for slave instance %s."
%
reference
)
...
@@ -161,62 +163,6 @@ def requestRevoqueCertificate(args):
...
@@ -161,62 +163,6 @@ def requestRevoqueCertificate(args):
log
.
info
(
"Failed to revoke email for %s"
%
reference
)
log
.
info
(
"Failed to revoke email for %s"
%
reference
)
# ipv6, ipv6_prefix, ipv6_changed = dumpIPv6Network(slave_reference, db, network, ipv6_file)
# For each email SOFTINT-xxx@slapos a status should be created probably. How to deal with legacy?
def
dumpIPv6Network
(
slave_reference
,
client
,
ipv6_file
):
email
=
'%s@slapos'
%
slave_reference
.
lower
()
try
:
ipv6_prefix
=
client
.
getIPv6Prefix
(
str
(
email
))
ipv6
=
client
.
getIPv6Address
(
str
(
email
))
log
.
info
(
ipv6
)
changed
=
readFile
(
ipv6_file
)
!=
ipv6
writeFile
(
ipv6_file
,
ipv6
)
return
ipv6
,
ipv6_prefix
,
changed
except
Exception
:
log
.
info
(
'XXX for %s...
\
n
%s'
%
(
slave_reference
,
traceback
.
format_exc
()))
def
dumpIPv4Network
(
ipv6_prefix
,
network
,
ipv4_file
,
client
,
peer_prefix_list
):
try
:
if
int
(
ipv6_prefix
)
==
0
:
# workarround to ignore the first node
ipv4
=
"0.0.0.0"
changed
=
readFile
(
ipv4_file
)
!=
ipv4
writeFile
(
ipv4_file
,
ipv4
)
return
ipv4
,
changed
peers
=
[]
log
.
info
(
ipv6_prefix
)
log
.
info
(
peer_prefix_list
)
peer_list
=
[
prefix
for
prefix
in
peer_prefix_list
if
prefix
==
ipv6_prefix
]
if
len
(
peer_list
)
==
0
:
log
.
info
(
"Unable to find such prefix on database"
)
ipv4
=
"0.0.0.0"
else
:
peer
=
peer_list
[
0
]
ipv4
=
client
.
getIPv4Information
(
peer
)
if
ipv4
is
None
:
ipv4
=
"0.0.0.0"
changed
=
readFile
(
ipv4_file
)
!=
ipv4
writeFile
(
ipv4_file
,
ipv4
)
return
ipv4
,
changed
except
Exception
:
log
.
info
(
'XXX for %s...
\
n
%s'
%
(
ipv6_prefix
,
traceback
.
format_exc
()))
return
"0.0.0.0"
,
False
def
getPeerPrefixList
(
network
):
return
[
prefix
for
prefix
in
ctl
.
iterRoutes
(
"/var/run/re6stnet/babeld.sock"
,
network
)]
def
checkService
(
args
,
can_bang
=
True
):
def
checkService
(
args
,
can_bang
=
True
):
base_token_path
=
args
[
'token_base_path'
]
base_token_path
=
args
[
'token_base_path'
]
token_dict
=
loadJsonFile
(
args
[
'token_json'
])
token_dict
=
loadJsonFile
(
args
[
'token_json'
])
...
@@ -224,70 +170,63 @@ def checkService(args, can_bang=True):
...
@@ -224,70 +170,63 @@ def checkService(args, can_bang=True):
if
not
token_dict
:
if
not
token_dict
:
return
return
db
=
getDb
(
args
[
'db'
])
call_bang
=
False
call_bang
=
False
computer_guid
=
args
[
'computer_id'
]
partition_id
=
args
[
'partition_id'
]
slap
=
slapos
.
slap
.
slap
()
client
=
registry
.
RegistryClient
(
args
[
'registry_url'
])
client
=
registry
.
RegistryClient
(
args
[
'registry_url'
])
network
=
client
.
getNetworkBin
()
sock
=
socket
.
socket
(
socket
.
AF_INET6
,
socket
.
SOCK_DGRAM
)
peer_prefix_list
=
getPeerPrefixList
(
network
)
# Check token status
# Check token status
for
slave_reference
,
token
in
token_dict
.
iteritems
():
for
slave_reference
,
token
in
token_dict
.
iteritems
():
log
.
info
(
"%s %s"
%
(
slave_reference
,
token
))
log
.
info
(
"%s %s"
%
(
slave_reference
,
token
))
status_file
=
os
.
path
.
join
(
base_token_path
,
'%s.status'
%
slave_reference
)
status_file
=
os
.
path
.
join
(
base_token_path
,
'%s.status'
%
slave_reference
)
ipv6_file
=
os
.
path
.
join
(
base_token_path
,
'%s.ipv6'
%
slave_reference
)
ipv4_file
=
os
.
path
.
join
(
base_token_path
,
'%s.ipv4'
%
slave_reference
)
if
not
os
.
path
.
exists
(
status_file
):
if
not
os
.
path
.
exists
(
status_file
):
# This token is not added yet!
# This token is not added yet!
log
.
info
(
"Token %s dont exist yet."
%
status_file
)
log
.
info
(
"Token %s dont exist yet."
%
status_file
)
continue
continue
# Better check directly on registry the state
if
not
client
.
isValidToken
(
token
):
# if Token exist on the table or not.
# Token is used to register client
call_bang
=
True
updateFile
(
status_file
,
'TOKEN_USED'
)
log
.
info
(
"Token status of %s updated to 'used'."
%
slave_reference
)
msg
=
readFile
(
status_file
)
msg
=
readFile
(
status_file
)
log
.
info
(
"Token %s has %s State."
%
(
status_file
,
msg
))
log
.
info
(
"Token %s has %s State."
%
(
status_file
,
msg
))
if
msg
==
'TOKEN_USED'
:
if
msg
==
'TOKEN_USED'
:
log
.
info
(
"Dumping ipv6..."
)
ipv6
,
ipv6_prefix
,
ipv6_changed
=
dumpIPv6Network
(
slave_reference
,
client
,
ipv6_file
)
log
.
info
(
"%s, IPV6 = %s, IPV6_PREFIX = %s"
%
(
slave_reference
,
ipv6
,
ipv6_prefix
))
_
,
ipv4_changed
=
dumpIPv4Network
(
ipv6_prefix
,
network
,
ipv4_file
,
sock
,
peer_prefix_list
)
if
ipv4_changed
or
ipv6_changed
:
call_bang
=
True
continue
# Check if token is not in the database
status
=
False
try
:
token_found
,
=
db
.
execute
(
"SELECT token FROM token WHERE token = ?"
,
(
token
,)).
next
()
if
token_found
==
token
:
status
=
True
except
StopIteration
:
pass
if
not
status
:
# Token is used to register client
call_bang
=
True
try
:
try
:
writeFile
(
status_file
,
'TOKEN_USED'
)
log
.
info
(
"Dumping ipv6..."
)
dumpIPv6Network
(
slave_reference
,
db
,
network
,
ipv6_file
)
email
=
'%s@slapos'
%
slave_reference
.
lower
()
dumpIPv4Network
(
ipv6_prefix
,
network
,
ipv4_file
,
sock
,
peer_prefix_list
)
try
:
log
.
info
(
"Token status of %s updated to 'used'."
%
slave_reference
)
ipv6
=
client
.
getIPv6Address
(
str
(
email
))
except
IOError
:
ipv6_file
=
os
.
path
.
join
(
base_token_path
,
'%s.ipv6'
%
slave_reference
)
# XXX- this file should always exists
ipv6_changed
=
updateFile
(
ipv6_file
,
ipv6
)
log
.
debug
(
'Error when writing in file %s. Clould not update status of %s...'
%
except
Exception
:
(
status_file
,
slave_reference
))
log
.
info
(
'Error for dump ipv6 for %s...
\
n
%s'
%
(
slave_reference
,
traceback
.
format_exc
()))
continue
log
.
info
(
"%s, IPV6 = %s, IPV6_PREFIX = %s"
%
(
slave_reference
,
ipv6
,
ipv6_prefix
))
log
.
info
(
"Dumping ipv4..."
)
try
:
ipv4
=
"0.0.0.0"
ipv6_prefix
=
client
.
getIPv6Prefix
(
str
(
email
))
if
not
int
(
ipv6_prefix
)
==
0
:
if
client
.
isPeer
(
ipv6_prefix
):
ipv4
=
client
.
getIPv4Information
(
ipv6_prefix
)
log
.
info
(
"Found ipv4: %s"
%
ipv4
)
ipv4_file
=
os
.
path
.
join
(
base_token_path
,
'%s.ipv4'
%
slave_reference
)
ipv4_changed
=
updateFile
(
ipv4_file
,
ipv4
)
except
Exception
:
log
.
info
(
'Error for dump ipv4 for %s...
\
n
%s'
%
(
slave_reference
,
traceback
.
format_exc
()))
continue
except
IOError
:
log
.
debug
(
'Error when writing in file %s. Could not update status of %s...'
%
(
status_file
,
slave_reference
))
if
ipv4_changed
or
ipv6_changed
:
call_bang
=
True
if
call_bang
and
can_bang
:
if
call_bang
and
can_bang
:
bang
(
args
)
bang
(
args
)
...
...
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