libStorageMgmt - рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдореИрдиреЗрдЬрдореЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдореИрдВ рдПрдХ рдпреБрд╡рд╛, рд▓реЗрдХрд┐рди рд╣реЛрдирд╣рд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдХрдВрдкрдиреА рд░реЗрдбрд╣реИрдЯ рдореЗрдВ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛, рдЬрд┐рд╕реЗ рдмрдбрд╝реЗ рдФрд░ рд╡рд┐рд╖рдо рдбреЗрдЯрд╛ рдХреЗрдВрджреНрд░реЛрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рд┐рдирдХреНрд╕, рдиреЗрдЯрдПрдкреА, рдиреЗрдХреНрд╕реЗрдВрдЯрд╛, рдИрдПрдорд╕реА) рдХреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рд╕реНрдЯреЛрд░реЗрдЬ рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЪрд▓рд╛рдПрдВ:
# LSMCLI_URI=nstor://admin@192.168.1.138/ lsmcli --create-fs=test --pool=data --size=5G 


LSMCLI_URI рдХрдорд╛рдВрдб рдХрд╛ рдЧрдВрддрд╡реНрдп рдкрддрд╛ рд╣реИред "рдкреНрд░реЛрдЯреЛрдХреЙрд▓" (nstor: //) рдХреЗ рдЖрдзрд╛рд░ рдкрд░, lsmcli рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд▓рдЧрдЗрди рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рд╕рднреА lsm рдХрдорд╛рдВрдбреНрд╕ рдХреЛ 3 рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдиреЗрдХреНрд╕реЗрдВрдЯрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рдореИрдВрдиреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рдирд╛!

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╣реИред рдореИрдВ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛:

рдореИрдВ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ (рдЖрдк рд╕реА рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ), рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рдкреВрд░реНрдг рдкреНрд▓рдЧрдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдлрд╝рд╛рдЗрд▓ рдирдВрдмрд░ 1ред lsm / anystorage_plugin:
 import sys from lsm.anystorage import AnyStorage from lsm.pluginrunner import PluginRunner if __name__ == '__main__': PluginRunner(AnyStorage, sys.argv).run() 

рдлрд╛рдЗрд▓ рдирдВрдмрд░ 2ред lsm / lsm / anystorage.py:
 import urllib2 import urlparse import simplejson as json import base64 from iplugin import INfs, IStorageAreaNetwork from data import Pool, FileSystem, Snapshot, Capabilities, System, \ NfsExport, Volume, Initiator, AccessGroup from common import LsmError, ErrorNumber, md5 class AnyStorage(INfs, IStorageAreaNetwork): def __init__(self): self.password = None self.timeout = None def startup(self, uri, password, timeout, flags = 0): self.password = password or 'default_pass' self.timeout = timeout def pools(self, flags = 0): pools = [] # Add pools here # ... return pools 


рдкреНрд▓рдЧрдЗрди рдкреВрд▓ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреВрд▓ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреВрд▓ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, lsm рд╣реА рд▓рд┐рд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ (lsmcli -l POOLS рдХреЗ рд▓рд┐рдП) рдХрд░рддрд╛ рд╣реИред рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рд╕реНрдиреИрдкрд╢реЙрдЯ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрдХреНрд╖рд╛рдПрдВ рдореМрдЬреВрдж рд╣реИрдВред

рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдШреЛрд╖рдгрд╛ INFS, IStorageAreaNetwork (рдлрд╝рд╛рдЗрд▓ lsm / lsm / iplugin.py) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЛ рджреБрд░реНрдШрдЯрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ LsmError рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 raise LsmError(ErrorNumber.INVALID_SS, "Cant'create snapshot %s" % snapshot_name) 


рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛ рдкрд░ рдХреЛрдИ рднреА рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рд▓рдВрдмреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ job_idред рдПрдХ рд▓рдВрдмреА рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдкреНрд░рддрд┐рдХреГрддрд┐, рдЬреЛ рдорд┐рдирдЯреЛрдВ рдФрд░ рдШрдВрдЯреЛрдВ рддрдХ рд░рд╣ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдк job_id рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдЖрдкрдХреЛ рдиреМрдХрд░рд┐рдпреЛрдВ (job_status), job_free ()) рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, lsm рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

libStorageMgmt рдЗрддрдирд╛ рдпреБрд╡рд╛ рд╣реИ рдХрд┐ рдпрд╣ LVM рд▓рд┐рдирдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдмрд╕ рд╢реБрд░реБрдЖрдд рд╣реИ!

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


All Articles