From b8f8989821710d0e27894f5c2e0b418ca767213e Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 27 Sep 2011 15:34:04 -0700 Subject: [PATCH] bug 11130: Update template and script version in the database when domR started --- .../api/response/DomainRouterResponse.java | 22 +++++++++++++++++++ core/src/com/cloud/vm/DomainRouterVO.java | 22 +++++++++++++++++++ .../VirtualNetworkApplianceManagerImpl.java | 19 ++++++++++++++++ setup/db/create-schema.sql | 2 ++ setup/db/db/schema-2212to30.sql | 3 +++ 5 files changed, 68 insertions(+) diff --git a/api/src/com/cloud/api/response/DomainRouterResponse.java b/api/src/com/cloud/api/response/DomainRouterResponse.java index 59d8dcc50eb..f67659bd20c 100644 --- a/api/src/com/cloud/api/response/DomainRouterResponse.java +++ b/api/src/com/cloud/api/response/DomainRouterResponse.java @@ -125,6 +125,12 @@ public class DomainRouterResponse extends BaseResponse { @SerializedName("redundantstate") @Param(description="the state of redundant virtual router") private String redundantState; + @SerializedName("templateversion") @Param(description="the version of template") + private String templateVersion; + + @SerializedName("scriptsversion") @Param(description="the version of scripts") + private String scriptsVersion; + @Override public Long getObjectId() { return getId(); @@ -393,4 +399,20 @@ public class DomainRouterResponse extends BaseResponse { public void setIsRedundantRouter(boolean isRedundantRouter) { this.isRedundantRouter = isRedundantRouter; } + + public String getTemplateVersion() { + return this.templateVersion; + } + + public void setTemplateVersion(String templateVersion) { + this.templateVersion = templateVersion; + } + + public String getScriptsVersion() { + return this.scriptsVersion; + } + + public void setScriptsVersion(String scriptsVersion) { + this.scriptsVersion = scriptsVersion; + } } diff --git a/core/src/com/cloud/vm/DomainRouterVO.java b/core/src/com/cloud/vm/DomainRouterVO.java index 1bd2b3e09f0..d6e0153672b 100755 --- a/core/src/com/cloud/vm/DomainRouterVO.java +++ b/core/src/com/cloud/vm/DomainRouterVO.java @@ -71,6 +71,12 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { @Enumerated(EnumType.STRING) private Role role = Role.DHCP_FIREWALL_LB_PASSWD_USERDATA; + @Column(name="template_version") + private String templateVersion; + + @Column(name="scripts_version") + private String scriptsVersion; + public DomainRouterVO(long id, long serviceOfferingId, String name, @@ -227,4 +233,20 @@ public class DomainRouterVO extends VMInstanceVO implements VirtualRouter { public void setStopPending(boolean stopPending) { this.stopPending = stopPending; } + + public String getTemplateVersion() { + return this.templateVersion; + } + + public void setTemplateVersion(String templateVersion) { + this.templateVersion = templateVersion; + } + + public String getScriptsVersion() { + return this.scriptsVersion; + } + + public void setScriptsVersion(String scriptsVersion) { + this.scriptsVersion = scriptsVersion; + } } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index a2b2cbf9293..c63cddb7931 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -44,6 +44,8 @@ import com.cloud.agent.api.BumpUpPriorityCommand; import com.cloud.agent.api.CheckRouterAnswer; import com.cloud.agent.api.CheckRouterCommand; import com.cloud.agent.api.Command; +import com.cloud.agent.api.GetDomRVersionAnswer; +import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.ModifySshKeysCommand; import com.cloud.agent.api.NetworkUsageAnswer; import com.cloud.agent.api.NetworkUsageCommand; @@ -1670,16 +1672,33 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian s_logger.debug("Reapplying vm data (userData and metaData) entries as a part of domR " + router + " start..."); createVmDataCommands(router, cmds); + // Update router template/scripts version + final GetDomRVersionCmd command = new GetDomRVersionCmd(); + command.setAccessDetail(NetworkElementCommand.ROUTER_IP, router.getPrivateIpAddress()); + command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + cmds.addCommand("getDomRVersion", command); + return true; } @Override public boolean finalizeStart(VirtualMachineProfile profile, long hostId, Commands cmds, ReservationContext context) { + DomainRouterVO router = profile.getVirtualMachine(); + CheckSshAnswer answer = (CheckSshAnswer) cmds.getAnswer("checkSsh"); if (answer == null || !answer.getResult()) { s_logger.warn("Unable to ssh to the VM: " + answer.getDetails()); return false; } + + GetDomRVersionAnswer versionAnswer = (GetDomRVersionAnswer) cmds.getAnswer("getDomRVersion"); + if (answer == null || !answer.getResult()) { + s_logger.warn("Unable to get the template/scripts version of router " + router.getInstanceName() + " due to: " + versionAnswer.getDetails() + ", but we would continue"); + return true; + } + router.setTemplateVersion(versionAnswer.getTemplateVersion()); + router.setScriptsVersion(versionAnswer.getScriptsVersion()); + router = _routerDao.persist(router); return true; } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index c8e7e7dfbf6..21809842eb9 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -944,6 +944,8 @@ CREATE TABLE `cloud`.`domain_router` ( `redundant_state` varchar(64) NOT NULL COMMENT 'the state of redundant virtual router', `stop_pending` int(1) unsigned NOT NULL COMMENT 'if this router would be stopped after we can connect to it', `role` varchar(64) NOT NULL COMMENT 'type of role played by this router', + `template_version` varchar(100) COMMENT 'template version', + `scripts_version` varchar(100) COMMENT 'scripts version', PRIMARY KEY (`id`), CONSTRAINT `fk_domain_router__id` FOREIGN KEY `fk_domain_router__id` (`id`) REFERENCES `vm_instance`(`id`) ON DELETE CASCADE ) ENGINE = InnoDB DEFAULT CHARSET=utf8 COMMENT = 'information about the domR instance'; diff --git a/setup/db/db/schema-2212to30.sql b/setup/db/db/schema-2212to30.sql index d60f90b1443..7b8e508906d 100644 --- a/setup/db/db/schema-2212to30.sql +++ b/setup/db/db/schema-2212to30.sql @@ -90,3 +90,6 @@ INSERT IGNORE INTO configuration VALUES ('Advanced', 'DEFAULT', 'management-serv INSERT IGNORE INTO configuration VALUES ('Advanced', 'DEFAULT', 'management-server', 'project.invite.timeout', '86400', 'Invitation expiration time (in seconds). Default is 1 day - 86400 seconds'); +ALTER TABLE `cloud`.`domain_router` ADD COLUMN `template_version` varchar(100) COMMENT 'template version' AFTER role; +ALTER TABLE `cloud`.`domain_router` ADD COLUMN `scripts_version` varchar(100) COMMENT 'scripts version' AFTER template_version; +