This is an automated email from the ASF dual-hosted git repository.
hapylestat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new d4b97b0 AMBARI-24487 repoVersion entity should show resolved full
stack version when available (dgrinenko) (#2412)
d4b97b0 is described below
commit d4b97b0831fc59cd95cada70277628520a904d4d
Author: Dmytro Grinenko <[email protected]>
AuthorDate: Thu Oct 4 18:40:12 2018 +0300
AMBARI-24487 repoVersion entity should show resolved full stack version
when available (dgrinenko) (#2412)
---
.../python/ambari_agent/ConfigurationBuilder.py | 6 +--
.../src/test/python/ambari_agent/TestAlerts.py | 4 +-
.../src/main/python/ambari_commons/os_check.py | 8 ++-
.../libraries/functions/repository_util.py | 16 ++++--
.../libraries/functions/version.py | 28 ++++++++++-
.../actionmanager/ExecutionCommandWrapper.java | 46 ++++++-----------
.../ambari/server/agent/CommandRepository.java | 7 ++-
.../server/agent/stomp/HostLevelParamsHolder.java | 38 +++-----------
.../agent/stomp/dto/HostLevelParamsCluster.java | 11 +---
.../server/agent/stomp/dto/HostRepositories.java | 50 -------------------
.../controller/AmbariManagementController.java | 4 --
.../controller/AmbariManagementControllerImpl.java | 23 +--------
.../controller/internal/HostResourceProvider.java | 58 ++++++----------------
.../listeners/upgrade/StackVersionListener.java | 19 ++-----
.../stack/upgrade/RepositoryVersionHelper.java | 24 ++++++++-
.../stack/upgrade/orchestrate/UpgradeContext.java | 2 +-
.../agent/stomp/HostLevelParamsHolderTest.java | 25 +++-------
.../internal/HostResourceProviderTest.java | 2 -
ambari-server/src/test/python/TestVersion.py | 44 ++++++++++++++--
19 files changed, 165 insertions(+), 250 deletions(-)
diff --git a/ambari-agent/src/main/python/ambari_agent/ConfigurationBuilder.py
b/ambari-agent/src/main/python/ambari_agent/ConfigurationBuilder.py
index 245aa81..24cb2ea 100644
--- a/ambari-agent/src/main/python/ambari_agent/ConfigurationBuilder.py
+++ b/ambari-agent/src/main/python/ambari_agent/ConfigurationBuilder.py
@@ -20,6 +20,7 @@ limitations under the License.
import hostname
+
class ConfigurationBuilder:
def __init__(self, initializer_module):
self.config = initializer_module.config
@@ -50,11 +51,6 @@ class ConfigurationBuilder:
if service_name is not None and service_name != 'null':
command_dict['serviceLevelParams'] =
metadata_cache.serviceLevelParams[service_name]
- host_repos = host_level_params_cache.hostRepositories
- if component_name in host_repos.componentRepos:
- repo_version_id = host_repos.componentRepos[component_name]
- command_dict['repositoryFile'] =
host_repos.commandRepos[str(repo_version_id)]
-
component_dict =
self.topology_cache.get_component_info_by_key(cluster_id, service_name,
component_name)
if component_dict is not None:
command_dict.update({
diff --git a/ambari-agent/src/test/python/ambari_agent/TestAlerts.py
b/ambari-agent/src/test/python/ambari_agent/TestAlerts.py
index 47e38f0..538aac3 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestAlerts.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestAlerts.py
@@ -542,10 +542,8 @@ class TestAlerts(TestCase):
#initializer_module.metadata_cache.rewrite_cluster_cache('-1',{'clusterLevelParams':{}})
#initializer_module.metadata_cache.rewrite_cluster_cache('0',{'clusterLevelParams':{}})
#initializer_module.configurations_cache.rewrite_cluster_cache('0', {})
- #initializer_module.host_level_params_cache.rewrite_cluster_cache('0',
{'hostRepositories':{'componentRepos':{}}})
#initializer_module.configuration_builder.topology_cache = MagicMock()
-
-
+
return initializer_module
@patch.object(ConfigurationBuilder, "get_configuration")
diff --git a/ambari-common/src/main/python/ambari_commons/os_check.py
b/ambari-common/src/main/python/ambari_commons/os_check.py
index e242d7b..5979a8c 100644
--- a/ambari-common/src/main/python/ambari_commons/os_check.py
+++ b/ambari-common/src/main/python/ambari_commons/os_check.py
@@ -192,19 +192,17 @@ class OSCheck:
distribution = (release, "{0}.{1}".format(major,minor),"WindowsServer")
else:
# we are on unsupported desktop os
- distribution = ("", "","")
+ distribution = ("", "", "")
else:
# linux distribution
PYTHON_VER = sys.version_info[0] * 10 + sys.version_info[1]
- if PYTHON_VER < 26:
- distribution = platform.dist()
+ if PYTHON_VER <= 26:
+ raise RuntimeError("Python 2.6 or less not supported")
elif _is_redhat_linux():
distribution = platform.dist()
else:
distribution = platform.linux_distribution()
-
-
if distribution[0] == '':
distribution = advanced_check(distribution)
diff --git
a/ambari-common/src/main/python/resource_management/libraries/functions/repository_util.py
b/ambari-common/src/main/python/resource_management/libraries/functions/repository_util.py
index c2123da..c3b1f44 100644
---
a/ambari-common/src/main/python/resource_management/libraries/functions/repository_util.py
+++
b/ambari-common/src/main/python/resource_management/libraries/functions/repository_util.py
@@ -30,14 +30,21 @@ __all__ = ["RepositoryUtil", "CommandRepository"]
# components_lits = repoName + postfix
UBUNTU_REPO_COMPONENTS_POSTFIX = "main"
+
class RepositoryUtil:
def __init__(self, config, tags_to_skip):
+ """
+ Constructor for RepositoryUtil
+
+ :type config dict
+ :type tags_to_skip set
+ """
self.tags_to_skip = tags_to_skip
# repo templates
repo_file = config['repositoryFile']
- repo_rhel_suse =
config['configurations']['cluster-env']['repo_suse_rhel_template']
- repo_ubuntu =
config['configurations']['cluster-env']['repo_ubuntu_template']
+ repo_rhel_suse =
config['configurations']['cluster-env']['repo_suse_rhel_template']
+ repo_ubuntu =
config['configurations']['cluster-env']['repo_ubuntu_template']
if is_empty(repo_file):
return
@@ -87,6 +94,7 @@ class RepositoryUtil:
return repo_files
+
def create_repo_files(template, command_repository):
"""
DEPRECATED. Is present for usage by old mpacks.
@@ -95,6 +103,7 @@ def create_repo_files(template, command_repository):
from resource_management.libraries.script import Script
return RepositoryUtil(Script.get_config(), set()).create_repo_files()
+
def _find_value(dictionary, key, default=None):
"""
Helper to find a value in a dictionary
@@ -127,7 +136,7 @@ class CommandRepository(object):
if isinstance(repo_object, dict):
json_dict = dict(repo_object) # strict dict(from ConfigDict) to avoid
hidden type conversions
- elif isinstance(repo_object, basestring):
+ elif isinstance(repo_object, (str, unicode)):
json_dict = json.loads(repo_object)
else:
raise Fail("Cannot deserialize command repository
{0}".format(str(repo_object)))
@@ -137,6 +146,7 @@ class CommandRepository(object):
self.stack_name = _find_value(json_dict, 'stackName')
self.version_string = _find_value(json_dict, 'repoVersion')
self.repo_filename = _find_value(json_dict, 'repoFileName')
+ self.resolved = _find_value(json_dict, 'resolved', False)
self.feat = CommandRepositoryFeature(_find_value(json_dict, "feature",
default={}))
self.items = []
diff --git
a/ambari-common/src/main/python/resource_management/libraries/functions/version.py
b/ambari-common/src/main/python/resource_management/libraries/functions/version.py
index 2cf5a1b..0c34de1 100644
---
a/ambari-common/src/main/python/resource_management/libraries/functions/version.py
+++
b/ambari-common/src/main/python/resource_management/libraries/functions/version.py
@@ -52,7 +52,6 @@ def format_stack_version(value):
else:
value = value[first_occurrence + 1:last_occurence]
-
value = re.sub(r'^\D+', '', value)
value = re.sub(r'\D+$', '', value)
value = value.strip('.')
@@ -85,6 +84,7 @@ def compare_versions(version1, version2, format=False):
max_segments = max(len(v1.split(".")), len(v2.split(".")))
return cmp(_normalize(v1, desired_segments=max_segments), _normalize(v2,
desired_segments=max_segments))
+
def get_major_version(full_version):
"""
:param input: Input string, e.g. "2.1.3.0" or "2.2.0.1-885" and other similar
@@ -99,3 +99,29 @@ def get_major_version(full_version):
major_version = m.group()
return major_version
+
+
+def get_current_component_version():
+ """
+ Returns best available version for the component at different stages
(install, start, stop)
+
+ :return best matched version or None
+ :rtype str|None
+ """
+ from resource_management.core.exceptions import Fail
+ from resource_management.libraries.functions.default import default
+ from resource_management.libraries.functions.stack_select import
get_role_component_current_stack_version
+ from resource_management.libraries.functions.repository_util import
CommandRepository
+
+ version = default("/commandParams/version", None)
+ if not version:
+ repository = CommandRepository(default("/repositoryFile", {}))
+ if not repository.resolved:
+ try:
+ version = get_role_component_current_stack_version()
+ except (Fail, TypeError):
+ pass
+ else:
+ version = repository.version_string
+
+ return version
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
index 533842d..f1cf49b 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
@@ -30,11 +30,8 @@ import org.apache.ambari.server.ServiceNotFoundException;
import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
import org.apache.ambari.server.agent.CommandRepository;
import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
-import org.apache.ambari.server.orm.entities.RepoOsEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.UpgradeEntity;
import org.apache.ambari.server.stack.upgrade.RepositoryVersionHelper;
@@ -81,12 +78,6 @@ public class ExecutionCommandWrapper {
@Inject
private RepositoryVersionHelper repoVersionHelper;
- /**
- * Used for injecting hooks and common-services into the command.
- */
- @Inject
- private AmbariMetaInfo ambariMetaInfo;
-
@Inject
private Configuration configuration;
@@ -175,8 +166,6 @@ public class ExecutionCommandWrapper {
configHelper.getAndMergeHostConfigAttributes(executionCommand.getConfigurationAttributes(),
configurationTags, cluster);
- setVersions(cluster);
-
// provide some basic information about a cluster upgrade if there is one
// in progress
UpgradeEntity upgrade = cluster.getUpgradeInProgress();
@@ -190,29 +179,15 @@ public class ExecutionCommandWrapper {
// setting repositoryFile
final Host host = cluster.getHost(executionCommand.getHostname()); //
can be null on internal commands
final String serviceName = executionCommand.getServiceName(); // can be
null on executing special RU tasks
+ CommandRepository commandRepository =
executionCommand.getRepositoryFile();
- if (null == executionCommand.getRepositoryFile() && null != host && null
!= serviceName) {
- final CommandRepository commandRepository;
- final Service service = cluster.getService(serviceName);
- final String componentName = executionCommand.getComponentName();
-
- try {
- if (null != componentName) {
- ServiceComponent serviceComponent =
service.getServiceComponent(componentName);
- commandRepository =
repoVersionHelper.getCommandRepository(cluster, serviceComponent, host);
- } else {
- RepositoryVersionEntity repoVersion =
service.getDesiredRepositoryVersion();
- RepoOsEntity osEntity = repoVersionHelper.getOSEntityForHost(host,
repoVersion);
- commandRepository =
repoVersionHelper.getCommandRepository(repoVersion, osEntity);
- }
- executionCommand.setRepositoryFile(commandRepository);
-
- } catch (SystemException e) {
- LOG.debug("Unable to find command repository with a correct
operating system for host {}",
- host, e);
- }
+ if (null == commandRepository && null != host && null != serviceName) {
+ commandRepository = repoVersionHelper.getCommandRepository(cluster,
cluster.getService(serviceName), host, executionCommand.getComponentName());
}
+ setVersions(cluster, commandRepository);
+
+ executionCommand.setRepositoryFile(commandRepository);
} catch (ClusterNotFoundException cnfe) {
// it's possible that there are commands without clusters; in such cases,
// just return the de-serialized command and don't try to read configs
@@ -228,7 +203,7 @@ public class ExecutionCommandWrapper {
return executionCommand;
}
- public void setVersions(Cluster cluster) {
+ public void setVersions(Cluster cluster, CommandRepository
commandRepository) {
// set the repository version for the component this command is for -
// always use the current desired version
String serviceName = executionCommand.getServiceName();
@@ -264,6 +239,13 @@ public class ExecutionCommandWrapper {
commandParams.put(VERSION, repositoryVersion.getVersion());
}
+ if (null != commandRepository && repositoryVersion.isResolved() &&
+
!repositoryVersion.getVersion().equals(commandRepository.getRepoVersion())) {
+
+ commandRepository.setRepoVersion(repositoryVersion.getVersion());
+ commandRepository.setResolved(true);
+ }
+
if (!commandParams.containsKey(HOOKS_FOLDER)) {
commandParams.put(HOOKS_FOLDER,configuration.getProperty(Configuration.HOOKS_FOLDER));
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
index 2671241..7852398 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
@@ -83,10 +83,15 @@ public class CommandRepository {
/**
* @param version the repo version
*/
- public void setRepositoryVersion(String version) {
+ public void setRepoVersion(String version) {
m_repoVersion = version;
}
+
+ public String getRepoVersion(){
+ return m_repoVersion;
+ }
+
/**
* @param id the repository id
*/
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java
b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java
index 4908d56..ce96cbd 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolder.java
@@ -19,15 +19,12 @@ package org.apache.ambari.server.agent.stomp;
import java.util.HashMap;
import java.util.Map;
-import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.agent.CommandRepository;
import org.apache.ambari.server.agent.RecoveryConfig;
import org.apache.ambari.server.agent.RecoveryConfigHelper;
import org.apache.ambari.server.agent.stomp.dto.HostLevelParamsCluster;
-import org.apache.ambari.server.agent.stomp.dto.HostRepositories;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.events.ClusterComponentsRepoChangedEvent;
import org.apache.ambari.server.events.HostLevelParamsUpdateEvent;
@@ -53,10 +50,10 @@ public class HostLevelParamsHolder extends
AgentHostDataHolder<HostLevelParamsUp
private RecoveryConfigHelper recoveryConfigHelper;
@Inject
- private Clusters clusters;
+ private Provider<AmbariManagementController> m_ambariManagementController;
@Inject
- private Provider<AmbariManagementController> m_ambariManagementController;
+ private Clusters clusters;
@Inject
public HostLevelParamsHolder(AmbariEventPublisher ambariEventPublisher) {
@@ -76,15 +73,12 @@ public class HostLevelParamsHolder extends
AgentHostDataHolder<HostLevelParamsUp
continue;
}
HostLevelParamsCluster hostLevelParamsCluster = new
HostLevelParamsCluster(
- m_ambariManagementController.get().retrieveHostRepositories(cl,
host),
recoveryConfigHelper.getRecoveryConfig(cl.getClusterName(),
host.getHostName()),
m_ambariManagementController.get().getBlueprintProvisioningStates(cl.getClusterId(),
host.getHostId()));
- hostLevelParamsClusters.put(Long.toString(cl.getClusterId()),
- hostLevelParamsCluster);
+ hostLevelParamsClusters.put(Long.toString(cl.getClusterId()),
hostLevelParamsCluster);
}
- HostLevelParamsUpdateEvent hostLevelParamsUpdateEvent = new
HostLevelParamsUpdateEvent(hostId, hostLevelParamsClusters);
- return hostLevelParamsUpdateEvent;
+ return new HostLevelParamsUpdateEvent(hostId, hostLevelParamsClusters);
}
public void updateAllHosts() throws AmbariException {
@@ -114,22 +108,15 @@ public class HostLevelParamsHolder extends
AgentHostDataHolder<HostLevelParamsUp
HostLevelParamsCluster updatedCluster =
hostLevelParamsClusterEntry.getValue();
HostLevelParamsCluster currentCluster =
current.getHostLevelParamsClusters().get(clusterId);
RecoveryConfig mergedRecoveryConfig;
- SortedMap<Long, CommandRepository> mergedRepositories;
Map<String, BlueprintProvisioningState>
mergedBlueprintProvisioningStates;
- SortedMap<String, Long> mergedComponentRepos;
+
if
(!currentCluster.getRecoveryConfig().equals(updatedCluster.getRecoveryConfig()))
{
mergedRecoveryConfig = updatedCluster.getRecoveryConfig();
clusterChanged = true;
} else {
mergedRecoveryConfig = currentCluster.getRecoveryConfig();
}
- if (!currentCluster.getHostRepositories().getRepositories()
- .equals(updatedCluster.getHostRepositories().getRepositories()))
{
- mergedRepositories =
updatedCluster.getHostRepositories().getRepositories();
- clusterChanged = true;
- } else {
- mergedRepositories =
currentCluster.getHostRepositories().getRepositories();
- }
+
if (!currentCluster.getBlueprintProvisioningState()
.equals(updatedCluster.getBlueprintProvisioningState())) {
mergedBlueprintProvisioningStates =
updatedCluster.getBlueprintProvisioningState();
@@ -137,18 +124,10 @@ public class HostLevelParamsHolder extends
AgentHostDataHolder<HostLevelParamsUp
} else {
mergedBlueprintProvisioningStates =
currentCluster.getBlueprintProvisioningState();
}
- if (!currentCluster.getHostRepositories().getComponentRepos()
-
.equals(updatedCluster.getHostRepositories().getComponentRepos())) {
- mergedComponentRepos =
updatedCluster.getHostRepositories().getComponentRepos();
- clusterChanged = true;
- } else {
- mergedComponentRepos =
currentCluster.getHostRepositories().getComponentRepos();
- }
+
if (clusterChanged) {
HostLevelParamsCluster mergedCluster = new HostLevelParamsCluster(
- new HostRepositories(mergedRepositories, mergedComponentRepos),
- mergedRecoveryConfig,
- mergedBlueprintProvisioningStates);
+ mergedRecoveryConfig, mergedBlueprintProvisioningStates);
mergedClusters.put(clusterId, mergedCluster);
changed = true;
} else {
@@ -192,7 +171,6 @@ public class HostLevelParamsHolder extends
AgentHostDataHolder<HostLevelParamsUp
HostLevelParamsUpdateEvent hostLevelParamsUpdateEvent = new
HostLevelParamsUpdateEvent(host.getHostId(),
Long.toString(clusterId),
new HostLevelParamsCluster(
-
m_ambariManagementController.get().retrieveHostRepositories(cluster, host),
recoveryConfigHelper.getRecoveryConfig(cluster.getClusterName(),
host.getHostName()),
m_ambariManagementController.get().getBlueprintProvisioningStates(clusterId,
host.getHostId())));
updateData(hostLevelParamsUpdateEvent);
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java
b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java
index c3b4842..749afa9 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostLevelParamsCluster.java
@@ -29,26 +29,17 @@ import com.fasterxml.jackson.annotation.JsonProperty;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class HostLevelParamsCluster {
- @JsonProperty("hostRepositories")
- private HostRepositories hostRepositories;
-
@JsonProperty("recoveryConfig")
private RecoveryConfig recoveryConfig;
@JsonProperty("blueprint_provisioning_state")
private Map<String, BlueprintProvisioningState> blueprintProvisioningState;
- public HostLevelParamsCluster(HostRepositories hostRepositories,
RecoveryConfig recoveryConfig,
- Map<String, BlueprintProvisioningState>
blueprintProvisioningState) {
- this.hostRepositories = hostRepositories;
+ public HostLevelParamsCluster(RecoveryConfig recoveryConfig, Map<String,
BlueprintProvisioningState> blueprintProvisioningState) {
this.recoveryConfig = recoveryConfig;
this.blueprintProvisioningState = blueprintProvisioningState;
}
- public HostRepositories getHostRepositories() {
- return hostRepositories;
- }
-
public RecoveryConfig getRecoveryConfig() {
return recoveryConfig;
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java
b/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java
deleted file mode 100644
index bc3018e..0000000
---
a/ambari-server/src/main/java/org/apache/ambari/server/agent/stomp/dto/HostRepositories.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package org.apache.ambari.server.agent.stomp.dto;
-
-import java.util.SortedMap;
-
-import org.apache.ambari.server.agent.CommandRepository;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public class HostRepositories {
-
- @JsonProperty("commandRepos")
- private SortedMap<Long, CommandRepository> repositories;
-
- @JsonProperty("componentRepos")
- private SortedMap<String, Long> componentRepos;
-
- public HostRepositories(SortedMap<Long, CommandRepository> repositories,
SortedMap<String, Long> componentRepos) {
- this.repositories = repositories;
- this.componentRepos = componentRepos;
- }
-
- public SortedMap<Long, CommandRepository> getRepositories() {
- return repositories;
- }
-
- public SortedMap<String, Long> getComponentRepos() {
- return componentRepos;
- }
-}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
index 57e80f5..b892660 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
@@ -27,7 +27,6 @@ import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.agent.stomp.dto.HostRepositories;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.api.services.LoggingService;
import org.apache.ambari.server.controller.internal.DeleteStatusMetaData;
@@ -53,7 +52,6 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
-import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.Service;
@@ -944,8 +942,6 @@ public interface AmbariManagementController {
void saveConfigGroupUpdate(ConfigGroupRequest configGroupRequest,
ConfigGroupResponse configGroupResponse);
- HostRepositories retrieveHostRepositories(Cluster cluster, Host host) throws
AmbariException;
-
MetadataUpdateEvent getClusterMetadataOnConfigsUpdate(Cluster cluster)
throws AmbariException;
TopologyUpdateEvent
getAddedComponentsTopologyEvent(Set<ServiceComponentHostRequest> requests)
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index fe851bc..b586caf 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -111,7 +111,6 @@ import org.apache.ambari.server.agent.CommandRepository;
import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.agent.stomp.HostLevelParamsHolder;
import org.apache.ambari.server.agent.stomp.TopologyHolder;
-import org.apache.ambari.server.agent.stomp.dto.HostRepositories;
import org.apache.ambari.server.agent.stomp.dto.MetadataCluster;
import org.apache.ambari.server.agent.stomp.dto.MetadataServiceInfo;
import org.apache.ambari.server.agent.stomp.dto.TopologyCluster;
@@ -2613,7 +2612,7 @@ public class AmbariManagementControllerImpl implements
AmbariManagementControlle
throw new RuntimeException(e);
}
execCmd.setRepositoryFile(commandRepository);
- execCmdWrapper.setVersions(cluster);
+ execCmdWrapper.setVersions(cluster, null);
if ((execCmd != null) &&
(execCmd.getConfigurationTags().containsKey("cluster-env"))) {
LOG.debug("AmbariManagementControllerImpl.createHostAction: created
ExecutionCommand for host {}, role {}, roleCommand {}, and command ID {}, with
cluster-env tags {}",
@@ -5901,24 +5900,4 @@ public class AmbariManagementControllerImpl implements
AmbariManagementControlle
return agentConfigs;
}
-
- @Override
- public HostRepositories retrieveHostRepositories(Cluster cluster, Host host)
throws AmbariException {
- List<ServiceComponentHost> hostComponents =
cluster.getServiceComponentHosts(host.getHostName());
- SortedMap<Long, CommandRepository> hostRepositories = new TreeMap<>();
- SortedMap<String, Long> componentsRepos = new TreeMap<>();
- for (ServiceComponentHost serviceComponentHost : hostComponents) {
-
- CommandRepository commandRepository;
- try {
- commandRepository = repoVersionHelper.getCommandRepository(cluster,
- serviceComponentHost.getServiceComponent(), host);
- } catch (SystemException e) {
- throw new RuntimeException(e);
- }
- hostRepositories.put(commandRepository.getRepoVersionId(),
commandRepository);
- componentsRepos.put(serviceComponentHost.getServiceComponentName(),
commandRepository.getRepoVersionId());
- }
- return new HostRepositories(hostRepositories, componentsRepos);
- }
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index b8f1e2b..a6ed0e5 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -42,12 +42,10 @@ import org.apache.ambari.server.agent.stomp.TopologyHolder;
import org.apache.ambari.server.agent.stomp.dto.HostLevelParamsCluster;
import org.apache.ambari.server.agent.stomp.dto.TopologyCluster;
import org.apache.ambari.server.agent.stomp.dto.TopologyHost;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.ConfigurationRequest;
import org.apache.ambari.server.controller.HostRequest;
import org.apache.ambari.server.controller.HostResponse;
-import org.apache.ambari.server.controller.MaintenanceStateHelper;
import org.apache.ambari.server.controller.RequestStatusResponse;
import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -197,9 +195,6 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
HOST_ATTRIBUTES_PROPERTY_ID);
@Inject
- private MaintenanceStateHelper maintenanceStateHelper;
-
- @Inject
private OsFamily osFamily;
@Inject
@@ -214,8 +209,6 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
@Inject
private RecoveryConfigHelper recoveryConfigHelper;
- @Inject
- private AmbariMetaInfo ambariMetaInfo;
// ----- Constructors ----------------------------------------------------
@@ -249,12 +242,9 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
if (isHostGroupRequest(request)) {
createResponse = submitHostRequests(request);
} else {
- createResources(new Command<Void>() {
- @Override
- public Void invoke() throws AmbariException, AuthorizationException {
- createHosts(request);
- return null;
- }
+ createResources((Command<Void>) () -> {
+ createHosts(request);
+ return null;
});
}
notifyCreate(Resource.Type.Host, request);
@@ -264,7 +254,7 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
@Override
protected Set<Resource> getResourcesAuthorized(Request request, Predicate
predicate)
- throws SystemException, UnsupportedPropertyException,
NoSuchResourceException, NoSuchParentResourceException {
+ throws SystemException, NoSuchResourceException,
NoSuchParentResourceException {
final Set<HostRequest> requests = new HashSet<>();
@@ -277,12 +267,7 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
}
}
- Set<HostResponse> responses = getResources(new
Command<Set<HostResponse>>() {
- @Override
- public Set<HostResponse> invoke() throws AmbariException {
- return getHosts(requests);
- }
- });
+ Set<HostResponse> responses = getResources(() -> getHosts(requests));
Set<String> requestedIds = getRequestPropertyIds(request, predicate);
Set<Resource> resources = new HashSet<>();
@@ -357,12 +342,9 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
requests.add(getRequest(propertyMap));
}
- modifyResources(new Command<Void>() {
- @Override
- public Void invoke() throws AmbariException, AuthorizationException {
- updateHosts(requests);
- return null;
- }
+ modifyResources((Command<Void>) () -> {
+ updateHosts(requests);
+ return null;
});
notifyUpdate(Resource.Type.Host, request, predicate);
@@ -380,12 +362,7 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
requests.add(getRequest(propertyMap));
}
- DeleteStatusMetaData deleteStatusMetaData = modifyResources(new
Command<DeleteStatusMetaData>() {
- @Override
- public DeleteStatusMetaData invoke() throws AmbariException {
- return deleteHosts(requests, request.isDryRunRequest());
- }
- });
+ DeleteStatusMetaData deleteStatusMetaData = modifyResources(() ->
deleteHosts(requests, request.isDryRunRequest()));
if (!request.isDryRunRequest()) {
notifyDelete(Resource.Type.Host, predicate);
@@ -560,16 +537,11 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
addedTopologies.put(clusterId, new TopologyCluster());
}
Host addedHost = clusters.getHost(hostRequest.getHostname());
- addedTopologies.get(clusterId).addTopologyHost(new
TopologyHost(addedHost.getHostId(),
- addedHost.getHostName(),
- addedHost.getRackInfo(),
- addedHost.getIPv4()));
+ addedTopologies.get(clusterId).addTopologyHost(new
TopologyHost(addedHost.getHostId(), addedHost.getHostName(),
+ addedHost.getRackInfo(), addedHost.getIPv4()));
HostLevelParamsUpdateEvent hostLevelParamsUpdateEvent = new
HostLevelParamsUpdateEvent(addedHost.getHostId(),
clusterId,
- new HostLevelParamsCluster(
- getManagementController().retrieveHostRepositories(cl, addedHost),
- recoveryConfigHelper.getRecoveryConfig(cl.getClusterName(),
- addedHost.getHostName()),
+ new HostLevelParamsCluster(
recoveryConfigHelper.getRecoveryConfig(cl.getClusterName(),
addedHost.getHostName()),
getManagementController().getBlueprintProvisioningStates(cl.getClusterId(),
addedHost.getHostId())
));
hostLevelParamsUpdateEvents.add(hostLevelParamsUpdateEvent);
@@ -702,8 +674,7 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
Collection<String>
skipInstallForComponents,
Collection<String>
dontSkipInstallForComponents, final boolean skipFailure,
boolean useClusterHostInfo)
- throws ResourceAlreadyExistsException,
- SystemException,
+ throws SystemException,
NoSuchParentResourceException,
UnsupportedPropertyException {
@@ -713,8 +684,7 @@ public class HostResourceProvider extends
AbstractControllerResourceProvider {
}
public RequestStatusResponse start(final String cluster, final String
hostname)
- throws ResourceAlreadyExistsException,
- SystemException,
+ throws SystemException,
NoSuchParentResourceException,
UnsupportedPropertyException {
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
index 8160f0e..af4b745 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java
@@ -82,7 +82,7 @@ public class StackVersionListener {
}
@Subscribe
- public void onAmbariEvent(HostComponentVersionAdvertisedEvent event) throws
AmbariException {
+ public void onAmbariEvent(HostComponentVersionAdvertisedEvent event) {
LOG.debug("Received event {}", event);
Cluster cluster = event.getCluster();
@@ -102,24 +102,15 @@ public class StackVersionListener {
// exact version is not known in advance.
RepositoryVersionEntity rve =
repositoryVersionDAO.findByPK(event.getRepositoryVersionId());
if (null != rve) {
- boolean updated = false;
String currentRepoVersion = rve.getVersion();
if (!StringUtils.equals(currentRepoVersion, newVersion)) {
rve.setVersion(newVersion);
+ rve.setResolved(false);
+ }
+ // the reported versions are the same - we should ensure that the repo
is resolved
+ if (!rve.isResolved()) {
rve.setResolved(true);
repositoryVersionDAO.merge(rve);
- updated = true;
- } else {
- // the reported versions are the same - we should ensure that the
repo
- // is resolved
- if (!rve.isResolved()) {
- rve.setResolved(true);
- repositoryVersionDAO.merge(rve);
- updated = true;
- }
- }
- if (updated) {
-
m_hostLevelParamsHolder.get().updateData(m_hostLevelParamsHolder.get().getCurrentData(sch.getHost().getHostId()));
}
}
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
index a469df7..5e22657 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
@@ -385,7 +385,7 @@ public class RepositoryVersionHelper {
}
commandRepo.setRepositories(osEntity.getFamily(),
osEntity.getRepoDefinitionEntities());
- commandRepo.setRepositoryVersion(repoVersion.getVersion());
+ commandRepo.setRepoVersion(repoVersion.getVersion());
commandRepo.setRepositoryVersionId(repoVersion.getId());
commandRepo.setResolved(repoVersion.isResolved());
commandRepo.setStackName(repoVersion.getStackId().getStackName());
@@ -433,6 +433,28 @@ public class RepositoryVersionHelper {
return getCommandRepository(repoVersion, osEntity);
}
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
+ public CommandRepository getCommandRepository(final Cluster cluster, final
Service service, final Host host,
+ final String componentName)
throws AmbariException {
+ CommandRepository commandRepository = null;
+ try {
+ if (null != componentName) {
+ ServiceComponent serviceComponent =
service.getServiceComponent(componentName);
+ commandRepository = getCommandRepository(cluster, serviceComponent,
host);
+ } else {
+ RepositoryVersionEntity repoVersion =
service.getDesiredRepositoryVersion();
+ RepoOsEntity osEntity = getOSEntityForHost(host, repoVersion);
+ commandRepository = getCommandRepository(repoVersion, osEntity);
+ }
+ } catch (SystemException e){
+ LOG.debug("Unable to find command repository with a correct operating
system for host {}",
+ host, e);
+ }
+
+ return commandRepository;
+ }
+
+
/**
* This method builds and adds repo infoto hostLevelParams of action
*
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
index 5245921..1f9f90f 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
@@ -531,7 +531,7 @@ public class UpgradeContext {
/*
* This feels wrong. We need the upgrade pack used when creating the
upgrade, as that
- * is really the source, not the target. Can NOT use
upgradeEntity.getRepositoryVersion() here
+ * is really the source, not the target. Can NOT use
upgradeEntity.getRepoVersion() here
* for the stack id. Consulting the service map should work out since full
upgrades are all same source stack,
* and patches by definition are the same source stack (just different
repos of that stack).
*/
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolderTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolderTest.java
index 867a9e2..63c733f 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolderTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/agent/stomp/HostLevelParamsHolderTest.java
@@ -28,7 +28,6 @@ import java.util.Map;
import org.apache.ambari.server.agent.RecoveryConfig;
import org.apache.ambari.server.agent.stomp.dto.HostLevelParamsCluster;
-import org.apache.ambari.server.agent.stomp.dto.HostRepositories;
import org.apache.ambari.server.events.HostLevelParamsUpdateEvent;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.junit.Test;
@@ -40,9 +39,7 @@ public class HostLevelParamsHolderTest {
public void testHandleUpdateEmptyCurrent() {
HostLevelParamsUpdateEvent current = new
HostLevelParamsUpdateEvent(HOST_ID, Collections.emptyMap());
Map<String, HostLevelParamsCluster> clusters = new HashMap<>();
- HostRepositories hostRepositories = new
HostRepositories(Collections.emptySortedMap(), Collections.emptySortedMap());
- HostLevelParamsCluster cluster = new
HostLevelParamsCluster(hostRepositories,
- new RecoveryConfig(null), Collections.emptyMap());
+ HostLevelParamsCluster cluster = new HostLevelParamsCluster(new
RecoveryConfig(null), Collections.emptyMap());
clusters.put("1", cluster);
HostLevelParamsUpdateEvent update = new
HostLevelParamsUpdateEvent(HOST_ID, clusters);
@@ -57,9 +54,7 @@ public class HostLevelParamsHolderTest {
@Test
public void testHandleUpdateEmptyUpdate() {
Map<String, HostLevelParamsCluster> clusters = new HashMap<>();
- HostRepositories hostRepositories = new
HostRepositories(Collections.emptySortedMap(), Collections.emptySortedMap());
- HostLevelParamsCluster cluster = new
HostLevelParamsCluster(hostRepositories,
- new RecoveryConfig(null), Collections.emptyMap());
+ HostLevelParamsCluster cluster = new HostLevelParamsCluster(new
RecoveryConfig(null), Collections.emptyMap());
clusters.put("1", cluster);
HostLevelParamsUpdateEvent current = new
HostLevelParamsUpdateEvent(HOST_ID, clusters);
HostLevelParamsUpdateEvent update = new
HostLevelParamsUpdateEvent(HOST_ID, Collections.emptyMap());
@@ -75,16 +70,12 @@ public class HostLevelParamsHolderTest {
@Test
public void testHandleUpdateNoChanges() {
Map<String, HostLevelParamsCluster> currentClusters = new HashMap<>();
- HostRepositories currentHostRepositories = new
HostRepositories(Collections.emptySortedMap(), Collections.emptySortedMap());
- HostLevelParamsCluster currentCluster = new
HostLevelParamsCluster(currentHostRepositories,
- new RecoveryConfig(null), Collections.emptyMap());
+ HostLevelParamsCluster currentCluster = new HostLevelParamsCluster(new
RecoveryConfig(null), Collections.emptyMap());
currentClusters.put("1", currentCluster);
HostLevelParamsUpdateEvent current = new
HostLevelParamsUpdateEvent(HOST_ID, currentClusters);
Map<String, HostLevelParamsCluster> updateClusters = new HashMap<>();
- HostRepositories updateHostRepositories = new
HostRepositories(Collections.emptySortedMap(), Collections.emptySortedMap());
- HostLevelParamsCluster updateCluster = new
HostLevelParamsCluster(updateHostRepositories,
- new RecoveryConfig(null), Collections.emptyMap());
+ HostLevelParamsCluster updateCluster = new HostLevelParamsCluster(new
RecoveryConfig(null), Collections.emptyMap());
updateClusters.put("1", updateCluster);
HostLevelParamsUpdateEvent update = new
HostLevelParamsUpdateEvent(HOST_ID, updateClusters);
@@ -99,16 +90,12 @@ public class HostLevelParamsHolderTest {
@Test
public void testHandleUpdateOnChanges() {
Map<String, HostLevelParamsCluster> currentClusters = new HashMap<>();
- HostRepositories currentHostRepositories = new
HostRepositories(Collections.emptySortedMap(), Collections.emptySortedMap());
- HostLevelParamsCluster currentCluster = new
HostLevelParamsCluster(currentHostRepositories,
- new RecoveryConfig(null), Collections.emptyMap());
+ HostLevelParamsCluster currentCluster = new HostLevelParamsCluster(new
RecoveryConfig(null), Collections.emptyMap());
currentClusters.put("1", currentCluster);
HostLevelParamsUpdateEvent current = new
HostLevelParamsUpdateEvent(HOST_ID, currentClusters);
Map<String, HostLevelParamsCluster> updateClusters = new HashMap<>();
- HostRepositories updateHostRepositories = new
HostRepositories(Collections.emptySortedMap(), Collections.emptySortedMap());
- HostLevelParamsCluster updateCluster = new
HostLevelParamsCluster(updateHostRepositories,
- new RecoveryConfig(null), Collections.emptyMap());
+ HostLevelParamsCluster updateCluster = new HostLevelParamsCluster(new
RecoveryConfig(null), Collections.emptyMap());
updateClusters.put("2", updateCluster);
HostLevelParamsUpdateEvent update = new
HostLevelParamsUpdateEvent(HOST_ID, updateClusters);
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index 7eacb28..c945afd 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@ -58,7 +58,6 @@ import org.apache.ambari.server.agent.RecoveryConfigHelper;
import org.apache.ambari.server.agent.RecoveryReport;
import org.apache.ambari.server.agent.stomp.HostLevelParamsHolder;
import org.apache.ambari.server.agent.stomp.TopologyHolder;
-import org.apache.ambari.server.agent.stomp.dto.HostRepositories;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.audit.AuditLogger;
import org.apache.ambari.server.controller.AbstractRootServiceResponseFactory;
@@ -191,7 +190,6 @@ public class HostResourceProviderTest extends
EasyMockSupport {
EasyMock.expectLastCall().once();
expect(managementController.getClusters()).andReturn(clusters).atLeastOnce();
- expect(managementController.retrieveHostRepositories(anyObject(),
anyObject())).andReturn(createMock(HostRepositories.class));
expect(resourceProviderFactory.getHostResourceProvider(
eq(managementController))).andReturn(hostResourceProvider).anyTimes();
diff --git a/ambari-server/src/test/python/TestVersion.py
b/ambari-server/src/test/python/TestVersion.py
index 0b66478..cf8dff9 100644
--- a/ambari-server/src/test/python/TestVersion.py
+++ b/ambari-server/src/test/python/TestVersion.py
@@ -1,4 +1,4 @@
-'''
+"""
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
@@ -14,10 +14,11 @@ distributed under the License is distributed on an "AS IS"
BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-'''
+"""
import os
from unittest import TestCase
+from mock.mock import patch
from resource_management.libraries.functions.mpack_version import MpackVersion
from resource_management.libraries.functions.module_version import
ModuleVersion
@@ -175,5 +176,42 @@ class TestVersion(TestCase):
m2 = ModuleVersion.parse("1.2.3.4-b10")
self.assertTrue(m1 == m2)
-
+
@patch("resource_management.libraries.functions.stack_select.get_role_component_current_stack_version")
+ @patch("resource_management.libraries.script.Script.get_config")
+ def test_get_current_component_version(self, get_config_mock,
get_role_component_current_stack_version_mock):
+ ver1 = "1.0.0.0"
+ ver2 = "2.0.0.0"
+
+ get_config_mock.return_value = {
+ "commandParams": {
+ "version": ver1
+ },
+ "repositoryFile": {
+ "resolved": True,
+ "repoVersion": ver2,
+ "repositories": [],
+ "feature": {}
+ }
+ }
+
+ # case 1. version come with command params
+ version = self.version_module.get_current_component_version()
+
+ self.assertFalse(get_role_component_current_stack_version_mock.called)
+ self.assertEquals(ver1, version)
+
+ # case 2. version not come with commands params but repository is resolved
+ get_role_component_current_stack_version_mock.reset_mock()
+ del get_config_mock.return_value["commandParams"]["version"]
+ version = self.version_module.get_current_component_version()
+
+ self.assertFalse(get_role_component_current_stack_version_mock.called)
+ self.assertEquals(ver2, version)
+
+ # case 3. same as case 2 but repository is not resolved
+ get_role_component_current_stack_version_mock.reset_mock()
+ get_config_mock.return_value["repositoryFile"]["resolved"] = False
+ self.version_module.get_current_component_version()
+
+ self.assertTrue(get_role_component_current_stack_version_mock.called)