PlanetLab рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдиреЛрдбреНрд╕ рдирд┐рдХрд╛рд▓рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдирд╛

рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд▓реИрдиреЗрдЯрд▓реИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдореЗрдВ рддрд▓реНрд▓реАрди рд╣реЛрдирд╛ рдкрдбрд╝рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╢рд╛рдпрдж рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рдХреЗ рд╕рдордп рдХреЛ рдЫреЛрдЯрд╛ рдХрд░ рджреЗрдЧрд╛ред

рдЫрд╡рд┐

рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рджрд╛рдВрд╡ рдкрд░ рд▓рдЧрд╛ рд╣реИред рдкреНрд▓реИрдиреЗрдЯрд▓реИрдм рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдирдИ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдпрд╛ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд▓реИрдиреЗрдЯрд▓реИрдм рдиреЛрдбреНрд╕ (рдЙрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ 1024 рд╣реИрдВ) рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдХреЗрд╡рд▓ рдЙрди рд╕рдВрд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рдкреНрд▓реИрдиреЗрдЯрд▓реИрдм рдиреЛрдбреНрд╕ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рддреЗ рд╣реИрдВред PlanetLab рдкрд░ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд▓реЗрдЦ рдпрд╣рд╛рдБ рд╣реИ ред

рдпрджрд┐ рдЖрдк рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ PlanetLab рдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╡рд┐рддрд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреЛрдбреНрд╕ (рдиреЛрдбреНрд╕) рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ PlanetLab рдореЗрдВ, рдиреЛрдб рдЕрдХреНрд╕рд░ рдСрдлрд╝рд▓рд╛рдЗрди рдЬрд╛рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдЗрди рдиреЛрдбреНрд╕ рдХреЛ рдЖрдкрдХреЗ рдЦрд╛рддреЗ (рд╕реНрд▓рд╛рдЗрд╕) рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдРрд╕рд╛ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╣реА рдХрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред рдореИрдВ рднреА рдЗрд╕ рд▓рд┐рдкрд┐ рдХреЛ рдЖрдкрдореЗрдВ рдмрд╛рдБрдЯрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБред рдпрд╣ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред

рд╕рднреА рдкреНрд▓реИрдиреЗрдЯрд▓реИрдм рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг www.planet-lab.eu/doc/api рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЦреБрдж рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред

#! / usr / bin / env рдЕрдЬрдЧрд░

