diff --git a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerVO.java b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerVO.java index f9a911436d2..8e1848d9225 100644 --- a/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerVO.java +++ b/header/src/main/java/org/zstack/header/network/sdncontroller/SdnControllerVO.java @@ -1,6 +1,7 @@ package org.zstack.header.network.sdncontroller; import org.zstack.header.identity.OwnedByAccount; +import org.zstack.header.log.NoLogging; import org.zstack.header.vo.BaseResource; import org.zstack.header.vo.NoView; import org.zstack.header.vo.ResourceVO; @@ -40,6 +41,7 @@ public class SdnControllerVO extends ResourceVO implements OwnedByAccount, ToInv private String username; @Column + @NoLogging private String password; @OneToMany(fetch=FetchType.EAGER) diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java index 5de07d899f7..57072cbaa57 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnController.java @@ -13,10 +13,10 @@ public interface SdnController { 对sdn控制器的控制: event 有关sdn控制器的后置处理: post-event */ - void preInitSdnController(APIAddSdnControllerMsg msg, Completion completion); - void createSdnControllerDb(APIAddSdnControllerMsg msg, SdnControllerVO vo, Completion completion); + void preInitSdnController(AddSdnControllerMsg msg, Completion completion); + void createSdnControllerDb(AddSdnControllerMsg msg, SdnControllerVO vo, Completion completion); void deleteSdnControllerDb(SdnControllerVO vo); - void initSdnController(APIAddSdnControllerMsg msg, Completion completion); + void initSdnController(AddSdnControllerMsg msg, Completion completion); void postInitSdnController(SdnControllerVO vo, Completion completion); void deleteSdnController(SdnControllerDeletionMsg msg, SdnControllerInventory sdn, Completion completion); diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java index c9e939b63f4..c46d7be3ab3 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/SdnControllerManagerImpl.java @@ -6,6 +6,7 @@ import org.zstack.core.Platform; import org.zstack.core.asyncbatch.While; import org.zstack.core.cloudbus.CloudBus; +import org.zstack.core.cloudbus.CloudBusCallBack; import org.zstack.core.componentloader.PluginRegistry; import org.zstack.core.db.DatabaseFacade; import org.zstack.core.workflow.FlowChainBuilder; @@ -19,6 +20,7 @@ import org.zstack.header.errorcode.ErrorCodeList; import org.zstack.header.exception.CloudRuntimeException; import org.zstack.header.message.Message; +import org.zstack.header.message.MessageReply; import org.zstack.header.network.NetworkException; import org.zstack.header.network.l2.*; import org.zstack.header.network.l3.*; @@ -80,6 +82,8 @@ public List getAliasIds() { public void handleMessage(Message msg) { if (msg instanceof APIAddSdnControllerMsg) { handle((APIAddSdnControllerMsg) msg); + } else if (msg instanceof AddSdnControllerMsg) { + handle((AddSdnControllerMsg) msg); } else if (msg instanceof SdnControllerMessage) { handleSdnControllerMessage((SdnControllerMessage) msg); } else { @@ -87,6 +91,22 @@ public void handleMessage(Message msg) { } } + private void handle(AddSdnControllerMsg msg) { + AddSdnControllerReply reply = new AddSdnControllerReply(); + doCreateSdnController(msg, new Completion(msg) { + @Override + public void success() { + bus.reply(msg, reply); + } + + @Override + public void fail(ErrorCode errorCode) { + reply.setError(errorCode); + bus.reply(msg, reply); + } + }); + } + private void handleSdnControllerMessage(SdnControllerMessage msg) { SdnControllerVO vo = dbf.findByUuid(msg.getSdnControllerUuid(), SdnControllerVO.class); if (vo == null) { @@ -99,23 +119,23 @@ private void handleSdnControllerMessage(SdnControllerMessage msg) { sdnController.handleMessage(msg); } - private void doCreateSdnController(SdnControllerVO vo, APIAddSdnControllerMsg msg, Completion completion) { - SdnControllerFactory factory = getSdnControllerFactory(msg.getVendorType()); + private void doCreateSdnController(AddSdnControllerMsg msg, Completion completion) { + SdnControllerVO vo = msg.getSdnControllerVO(); + SdnControllerFactory factory = getSdnControllerFactory(vo.getVendorType()); SdnController controller = factory.getSdnController(vo); Map data = new HashMap(); FlowChain chain = FlowChainBuilder.newShareFlowChain(); chain.setData(data); - chain.setName(String.format("create-sdn-controller-%s", msg.getName())); + chain.setName(String.format("create-sdn-controller-%s", vo.getName())); chain.then(new ShareFlow() { @Override public void setup() { flow(new NoRollbackFlow() { - String __name__ = String.format("pre-process-for-create-sdn-controller-%s", msg.getName()); + String __name__ = String.format("pre-process-for-create-sdn-controller-%s", vo.getName()); @Override public void run(FlowTrigger trigger, Map data) { - msg.setResourceUuid(vo.getUuid()); controller.preInitSdnController(msg, new Completion(trigger) { @Override public void success() { @@ -130,7 +150,7 @@ public void fail(ErrorCode errorCode) { } }); flow(new Flow() { - String __name__ = String.format("create-sdn-controller-%s-on-db", msg.getName()); + String __name__ = String.format("create-sdn-controller-%s-on-db", vo.getName()); @Override public void run(FlowTrigger trigger, Map data) { @@ -155,7 +175,7 @@ public void rollback(FlowRollback trigger, Map data) { } }); flow(new Flow() { - String __name__ = String.format("init-sdn-controller-%s", msg.getName()); + String __name__ = String.format("init-sdn-controller-%s", vo.getName()); @Override public void run(FlowTrigger trigger, Map data) { @@ -179,7 +199,7 @@ public void rollback(FlowRollback trigger, Map data) { } }); flow(new NoRollbackFlow() { - String __name__ = String.format("post-process-for-create-sdn-controller--%s", msg.getName()); + String __name__ = String.format("post-process-for-create-sdn-controller-%s", vo.getName()); @Override public void run(FlowTrigger trigger, Map data) { @@ -238,17 +258,22 @@ private void handle(APIAddSdnControllerMsg msg) { } vo.setStatus(SdnControllerStatus.Connected); - doCreateSdnController(vo, msg, new Completion(msg) { - @Override - public void success() { - tagMgr.createTagsFromAPICreateMessage(msg, vo.getUuid(), SdnControllerVO.class.getSimpleName()); - event.setInventory(SdnControllerInventory.valueOf(dbf.findByUuid(vo.getUuid(), SdnControllerVO.class))); - bus.publish(event); - } - + AddSdnControllerMsg amsg = new AddSdnControllerMsg(); + amsg.setSdnControllerVO(vo); + amsg.setAccountUuid(msg.getSession().getAccountUuid()); + if (msg.getSystemTags() != null) { + amsg.setSystemTags(msg.getSystemTags()); + } + bus.makeTargetServiceIdByResourceUuid(amsg, SdnControllerConstant.SERVICE_ID, vo.getUuid()); + bus.send(amsg, new CloudBusCallBack(amsg) { @Override - public void fail(ErrorCode errorCode) { - event.setError(errorCode); + public void run(MessageReply reply) { + if (reply.isSuccess()) { + tagMgr.createTagsFromAPICreateMessage(msg, vo.getUuid(), SdnControllerVO.class.getSimpleName()); + event.setInventory(SdnControllerInventory.valueOf(dbf.findByUuid(vo.getUuid(), SdnControllerVO.class))); + } else { + event.setError(reply.getError()); + } bus.publish(event); } }); diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnController.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnController.java index f9afed355d9..40cdc09d9eb 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnController.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcSdnController.java @@ -160,7 +160,7 @@ private void getH3cDefaultTenant(Completion completion) { } } - private void getH3cParameters(APIAddSdnControllerMsg msg, Completion completion) { + private void getH3cParameters(AddSdnControllerMsg msg, Completion completion) { FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("get-h3c-parameters-%s", self.getIp())); chain.then(new NoRollbackFlow() { @@ -228,12 +228,12 @@ public void handleMessage(SdnControllerMessage msg) { @Override @SdnControllerLog - public void preInitSdnController(APIAddSdnControllerMsg msg, Completion completion) { + public void preInitSdnController(AddSdnControllerMsg msg, Completion completion) { completion.success(); } @Override - public void createSdnControllerDb(APIAddSdnControllerMsg msg, SdnControllerVO vo, Completion completion) { + public void createSdnControllerDb(AddSdnControllerMsg msg, SdnControllerVO vo, Completion completion) { dbf.persist(vo); completion.success(); } @@ -245,7 +245,7 @@ public void deleteSdnControllerDb(SdnControllerVO vo) { @Override @SdnControllerLog - public void initSdnController(APIAddSdnControllerMsg msg, Completion completion) { + public void initSdnController(AddSdnControllerMsg msg, Completion completion) { getH3cControllerToken(new Completion(completion) { @Override public void success() { diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcV2SdnController.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcV2SdnController.java index 778d641c5e4..4f057e51915 100644 --- a/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcV2SdnController.java +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/h3cVcfc/H3cVcfcV2SdnController.java @@ -141,7 +141,7 @@ public void fail(ErrorCode errorCode) { @Override @SdnControllerLog - public void initSdnController(APIAddSdnControllerMsg msg, Completion completion) { + public void initSdnController(AddSdnControllerMsg msg, Completion completion) { getH3cControllerToken(new Completion(completion) { @Override public void success() { @@ -335,7 +335,7 @@ public void getH3cVniRanges(Completion completion) { } } - private void getH3cParameters(APIAddSdnControllerMsg msg, Completion completion) { + private void getH3cParameters(AddSdnControllerMsg msg, Completion completion) { FlowChain chain = FlowChainBuilder.newSimpleFlowChain(); chain.setName(String.format("get-h3c-parameters-%s", self.getIp())); chain.then(new NoRollbackFlow() { diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/AddSdnControllerMsg.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/AddSdnControllerMsg.java new file mode 100644 index 00000000000..044b0a22e0f --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/AddSdnControllerMsg.java @@ -0,0 +1,31 @@ +package org.zstack.sdnController.header; + +import org.zstack.header.message.NeedReplyMessage; +import org.zstack.header.network.sdncontroller.SdnControllerMessage; +import org.zstack.header.network.sdncontroller.SdnControllerVO; + +public class AddSdnControllerMsg extends NeedReplyMessage implements SdnControllerMessage { + SdnControllerVO sdnControllerVO; + String accountUuid; + + @Override + public String getSdnControllerUuid() { + return sdnControllerVO.getUuid(); + } + + public SdnControllerVO getSdnControllerVO() { + return sdnControllerVO; + } + + public void setSdnControllerVO(SdnControllerVO sdnControllerVO) { + this.sdnControllerVO = sdnControllerVO; + } + + public String getAccountUuid() { + return accountUuid; + } + + public void setAccountUuid(String accountUuid) { + this.accountUuid = accountUuid; + } +} diff --git a/plugin/sdnController/src/main/java/org/zstack/sdnController/header/AddSdnControllerReply.java b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/AddSdnControllerReply.java new file mode 100644 index 00000000000..a73448fdfe5 --- /dev/null +++ b/plugin/sdnController/src/main/java/org/zstack/sdnController/header/AddSdnControllerReply.java @@ -0,0 +1,16 @@ +package org.zstack.sdnController.header; + +import org.zstack.header.message.MessageReply; +import org.zstack.header.network.sdncontroller.SdnControllerInventory; + +public class AddSdnControllerReply extends MessageReply { + private SdnControllerInventory inventory; + + public SdnControllerInventory getInventory() { + return inventory; + } + + public void setInventory(SdnControllerInventory inventory) { + this.inventory = inventory; + } +} diff --git a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java index e63d69927c4..dff73723041 100644 --- a/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java +++ b/plugin/sugonSdnController/src/main/java/org/zstack/sugonSdnController/controller/SugonSdnController.java @@ -88,7 +88,7 @@ void handMessage(SdnControllerPingMsg msg) { } @Override - public void preInitSdnController(APIAddSdnControllerMsg msg, Completion completion) { + public void preInitSdnController(AddSdnControllerMsg msg, Completion completion) { try { long count = Q.New(SdnControllerVO.class).eq(SdnControllerVO_.vendorType, SugonSdnControllerConstant.TF_CONTROLLER).count(); if(count > 0) { @@ -101,7 +101,7 @@ public void preInitSdnController(APIAddSdnControllerMsg msg, Completion completi return; } String accountUuid = StringDSL.transToTfUuid(accountVO.getUuid()); - client = new TfHttpClient(msg.getIp()); + client = new TfHttpClient(msg.getSdnControllerVO().getIp()); Domain domain = (Domain) client.getDomain(); if(domain == null){ completion.fail(operr("get default domain on tf controller failed")); @@ -133,7 +133,7 @@ public void preInitSdnController(APIAddSdnControllerMsg msg, Completion completi } @Override - public void createSdnControllerDb(APIAddSdnControllerMsg msg, SdnControllerVO vo, Completion completion) { + public void createSdnControllerDb(AddSdnControllerMsg msg, SdnControllerVO vo, Completion completion) { dbf.persist(vo); completion.success(); } @@ -144,7 +144,7 @@ public void deleteSdnControllerDb(SdnControllerVO vo) { } @Override - public void initSdnController(APIAddSdnControllerMsg msg, Completion completion) { + public void initSdnController(AddSdnControllerMsg msg, Completion completion) { completion.success(); }