def __init__(self, conn, accessInfo, platforminfo): self.conn = conn self.accessInfo = accessInfo self.client = CloudStackIaasClient(platforminfo, accessInfo["USER_NAME"], accessInfo["ACCESS_ID"], accessInfo["SECRET_KEY"]) #コントローラ作成 self.instancecontroller = CloudStackInstanceController(platforminfo, self.client, self.conn) self.volumecontroller = CloudStackVolumController(platforminfo, self.client, self.conn) self.addresscontroller = CloudStackAddressController(platforminfo, self.client, self.conn) self.loadBalancercontroller = CloudStackLoadBalancercontroller(platforminfo, self.client, self.conn) self.othercontroller = CloudStackOtherController(platforminfo, self.client, self.conn)
class CloudStackController(IaasController): logger = IaasLogger() conn = None client = None accessInfo = None instancecontroller = None volumecontroller = None addresscontroller = None loadBalancercontroller = None othercontroller = None def __init__(self, conn, accessInfo, platforminfo): self.conn = conn self.accessInfo = accessInfo self.client = CloudStackIaasClient(platforminfo, accessInfo["USER_NAME"], accessInfo["ACCESS_ID"], accessInfo["SECRET_KEY"]) #コントローラ作成 self.instancecontroller = CloudStackInstanceController(platforminfo, self.client, self.conn) self.volumecontroller = CloudStackVolumController(platforminfo, self.client, self.conn) self.addresscontroller = CloudStackAddressController(platforminfo, self.client, self.conn) self.loadBalancercontroller = CloudStackLoadBalancercontroller(platforminfo, self.client, self.conn) self.othercontroller = CloudStackOtherController(platforminfo, self.client, self.conn) def __del__(self): self.conn.rollback() self.conn.close() def describeDiskOfferings(self): return self.client.describeDiskOfferings() def describePublicIpAddresses(self, id): return self.client.describePublicIpAddresses(id) def describeOnlyInstances(self): return self.client.describeOnlyInstances() def describeServiceOfferings(self): return self.client.describeServiceOfferings() def describeImages(self): return self.client.describeImages() def describeInstances(self): return self.client.describeInstances() def startInstance(self, instanceNo): # インスタンスに関する処理 TODO タイムアウトリトライは未実装 try: self.instancecontroller.startInstance(instanceNo) except Exception, e: self.logger.error(traceback.format_exc()) raise # ボリュームに関する処理 table = self.conn.getTable("CLOUDSTACK_VOLUME") volumes = self.conn.select(table.select(table.c.INSTANCE_NO==instanceNo)) for volume in volumes: if isNotEmpty(volume["COMPONENT_NO"]): # コンポーネント番号がある場合はスキップ continue #Volumeスタート self.volumecontroller.startVolume(instanceNo, volume["VOLUME_NO"]) # アドレスに関する処理 self.addresscontroller.startAddress(instanceNo) self.conn.commit() return True