|
@@ -12,14 +12,18 @@ regions = ['GRA7', 'SBG5', 'DE1', 'UK1', 'BHS5'] |
|
|
|
|
|
|
|
|
def get_flavor_id(region, name='s1-2'): |
|
|
def get_flavor_id(region, name='s1-2'): |
|
|
flavors = client.get(service_url + '/flavor') |
|
|
flavors = client.get(service_url + '/flavor') |
|
|
flavorId = [f['id'] for f in flavors if f['name'] == name and f['region']==region][0] |
|
|
|
|
|
|
|
|
flavorId = [f['id'] for f in flavors if f['name'] |
|
|
|
|
|
== name and f['region'] == region][0] |
|
|
return flavorId |
|
|
return flavorId |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_image_id(region, name='Ubuntu 20.04'): |
|
|
def get_image_id(region, name='Ubuntu 20.04'): |
|
|
images = client.get(service_url + '/image') |
|
|
images = client.get(service_url + '/image') |
|
|
imageId = [i['id'] for i in images if i['name']==name and i['region']==region][0] |
|
|
|
|
|
|
|
|
imageId = [i['id'] for i in images if i['name'] |
|
|
|
|
|
== name and i['region'] == region][0] |
|
|
return imageId |
|
|
return imageId |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_eleves(): |
|
|
def get_eleves(): |
|
|
ovh_ssh_keys = client.get(service_url + '/sshkey') |
|
|
ovh_ssh_keys = client.get(service_url + '/sshkey') |
|
|
liste_eleves = [(k['id'], k['name'].split('_')[1], k['publicKey']) |
|
|
liste_eleves = [(k['id'], k['name'].split('_')[1], k['publicKey']) |
|
@@ -27,14 +31,17 @@ def get_eleves(): |
|
|
if k['name'].startswith('ssh_')] |
|
|
if k['name'].startswith('ssh_')] |
|
|
return liste_eleves |
|
|
return liste_eleves |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def delete_eleve(eleve_id): |
|
|
def delete_eleve(eleve_id): |
|
|
client.delete(service_url + '/sshkey/' + eleve_id) |
|
|
client.delete(service_url + '/sshkey/' + eleve_id) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_eleve(prenom, publicKey): |
|
|
def create_eleve(prenom, publicKey): |
|
|
client.post(service_url + '/sshkey', |
|
|
client.post(service_url + '/sshkey', |
|
|
name = 'ssh_' + prenom, |
|
|
|
|
|
publicKey = publicKey |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
name='ssh_' + prenom, |
|
|
|
|
|
publicKey=publicKey |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_instances(): |
|
|
def get_instances(): |
|
|
ovh_instances = client.get(service_url + '/instance') |
|
|
ovh_instances = client.get(service_url + '/instance') |
|
@@ -53,21 +60,24 @@ def get_instances(): |
|
|
instances.append((id_inst, name, ip, region, status,)) |
|
|
instances.append((id_inst, name, ip, region, status,)) |
|
|
return instances |
|
|
return instances |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_instance(eleve_id, name, region): |
|
|
def create_instance(eleve_id, name, region): |
|
|
image_id = get_image_id(region) |
|
|
image_id = get_image_id(region) |
|
|
flavor_id = get_flavor_id(region) |
|
|
flavor_id = get_flavor_id(region) |
|
|
client.post(service_url + '/instance', |
|
|
client.post(service_url + '/instance', |
|
|
name = 'eica-' + name, |
|
|
|
|
|
sshKeyId = eleve_id, |
|
|
|
|
|
flavorId = flavor_id, |
|
|
|
|
|
imageId = image_id, |
|
|
|
|
|
region = region |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
name='eica-' + name, |
|
|
|
|
|
sshKeyId=eleve_id, |
|
|
|
|
|
flavorId=flavor_id, |
|
|
|
|
|
imageId=image_id, |
|
|
|
|
|
region=region |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def delete_instance(instance_id): |
|
|
def delete_instance(instance_id): |
|
|
print(service_url + '/instance/' + instance_id) |
|
|
print(service_url + '/instance/' + instance_id) |
|
|
client.delete(service_url + '/instance/' + instance_id) |
|
|
client.delete(service_url + '/instance/' + instance_id) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def make_main_window(): |
|
|
def make_main_window(): |
|
|
liste_eleves = get_eleves() |
|
|
liste_eleves = get_eleves() |
|
|
liste_instances = get_instances() |
|
|
liste_instances = get_instances() |
|
@@ -76,23 +86,24 @@ def make_main_window(): |
|
|
[sg.Button('Modifier', size=(12, 1))], |
|
|
[sg.Button('Modifier', size=(12, 1))], |
|
|
[sg.Button('Supprimer', size=(12, 1))], |
|
|
[sg.Button('Supprimer', size=(12, 1))], |
|
|
[sg.Combo(regions, size=(12, 1), default_value=regions[0], k='region')], |
|
|
[sg.Combo(regions, size=(12, 1), default_value=regions[0], k='region')], |
|
|
[sg.Button('Instancier', size=(12, 1), button_color=('white', 'green'))], |
|
|
|
|
|
|
|
|
[sg.Button('Instancier', size=(12, 1), |
|
|
|
|
|
button_color=('white', 'green'))], |
|
|
[sg.Button('Quitter', size=(12, 1))], |
|
|
[sg.Button('Quitter', size=(12, 1))], |
|
|
] |
|
|
] |
|
|
col1 = [ |
|
|
col1 = [ |
|
|
[sg.Table(values=liste_instances, |
|
|
[sg.Table(values=liste_instances, |
|
|
headings=['id', 'Nom', 'Adresse IP', 'Région', 'Statut'], |
|
|
|
|
|
max_col_width=25, |
|
|
|
|
|
col_widths=[0, 15, 12, 10, 10], |
|
|
|
|
|
hide_vertical_scroll=True, |
|
|
|
|
|
background_color='light blue', |
|
|
|
|
|
text_color='black', |
|
|
|
|
|
auto_size_columns=False, |
|
|
|
|
|
justification='right', |
|
|
|
|
|
num_rows=len(liste_instances), |
|
|
|
|
|
alternating_row_color='lightyellow', |
|
|
|
|
|
key='table_instances', |
|
|
|
|
|
tooltip='Liste des instances actives')], |
|
|
|
|
|
|
|
|
headings=['id', 'Nom', 'Adresse IP', 'Région', 'Statut'], |
|
|
|
|
|
max_col_width=25, |
|
|
|
|
|
col_widths=[0, 15, 12, 10, 10], |
|
|
|
|
|
hide_vertical_scroll=True, |
|
|
|
|
|
background_color='light blue', |
|
|
|
|
|
text_color='black', |
|
|
|
|
|
auto_size_columns=False, |
|
|
|
|
|
justification='right', |
|
|
|
|
|
num_rows=len(liste_instances), |
|
|
|
|
|
alternating_row_color='lightyellow', |
|
|
|
|
|
key='table_instances', |
|
|
|
|
|
tooltip='Liste des instances actives')], |
|
|
] |
|
|
] |
|
|
col2 = [ |
|
|
col2 = [ |
|
|
[sg.Button('Détruire', size=(12, 1), button_color=('white', 'red'))], |
|
|
[sg.Button('Détruire', size=(12, 1), button_color=('white', 'red'))], |
|
@@ -116,7 +127,7 @@ def make_main_window(): |
|
|
sg.Column(col), |
|
|
sg.Column(col), |
|
|
sg.Column(col1), |
|
|
sg.Column(col1), |
|
|
sg.Column(col2)], |
|
|
sg.Column(col2)], |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
] |
|
|
] |
|
|
window = sg.Window('OVH - Gestion des instances', |
|
|
window = sg.Window('OVH - Gestion des instances', |
|
|
layout=layout, |
|
|
layout=layout, |
|
@@ -133,7 +144,7 @@ def make_add_window(caption, role='create', initial_values=None): |
|
|
else: |
|
|
else: |
|
|
eleve_id = prenom = pk = '' |
|
|
eleve_id = prenom = pk = '' |
|
|
layout = [ |
|
|
layout = [ |
|
|
[sg.InputText(eleve_id, k='eleve_id', visible=True)], |
|
|
|
|
|
|
|
|
[sg.InputText(eleve_id, k='eleve_id', visible=False)], |
|
|
[sg.Text(text='Prénom', size=(10, 2)), sg.InputText( |
|
|
[sg.Text(text='Prénom', size=(10, 2)), sg.InputText( |
|
|
default_text=prenom, size=(20, 2), k='prenom')], |
|
|
default_text=prenom, size=(20, 2), k='prenom')], |
|
|
[sg.Text(text='Clé publique', size=(10, 2)), sg.InputText( |
|
|
[sg.Text(text='Clé publique', size=(10, 2)), sg.InputText( |
|
@@ -178,7 +189,7 @@ while True: |
|
|
if confirmation == "Non": |
|
|
if confirmation == "Non": |
|
|
continue |
|
|
continue |
|
|
sg.PopupAnimated("sablier.png") |
|
|
sg.PopupAnimated("sablier.png") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
delete_eleve(id_eleve) |
|
|
delete_eleve(id_eleve) |
|
|
liste_eleves = get_eleves() |
|
|
liste_eleves = get_eleves() |
|
|
|
|
|
|
|
@@ -200,7 +211,7 @@ while True: |
|
|
initial_values=[id_eleve, prenom, pk], |
|
|
initial_values=[id_eleve, prenom, pk], |
|
|
role='modify') |
|
|
role='modify') |
|
|
window2.make_modal() |
|
|
window2.make_modal() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if event == 'Instancier': |
|
|
if event == 'Instancier': |
|
|
selected_lines = values['table_eleves'] |
|
|
selected_lines = values['table_eleves'] |
|
|
if len(selected_lines) == 0: |
|
|
if len(selected_lines) == 0: |
|
@@ -220,18 +231,19 @@ while True: |
|
|
continue |
|
|
continue |
|
|
|
|
|
|
|
|
sg.PopupAnimated("sablier.png") |
|
|
sg.PopupAnimated("sablier.png") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for el in eleves: |
|
|
for el in eleves: |
|
|
active_instances_names = [i[1].split('-')[1] for i in window1.liste_instances] |
|
|
|
|
|
|
|
|
active_instances_names = [i[1].split( |
|
|
|
|
|
'-')[1] for i in window1.liste_instances] |
|
|
if not el[1] in active_instances_names: |
|
|
if not el[1] in active_instances_names: |
|
|
create_instance(el[0], el[1], values['region']) |
|
|
create_instance(el[0], el[1], values['region']) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
liste_instances = get_instances() |
|
|
liste_instances = get_instances() |
|
|
|
|
|
|
|
|
sg.PopupAnimated(None) |
|
|
sg.PopupAnimated(None) |
|
|
|
|
|
|
|
|
window1['table_instances'].update(values=liste_instances, |
|
|
window1['table_instances'].update(values=liste_instances, |
|
|
num_rows=len(liste_instances)) |
|
|
|
|
|
|
|
|
num_rows=len(liste_instances)) |
|
|
window1.liste_instances = liste_instances |
|
|
window1.liste_instances = liste_instances |
|
|
|
|
|
|
|
|
if event == 'Détruire': |
|
|
if event == 'Détruire': |
|
@@ -249,31 +261,28 @@ while True: |
|
|
custom_text=("Oui", "Non")) |
|
|
custom_text=("Oui", "Non")) |
|
|
if confirmation == "Non": |
|
|
if confirmation == "Non": |
|
|
continue |
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sg.PopupAnimated("sablier.png") |
|
|
sg.PopupAnimated("sablier.png") |
|
|
|
|
|
|
|
|
for id_inst in instances: |
|
|
for id_inst in instances: |
|
|
delete_instance(id_inst) |
|
|
delete_instance(id_inst) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
liste_instances = get_instances() |
|
|
liste_instances = get_instances() |
|
|
|
|
|
|
|
|
sg.PopupAnimated(None) |
|
|
sg.PopupAnimated(None) |
|
|
|
|
|
|
|
|
window1['table_instances'].update(values=liste_instances, |
|
|
window1['table_instances'].update(values=liste_instances, |
|
|
num_rows=len(liste_instances)) |
|
|
|
|
|
|
|
|
num_rows=len(liste_instances)) |
|
|
window1.liste_instances = liste_instances |
|
|
window1.liste_instances = liste_instances |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if event == 'Actualiser': |
|
|
if event == 'Actualiser': |
|
|
sg.PopupAnimated("sablier.png") |
|
|
sg.PopupAnimated("sablier.png") |
|
|
liste_instances = get_instances() |
|
|
liste_instances = get_instances() |
|
|
sg.PopupAnimated(None) |
|
|
sg.PopupAnimated(None) |
|
|
window1['table_instances'].update(values=liste_instances, |
|
|
window1['table_instances'].update(values=liste_instances, |
|
|
num_rows=len(liste_instances)) |
|
|
|
|
|
|
|
|
num_rows=len(liste_instances)) |
|
|
window1.liste_instances = liste_instances |
|
|
window1.liste_instances = liste_instances |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if window == window2: |
|
|
if window == window2: |
|
|
if event in (sg.WIN_CLOSED, 'Annuler'): |
|
|
if event in (sg.WIN_CLOSED, 'Annuler'): |
|
|
window2.close() |
|
|
window2.close() |
|
|