рдЖрдпрд╛рдд xmlrpclib
рдЖрдпрд╛рдд sys
plc_host = 'www.planet-lab.eu'
рдСрд░реНрдЯ =
{[ AuthMethod ' : ' gpg ' ,)
'рдирд╛рдо' : 'рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо' ,
'рд╣рд╕реНрддрд╛рдХреНрд╖рд░' : 'GnuPG рд╣рд╕реНрддрд╛рдХреНрд╖рд░' ,
}

slice_name = 'tudresdenple_backup'

api_url = " % s : 443 / PLCAPI /"% plc_host
#api_url = " % s / PLCAPI "% plc_host

plc_api = xmlrpclib.ServerProxy (api_url, allow_none = рд╕рд╣реА)

рд╕рднреА рдиреЛрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдУ
"рдЕрдкрдиреЗ рд╕реНрд▓рд╛рдЗрд╕ рдиреЛрдбреНрд╕ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:"
рдиреЛрдбреНрд╕ = plc_api.GetNodes (рдореМрдЦрд┐рдХ, {}, [ 'рдиреЛрдб_рдЖрдИрдбреА' , 'рд╣реЛрд╕реНрдЯрдирд╛рдо' , 'рдмреВрдЯ_рд╕реНрдЯреЗрдЯ' ])

рдиреЛрдбреНрд╕ рдХреЗ тЧП рд╡рд┐рдЬреЗрдЯ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ
рд╕рдВрд▓рдЧреНрди_рдиреЛрдбреНрд╕_рд┐рдбреНрд╕ = plc_api.GetSlices (рд╕рд┐рджреНрдзрд╛рдВрдд, [slice_name], [ 'node_ids' ]] [0] [ 'node_ids' ]
#obtain hostnames, рдЬреЛ {'hostname': ''} рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
рд╕рдВрд▓рдЧреНрди_рдиреЛрдбреНрд╕ = plc_api.GetNodes (рдореМрдЦрд┐рдХ, рд╕рдВрд▓рдЧреНрди_рдиреЛрдбреНрд╕_рдПрдбреНрд╕, [ 'рд╣реЛрд╕реНрдЯрдирд╛рдо' , 'рдмреВрдЯ_рд╕реНрдЯреЗрдЯ' ]]

# рдХрд╕реНрдЯрдо рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЗрд╡рд▓
have_nodes = []

рд╕рдВрд▓рдЧреНрди_рдиреЛрдбреНрд╕ рдореЗрдВ рдиреЛрдб рдХреЗ рд▓рд┐рдП :
has_nodes.append (рдиреЛрдб [ 'hostname' ])

рдиреЛрдб рдореЗрдВ has_nodes рдХреЗ рд▓рд┐рдП:
рдиреЛрдб рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ

# рдЕрдкрдиреЗ рд╕рднреА рдиреЛрдбреНрд╕ рдХреЛ рдмреВрдЯ рдХрд░реЗрдВ рдЬреЛ рдмреВрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛
"рд╕реНрд▓рд╛рдЗрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдЧреИрд░-рдмреВрдЯ рдиреЛрдбреНрд╕ рдХреА рдЦреЛрдЬ рдХрд░рдирд╛:"
to_delete = []

рд╕рдВрд▓рдЧреНрди_рдиреЛрдбреНрд╕ рдореЗрдВ node_record рдХреЗ рд▓рд┐рдП :
рдЕрдЧрд░ node_record [ 'boot_state' ]! = 'boot' :
to_delete.append (node_record [ 'hostname' ])

in_delete рдХреЗ рд▓рд┐рдП node_record:
рдиреЛрдб_рдХрд╛рд░реНрдб рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
# рдЙрди рдиреЛрдбреНрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ

num_of_deleted = len (to_delete)

рдЕрдЧрд░ num_of_deleted> 0:
рд╕рдлрд▓рддрд╛ = plc_api.DeleteSliceFromNodes (рд╕рд╛рдорд╛рдиреНрдп, slice_name, to_delete)
рдпрджрд┐ рд╕рдлрд▓рддрд╛ == 1:
"рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмреВрдЯ рди тАЛтАЛрдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕" рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ
рдФрд░ :
рдкреНрд░рд┐рдВрдЯ "рдЧреИрд░-рдмреВрдЯ рдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ!"
sys.exit ()
рдФрд░ :
"рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ" рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
sys.exit ()

# рд╣рдЯрд╛рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдорд╛рди рд╣реА рдЕрдм рдирдИ рд╕рдВрдЦреНрдпрд╛
"рдирдП рдмреВрдЯ рдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕ рдЬреЛрдбрд╝рдирд╛"
to_add = []

рдиреЛрдбреНрд╕ рдореЗрдВ рдиреЛрдб_рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП :
рдЕрдЧрд░ num_of_deleted> 0:
num_of_deleted - = num_of_deleted
рдФрд░ :
рдмреНрд░реЗрдХ
рдЕрдЧрд░ (node_record [ 'hostname' ] has_nodes рдореЗрдВ рдирд╣реАрдВ рд╣реИ ) рдФрд░ node_record [ 'boot_state' ] == 'boot' :
to_add.append (node_record [ 'hostname' ])

рдЕрдЧрд░ рд▓реЗрди (to_add)> 0:
рд╕рдлрд▓рддрд╛ = plc_api.AddSliceToNodes (рд╕рд╛рдорд╛рдиреНрдп, slice_name, to_add)
рдпрджрд┐ рд╕рдлрд▓рддрд╛ == 1:
рдкреНрд░рд┐рдВрдЯ "рд╕рдлрд▓рддрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдирдИ nbooted рдиреЛрдбреНрд╕"
рдФрд░ :
рдкреНрд░рд┐рдВрдЯ "рдмреВрдЯ рдХрд┐рдП рдЧрдП рдиреЛрдбреНрд╕ рдХрд╛ рдирд╢рд╛ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ!"
sys.exit ()

рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ "рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреЛрдб рдЬреЛрдбрд╝реЗ рдЧрдП:"
in_add рдореЗрдВ node_record рдХреЗ рд▓рд┐рдП:
рдиреЛрдб_рдХрд╛рд░реНрдб рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ

Source: https://habr.com/ru/post/In137018/


All Articles