1
1
import socket
2
+ import asyncio
2
3
from urllib .parse import quote
3
4
4
5
@@ -7,36 +8,36 @@ class CTLDControl:
7
8
8
9
def __init__ (self ):
9
10
self .sock = None
11
+ self .loop = asyncio .get_event_loop ()
10
12
11
- def open (self ):
13
+ async def open (self ):
12
14
self .sock = socket .socket (socket .AF_UNIX , socket .SOCK_SEQPACKET )
13
- self .sock .connect (self .socket )
15
+ self .sock .setblocking (False )
16
+ await self .loop .sock_connect (self .sock , self .socket )
14
17
15
18
def close (self ):
16
19
self .sock .close ()
17
20
self .sock = None
18
21
19
- def cmd (self , command , id , args = []):
22
+ async def cmd (self , command , id , args = []):
20
23
line = ' ' .join ([command , quote (id ), * args ])
21
24
line = line .encode ()
22
25
23
- if self .sock .send (line ) != len (line ):
24
- raise RuntimeError ("Failed writing to socket" )
25
-
26
- ret = self .sock .recv (4096 )
26
+ await self .loop .sock_sendall (self .sock , line )
27
+ ret = await self .loop .sock_recv (self .sock , 4096 )
27
28
ret = ret .decode ()
28
29
29
30
if not ret .startswith ("OK" ):
30
31
raise RuntimeError ("ctld-control: {}" .format (ret ))
31
32
32
- def __enter__ (self ):
33
- self .open ()
33
+ async def __aenter__ (self ):
34
+ await self .open ()
34
35
return self
35
36
36
- def __exit__ (self , exc_type , exc_value , traceback ):
37
+ async def __aexit__ (self , exc_type , exc_value , traceback ):
37
38
self .close ()
38
39
39
- def auth_group_set (self , id , type_ , auths ):
40
+ async def auth_group_set (self , id , type_ , auths ):
40
41
"""
41
42
Parameters
42
43
----------
@@ -54,12 +55,12 @@ def auth_group_set(self, id, type_, auths):
54
55
55
56
args += ["auth={}" .format (quote (i )) for i in a ]
56
57
57
- return self .cmd ("auth-group-set" , id , args )
58
+ await self .cmd ("auth-group-set" , id , args )
58
59
59
- def auth_group_del (self , id ):
60
- return self .cmd ("auth-group-del" , id , [])
60
+ async def auth_group_del (self , id ):
61
+ await self .cmd ("auth-group-del" , id , [])
61
62
62
- def lun_set (self , id , ctl_lun , path , blocksize , serial , device_id , size , pblocksize = None , ** options ):
63
+ async def lun_set (self , id , ctl_lun , path , blocksize , serial , device_id , size , pblocksize = None , ** options ):
63
64
args = [
64
65
"ctl-lun={}" .format (ctl_lun ),
65
66
"path={}" .format (quote (path )),
@@ -77,12 +78,12 @@ def lun_set(self, id, ctl_lun, path, blocksize, serial, device_id, size, pblocks
77
78
for key , value in options .items ():
78
79
args .append ("option={}={}" .format (key , quote (str (value ))))
79
80
80
- return self .cmd ("lun-set" , id , args )
81
+ await self .cmd ("lun-set" , id , args )
81
82
82
- def lun_del (self , id ):
83
- return self .cmd ("lun-del" , id )
83
+ async def lun_del (self , id ):
84
+ await self .cmd ("lun-del" , id )
84
85
85
- def target_add (self , id , alias = None , pgs = [], ag = None ):
86
+ async def target_add (self , id , alias = None , pgs = [], ag = None ):
86
87
args = []
87
88
88
89
if alias is not None :
@@ -96,10 +97,10 @@ def target_add(self, id, alias=None, pgs=[], ag=None):
96
97
if ag is not None :
97
98
args .append ('auth-group={}' .format (ag ))
98
99
99
- return self .cmd ("target-add" , id , args )
100
+ await self .cmd ("target-add" , id , args )
100
101
101
- def target_del (self , id ):
102
- return self .cmd ("target-del" , id )
102
+ async def target_del (self , id ):
103
+ await self .cmd ("target-del" , id )
103
104
104
- def target_set_luns (self , id , luns = []):
105
- return self .cmd ("target-set-lun" , id , luns )
105
+ async def target_set_luns (self , id , luns = []):
106
+ await self .cmd ("target-set-lun" , id , luns )
0 commit comments