saklientを使って一括でアーカイブからサーバを大量に作成したいと思っております。
asyncioを使って非同期に実行しようとしましたが、同期的になってしまいます。
ご教授の方をお願いいたします。
以下が実際のコードです。
非同期的コード
python
1import time 2import asyncio 3 4from saklient.cloud.api import API 5 6@asyncio.coroutine 7def create_server(number): 8 print('start'+str(number)) 9 yield from asyncio.sleep(1) 10 token = 'XXXX' 11 secret = 'XXXXXXXXXXX' 12 zone = 'tk1a' 13 api = API.authorize(token, secret, zone) 14 15 archives = api.archive \ 16 .with_name_like('archive') \ 17 .with_size_gib(20) \ 18 .limit(1) \ 19 .find() 20 archive = archives[0] 21 22 disk = api.disk.create() 23 disk.name = 'test-disk-%03d'%number 24 disk.source = archive 25 disk.plan = api.product.disk.ssd 26 disk.save() 27 28 server = api.server.create() 29 server.name = 'test-%03d'%number 30 server.plan = api.product.server.get_by_spec(1, 1) 31 server.save() 32 33 iface = server.add_iface() 34 iface.connect_to_shared_segment() 35 36 # wait disk copy 37 print('waiting disk copy') 38 if not disk.sleep_while_copying(): 39 raise Exception('failed') 40 41 diskconf = disk.create_config() 42 diskconf.host_name = "test-host-%03d"%number 43 diskconf.write() 44 45 print('connecting the disk') 46 disk.connect_to(server) 47 48 # boot 49 print('booting the server') 50 server.boot() 51 52 # stop 53 #yield from asyncio.sleep(1) 54 print('stopping the server') 55 server.stop() 56 if not server.sleep_until_down(): 57 raise(Exception('failed')) 58 59 60if __name__ == "__main__": 61 units = 4 62 loop = asyncio.get_event_loop() 63 tasks = [asyncio.ensure_future(create_server(i)) for i in range(1,units+1)] 64 loop.run_until_complete(asyncio.wait(tasks)) 65 loop.close() 66 67
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。