Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
F/Poutre
switchs
Commits
58eb2bad
Commit
58eb2bad
authored
Jan 04, 2019
by
Gabriel Detraz
Committed by
root
Jan 04, 2019
Browse files
Début configuration pour maj automatique des switchs
parent
6702e2cc
Changes
1
Hide whitespace changes
Inline
Side-by-side
main.py
View file @
58eb2bad
...
...
@@ -121,6 +121,10 @@ class Switch:
cookie
=
get_cookie
.
json
()[
'cookie'
]
self
.
headers
=
{
"Cookie"
:
cookie
}
def
test
(
self
):
url_info
=
"http://"
+
self
.
switch
[
"ipv4"
]
+
"/rest/v4/system/status/global_info"
get
=
requests
.
get
(
url_info
,
headers
=
self
.
headers
)
def
apply_conf_hp
(
self
):
"""Apply config restore via rest"""
url_restore
=
"http://"
+
self
.
switch
[
"ipv4"
]
+
"/rest/v4/system/config/cfg_restore"
...
...
@@ -177,17 +181,78 @@ class Switch:
with
open
(
"generated/"
+
self
.
get_conf_file_name
(),
'w+'
)
as
f
:
f
.
write
(
self
.
conf
)
for
arg
in
sys
.
argv
:
if
arg
==
"--force"
:
sw
=
Switch
()
for
switch
in
all_switchs
:
sw
.
switch
=
switch
sw
.
gen_conf_and_write
()
def
upgrade
(
self
):
"""Met à jour le switch en fonction du constructeur"""
if
self
.
switch
[
"model"
]:
constructor
=
self
.
switch
[
"model"
][
"constructor"
].
lower
()
try
:
sw
.
apply_conf
()
except
:
print
(
"Erreur dans l'application de la conf pour "
+
switch
[
"short_name"
])
if
"hp"
in
constructor
or
"aruba"
in
constructor
:
self
.
get_firmware_hp
()
if
self
.
primary_firmware
<
self
.
switch
[
"firmware"
]:
self
.
upgrade_hp
()
# self.reboot_hp()
except
RuntimeError
:
print
(
"Il y a eu une erreur pour la mise à jour du switch"
+
self
.
switch
[
"short_name"
])
def
get_firmware_hp
(
self
):
# L'URI est positionnée dans une variable
url_cli
=
"http://"
+
self
.
switch
[
"ipv4"
]
+
"/rest/v4/cli"
# On crée le dictionnaire avec la clé "cmd" et la valeur de la commande convertit en châine
data
=
{
"cmd"
:
"show flash"
}
# On lance la requête avec le dictionnaire convertit en JSON et l'entête de session
post_cmd
=
requests
.
post
(
url_cli
,
data
=
json
.
dumps
(
data
),
headers
=
self
.
headers
)
# On récupère le résultat de la requête, qui est décodé de base64, puis décodé en utf-8
result_decode
=
base64
.
b64decode
(
post_cmd
.
json
()[
'result_base64_encoded'
]).
decode
(
'utf-8'
)
self
.
primary_firmware
=
result_decode
.
split
(
'Secondary'
)[
0
].
split
()[
-
1
]
self
.
secondary_firmware
=
result_decode
.
split
(
'Boot'
)[
0
].
split
()[
-
1
]
def
upgrade_hp
(
self
):
"""Update switch via rest"""
# On spécifie l'URI pour le transfert de fichier
url_file
=
"http://"
+
self
.
switch
[
"ipv4"
]
+
"/rest/v4/file-transfer"
# On crée le dictionnaire comportant les informations nécessaires (actions / URL / etc...)
data
=
{
"file_type"
:
"FTT_FIRMWARE"
,
"url"
:
"http://"
+
self
.
settings
[
"switchs_management_interface_ip"
]
+
"/"
+
self
.
switch
[
"firmware"
]
+
".swi"
,
"action"
:
"FTA_DOWNLOAD"
,
"boot_image"
:
"BI_PRIMARY_IMAGE"
}
# On lance la requête au format POST
post_file
=
requests
.
post
(
url_file
,
data
=
json
.
dumps
(
data
),
headers
=
self
.
headers
)
def
reboot_hp
(
slef
):
url_reboot
=
"http://"
+
self
.
switch
[
"ipv4"
]
+
"/rest/v4/system/reboot"
data
=
{
"action"
:
"reload"
}
post_reboot
=
requests
.
post
(
url_reboot
,
data
=
json
.
dumps
(
data
),
headers
=
self
.
headers
)
if
"--force"
in
sys
.
argv
:
sw
=
Switch
()
for
switch
in
all_switchs
:
sw
.
switch
=
switch
sw
.
gen_conf_and_write
()
try
:
sw
.
apply_conf
()
except
:
print
(
"Erreur dans l'application de la conf pour "
+
switch
[
"short_name"
])
if
"--upgrade"
in
sys
.
argv
:
sw
=
Switch
()
for
switch
in
all_switchs
:
sw
.
switch
=
switch
sw
.
upgrade
()
for
service
in
api_client
.
list
(
"services/regen/"
):
if
service
[
'hostname'
]
==
client_hostname
and
\
...
...
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