You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2017/04/27 20:23:34 UTC
[1/4] ambari git commit: AMBARI-20871. Unify repository file creation
(ncole)
Repository: ambari
Updated Branches:
refs/heads/branch-feature-AMBARI-12556 13d806b85 -> b68662490
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
index 082d200..008a1e7 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py
@@ -61,3 +61,33 @@ class TestHookBeforeInstall(RMFTestCase):
self.assertResourceCalled('Package', 'unzip', retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'curl', retry_count=5, retry_on_repo_unavailability=False)
self.assertNoMoreResources()
+
+
+
+ def test_hook_default_repository_file(self):
+ self.executeScript("2.0.6/hooks/before-INSTALL/scripts/hook.py",
+ classname="BeforeInstallHook",
+ command="hook",
+ config_file="repository_file.json"
+ )
+ self.assertResourceCalled('Repository', 'HDP-2.2-repo-4',
+ action=['create'],
+ base_url='http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
+ components=['HDP', 'main'],
+ mirror_list=None,
+ repo_file_name='ambari-hdp-4',
+ repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
+ append_to_file=False)
+
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20-repo-4',
+ action=['create'],
+ base_url='http://repo1/HDP-UTILS/centos5/2.x/updates/2.2.0.0',
+ components=['HDP-UTILS', 'main'],
+ mirror_list=None,
+ repo_file_name='ambari-hdp-4',
+ repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
+ append_to_file=True)
+
+ self.assertResourceCalled('Package', 'unzip', retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'curl', retry_count=5, retry_on_repo_unavailability=False)
+ self.assertNoMoreResources()
[4/4] ambari git commit: AMBARI-20871. Unify repository file creation
(ncole)
Posted by nc...@apache.org.
AMBARI-20871. Unify repository file creation (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b6866249
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b6866249
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b6866249
Branch: refs/heads/branch-feature-AMBARI-12556
Commit: b68662490a64277f4d5eb7ae18b54850678deff2
Parents: 13d806b
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu Apr 27 10:15:29 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu Apr 27 16:11:15 2017 -0400
----------------------------------------------------------------------
.../libraries/functions/repository_util.py | 127 ++
.../ambari/server/agent/CommandRepository.java | 170 +++
.../ambari/server/agent/ExecutionCommand.java | 32 +-
.../commands/StackAdvisorCommand.java | 6 +-
.../DistributeRepositoriesStructuredOutput.java | 12 -
.../controller/ActionExecutionContext.java | 35 +
.../controller/AmbariActionExecutionHelper.java | 2 +
.../AmbariCustomCommandExecutionHelper.java | 222 ++-
.../AmbariManagementControllerImpl.java | 4 +-
.../ClusterStackVersionResourceProvider.java | 105 +-
.../HostStackVersionResourceProvider.java | 70 +-
.../stack/upgrade/RepositoryVersionHelper.java | 130 +-
.../custom_actions/scripts/install_packages.py | 63 +-
.../hooks/before-INSTALL/scripts/params.py | 2 +
.../scripts/repo_initialization.py | 22 +-
...ClusterStackVersionResourceProviderTest.java | 19 +-
.../HostStackVersionResourceProviderTest.java | 3 +-
.../upgrades/UpgradeActionTest.java | 15 +-
.../UpdateActiveRepoVersionOnStartupTest.java | 25 +-
.../upgrade/RepositoryVersionHelperTest.java | 27 +-
.../custom_actions/TestInstallPackages.py | 118 +-
.../install_packages_repository_file.json | 112 ++
.../stacks/2.0.6/configs/repository_file.json | 1275 ++++++++++++++++++
.../hooks/before-INSTALL/test_before_install.py | 30 +
24 files changed, 2293 insertions(+), 333 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-common/src/main/python/resource_management/libraries/functions/repository_util.py
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..c9920e2
--- /dev/null
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/repository_util.py
@@ -0,0 +1,127 @@
+"""
+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
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+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.
+
+"""
+
+from resource_management.core.exceptions import Fail
+from resource_management.core.logger import Logger
+from resource_management.libraries.resources.repository import Repository
+import ambari_simplejson as json
+
+
+__all__ = ["create_repo_files", "CommandRepository"]
+
+# components_lits = repoName + postfix
+UBUNTU_REPO_COMPONENTS_POSTFIX = ["main"]
+
+
+def create_repo_files(template, command_repository):
+ """
+ Creates repositories in a consistent manner for all types
+ :param command_repository: a CommandRepository instance
+ :return:
+ """
+
+ if command_repository.version_id is None:
+ raise Fail("The command repository was not parsed correctly")
+
+ if 0 == len(command_repository.repositories):
+ raise Fail("Cannot create repository files when no repositories are defined")
+
+ # add the stack name to the file name just to make it a little easier to debug
+ # version_id is the primary id of the repo_version table in the database
+ file_name = "ambari-{0}-{1}".format(command_repository.stack_name.lower(),
+ command_repository.version_id)
+
+ append_to_file = False # initialize to False to create the file anew.
+
+ for repository in command_repository.repositories:
+
+ if repository.repo_id is None:
+ raise Fail("Repository with url {0} has no id".format(repository.base_url))
+
+ Repository(repository.repo_id,
+ action = "create",
+ base_url = repository.base_url,
+ mirror_list = repository.mirrors_list,
+ repo_file_name = file_name,
+ repo_template = template,
+ components = repository.ubuntu_components,
+ append_to_file = append_to_file)
+ append_to_file = True
+
+
+def _find_value(dictionary, key):
+ """
+ Helper to find a value in a dictionary
+ """
+ if key not in dictionary:
+ return None
+
+ return dictionary[key]
+
+
+class CommandRepository(object):
+ """
+ Class that encapsulates the representation of repositories passed in a command. This class
+ should match the CommandRepository class.
+ """
+
+ def __init__(self, jsonvalue):
+
+ if isinstance(jsonvalue, dict):
+ json_dict = jsonvalue
+ elif isinstance(jsonvalue, basestring):
+ json_dict = json.loads(jsonvalue)
+
+ if json_dict is None:
+ raise Fail("Cannot deserialize command repository {0}".format(str(jsonvalue)))
+
+ # version_id is the primary id of the repo_version table in the database
+ self.version_id = _find_value(json_dict, 'repoVersionId')
+ self.stack_name = _find_value(json_dict, 'stackName')
+ self.repositories = []
+
+ repos_def = _find_value(json_dict, 'repositories')
+ if repos_def is not None:
+ if not isinstance(repos_def, list):
+ repos_def = [repos_def]
+
+ for repo_def in repos_def:
+ self.repositories.append(_CommandRepositoryEntry(repo_def))
+
+
+class _CommandRepositoryEntry(object):
+ """
+ Class that represents the entries of a CommandRepository. This isn't meant to be instantiated
+ outside a CommandRepository
+ """
+ def __init__(self, json_dict):
+ self.repo_id = _find_value(json_dict, 'repoId') # this is the id within the repo file, not an Ambari artifact
+ self.repo_name = _find_value(json_dict, 'repoName')
+ self.base_url = _find_value(json_dict, 'baseUrl')
+ self.mirrors_list = _find_value(json_dict, 'mirrorsList')
+
+ # if repoName is changed on the java side, this will fail for ubuntu since we rely on the
+ # name being the same as how the repository was built
+ self.ubuntu_components = [self.repo_name] + UBUNTU_REPO_COMPONENTS_POSTFIX
+
+
+
+
+
+
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..849d6fb
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/CommandRepository.java
@@ -0,0 +1,170 @@
+/**
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.ambari.server.orm.entities.RepositoryEntity;
+import org.apache.ambari.server.state.RepositoryInfo;
+
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * Wraps the information required to create repositories from a command. This was added
+ * as a top level command object.
+ */
+public class CommandRepository {
+
+ @SerializedName("repositories")
+ private List<Repository> m_repositories = new ArrayList<>();
+
+ @SerializedName("repoVersion")
+ private String m_repoVersion;
+
+ @SerializedName("repoVersionId")
+ private long m_repoVersionId;
+
+ @SerializedName("stackName")
+ private String m_stackName;
+
+ /**
+ * @param version the repo version
+ */
+ public void setRepositoryVersion(String version) {
+ m_repoVersion = version;
+ }
+
+ /**
+ * @param id the repository id
+ */
+ public void setRepositoryVersionId(long id) {
+ m_repoVersionId = id;
+ }
+
+ /**
+ * @param name the stack name
+ */
+ public void setStackName(String name) {
+ m_stackName = name;
+ }
+
+ /**
+ * @param repositories the repositories if sourced from the stack instead of the repo_version.
+ */
+ public void setRepositories(Collection<RepositoryInfo> repositories) {
+ m_repositories = new ArrayList<>();
+
+ for (RepositoryInfo info : repositories) {
+ m_repositories.add(new Repository(info));
+ }
+ }
+
+ /**
+ * @param osType the OS type for the repositories
+ * @param repositories the repository entities that should be processed into a file
+ */
+ public void setRepositories(String osType, Collection<RepositoryEntity> repositories) {
+ m_repositories = new ArrayList<>();
+
+ for (RepositoryEntity entity : repositories) {
+ m_repositories.add(new Repository(osType, entity));
+ }
+ }
+
+ /**
+ * @return the repositories that the command should process into a file.
+ */
+ public Collection<Repository> getRepositories() {
+ return m_repositories;
+ }
+
+ /**
+ * Sets a uniqueness on the repo ids.
+ *
+ * @param suffix the repo id suffix
+ */
+ public void setUniqueSuffix(String suffix) {
+ for (Repository repo : m_repositories) {
+ repo.m_repoId = repo.m_repoId + suffix;
+ }
+ }
+
+ /**
+ * Minimal information required to generate repo files on the agent. These are copies
+ * of the repository objects from repo versions that can be changed for URL overrides, etc.
+ */
+ public static class Repository {
+
+ @SerializedName("baseUrl")
+ private String m_baseUrl;
+
+ @SerializedName("repoId")
+ private String m_repoId;
+
+ /**
+ * The name should not change. Ubuntu requires that it match exactly as the repo was built.
+ */
+ @SerializedName("repoName")
+ private final String m_repoName;
+
+ @SerializedName("mirrorsList")
+ private String m_mirrorsList;
+
+ private transient String m_osType;
+
+ private Repository(RepositoryInfo info) {
+ m_baseUrl = info.getBaseUrl();
+ m_osType = info.getOsType();
+ m_repoId = info.getRepoId();
+ m_repoName = info.getRepoName();
+ m_mirrorsList = info.getMirrorsList();
+ }
+
+ private Repository(String osType, RepositoryEntity entity) {
+ m_baseUrl = entity.getBaseUrl();
+ m_repoId = entity.getRepositoryId();
+ m_repoName = entity.getName();
+ m_mirrorsList = entity.getMirrorsList();
+ m_osType = osType;
+ }
+
+ public void setBaseUrl(String url) {
+ m_baseUrl = url;
+ }
+
+ public String getOsType() {
+ return m_osType;
+ }
+
+ public String getRepoId() {
+ return m_repoId;
+ }
+
+ public String getRepoName() {
+ return m_repoName;
+ }
+
+
+ public String getBaseUrl() {
+ return m_baseUrl;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index 8c726a0..bd62cbb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@ -24,6 +24,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.utils.StageUtils;
@@ -76,8 +78,7 @@ public class ExecutionCommand extends AgentCommand {
private RoleCommand roleCommand;
@SerializedName("clusterHostInfo")
- private Map<String, Set<String>> clusterHostInfo =
- new HashMap<>();
+ private Map<String, Set<String>> clusterHostInfo = new HashMap<>();
@SerializedName("configurations")
private Map<String, Map<String, String>> configurations;
@@ -144,6 +145,14 @@ public class ExecutionCommand extends AgentCommand {
@SerializedName("configuration_credentials")
private Map<String, Map<String, String>> configurationCredentials;
+
+ /**
+ * Provides information regarding the content of repositories. This structure replaces
+ * the deprecated use of {@link KeyNames#REPO_INFO}
+ */
+ @SerializedName("repositoryFile")
+ private CommandRepository commandRepository;
+
public void setConfigurationCredentials(Map<String, Map<String, String>> configurationCredentials) {
this.configurationCredentials = configurationCredentials;
}
@@ -395,6 +404,20 @@ public class ExecutionCommand extends AgentCommand {
}
/**
+ * @return the repository file that is to be written.
+ */
+ public CommandRepository getRepositoryFile() {
+ return commandRepository;
+ }
+
+ /**
+ * @param repository the command repository instance.
+ */
+ public void setRepositoryFile(CommandRepository repository) {
+ commandRepository = repository;
+ }
+
+ /**
* Contains key name strings. These strings are used inside maps
* incapsulated inside command.
*/
@@ -420,6 +443,11 @@ public class ExecutionCommand extends AgentCommand {
String ORACLE_JDBC_URL = "oracle_jdbc_url";
String DB_DRIVER_FILENAME = "db_driver_filename";
String CLIENTS_TO_UPDATE_CONFIGS = "clientsToUpdateConfigs";
+ /**
+ * Keep for backward compatibility.
+ */
+ @Deprecated
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
String REPO_INFO = "repo_info";
String DB_NAME = "db_name";
String GLOBAL = "global";
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
index 74a2cf2..a291a88 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
@@ -348,13 +348,13 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
return file.isDirectory() && !FileUtils.isFileNewer(file, cutoffDate);
}
});
-
+
if(oldDirectories.length > 0) {
LOG.info(String.format("Deleting old directories %s from %s", StringUtils.join(oldDirectories, ", "), recommendationsDir));
}
-
+
for(String oldDirectory:oldDirectories) {
- FileUtils.deleteDirectory(new File(recommendationsDir, oldDirectory));
+ FileUtils.deleteQuietly(new File(recommendationsDir, oldDirectory));
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/DistributeRepositoriesStructuredOutput.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/DistributeRepositoriesStructuredOutput.java b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/DistributeRepositoriesStructuredOutput.java
index 662b856..7c961b5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/DistributeRepositoriesStructuredOutput.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/bootstrap/DistributeRepositoriesStructuredOutput.java
@@ -19,8 +19,6 @@
package org.apache.ambari.server.bootstrap;
-import java.util.List;
-
import com.google.gson.annotations.SerializedName;
/**
@@ -36,12 +34,6 @@ public class DistributeRepositoriesStructuredOutput {
private String installedRepositoryVersion;
/**
- * All Ambari-managed repositories that are installed side by side on host
- */
- @SerializedName("ambari_repositories")
- private List<String> ambariRepositories;
-
- /**
* Either SUCCESS or FAIL
*/
@SerializedName("package_installation_result")
@@ -64,10 +56,6 @@ public class DistributeRepositoriesStructuredOutput {
return installedRepositoryVersion;
}
- public List<String> getAmbariRepositories() {
- return ambariRepositories;
- }
-
public String getPackageInstallationResult() {
return packageInstallationResult;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
index 3681eda..5566fe2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ActionExecutionContext.java
@@ -19,10 +19,12 @@
package org.apache.ambari.server.controller;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.ambari.server.actionmanager.TargetHostType;
+import org.apache.ambari.server.agent.ExecutionCommand;
import org.apache.ambari.server.controller.internal.RequestOperationLevel;
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
@@ -42,6 +44,8 @@ public class ActionExecutionContext {
private boolean hostsInMaintenanceModeExcluded = true;
private boolean allowRetry = false;
+ private List<ExecutionCommandVisitor> m_visitors = new ArrayList<>();
+
/**
* {@code true} if slave/client component failures should be automatically
* skipped. This will only automatically skip the failure if the task is
@@ -168,6 +172,16 @@ public class ActionExecutionContext {
this.autoSkipFailures = autoSkipFailures;
}
+ /**
+ * Adds a command visitor that will be invoked after a command is created. Provides access
+ * to the command.
+ *
+ * @param visitor the visitor
+ */
+ public void addVisitor(ExecutionCommandVisitor visitor) {
+ m_visitors.add(visitor);
+ }
+
@Override
public String toString() {
return "ActionExecutionContext{" +
@@ -207,4 +221,25 @@ public class ActionExecutionContext {
hostsInMaintenanceModeExcluded = excluded;
}
+ /**
+ * Called as a way to post-process the command after it has been created and various objects
+ * have been set.
+ *
+ * @param command the command
+ */
+ public void visitAll(ExecutionCommand command) {
+ for (ExecutionCommandVisitor visitor : m_visitors) {
+ visitor.visit(command);
+ }
+ }
+
+ /**
+ * Interface that allows a final attempt to setting values on an {@link ExecutionCommand}
+ * @author ncole
+ *
+ */
+ public static interface ExecutionCommandVisitor {
+ public void visit(ExecutionCommand command);
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
index d556b60..835d607 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariActionExecutionHelper.java
@@ -487,6 +487,8 @@ public class AmbariActionExecutionHelper {
execCmd.getLocalComponents().add(sch.getServiceComponentName());
}
}
+
+ actionContext.visitAll(execCmd);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index ab8b659..d6905fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -58,6 +58,8 @@ import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
@@ -65,6 +67,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.actionmanager.Stage;
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.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -108,6 +111,7 @@ import org.apache.commons.lang.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Function;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@@ -500,6 +504,8 @@ public class AmbariCustomCommandExecutionHelper {
execCmd.setCommandParams(commandParams);
execCmd.setRoleParams(roleParams);
+ execCmd.setRepositoryFile(getCommandRepository(cluster, host));
+
// perform any server side command related logic - eg - set desired states on restart
applyCustomCommandBackendLogic(cluster, serviceName, componentName, commandName, hostName);
}
@@ -1169,54 +1175,186 @@ public class AmbariCustomCommandExecutionHelper {
*
* @return the repo info
*
+ * @deprecated use {@link #getCommandRepository(Cluster, Host)} instead.
* @throws AmbariException if the repository information can not be obtained
*/
+ @Deprecated
public String getRepoInfo(Cluster cluster, Host host) throws AmbariException {
- return getRepoInfo(cluster, host.getOsType(), host.getOsFamily(), host.getHostName());
+ Function<List<RepositoryInfo>, JsonArray> function = new Function<List<RepositoryInfo>, JsonArray>() {
+ @Override
+ public JsonArray apply(List<RepositoryInfo> input) {
+ return null == input ? null : (JsonArray) gson.toJsonTree(input);
+ }
+ };
+
+ final JsonArray gsonList = getBaseUrls(cluster, host, function);
+
+ if (null == gsonList) {
+ return "";
+ }
+
+ BaseUrlUpdater<JsonArray> updater = new BaseUrlUpdater<JsonArray>(gsonList) {
+ @Override
+ public JsonArray apply(final RepositoryVersionEntity rve) {
+
+ JsonArray result = new JsonArray();
+
+ for (JsonElement e : gsonList) {
+ JsonObject obj = e.getAsJsonObject();
+
+ String repoId = obj.has("repoId") ? obj.get("repoId").getAsString() : null;
+ String repoName = obj.has("repoName") ? obj.get("repoName").getAsString() : null;
+ String baseUrl = obj.has("baseUrl") ? obj.get("baseUrl").getAsString() : null;
+ String osType = obj.has("osType") ? obj.get("osType").getAsString() : null;
+
+ if (null == repoId || null == baseUrl || null == osType || null == repoName) {
+ continue;
+ }
+
+ for (OperatingSystemEntity ose : rve.getOperatingSystems()) {
+ if (ose.getOsType().equals(osType) && ose.isAmbariManagedRepos()) {
+ for (RepositoryEntity re : ose.getRepositories()) {
+ if (re.getName().equals(repoName) &&
+ re.getRepositoryId().equals(repoId) &&
+ !re.getBaseUrl().equals(baseUrl)) {
+ obj.addProperty("baseUrl", re.getBaseUrl());
+ }
+ }
+ result.add(e);
+ }
+ }
+ }
+
+ return result;
+ }
+ };
+
+ return updateBaseUrls(cluster, updater).toString();
+ }
+
+ /**
+ * Builds repository information for inclusion in a command. This replaces escaping json on
+ * a command.
+ *
+ * @param cluster the cluster
+ * @param host the host
+ * @return the command repository
+ * @throws AmbariException
+ */
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
+ public CommandRepository getCommandRepository(final Cluster cluster, Host host) throws AmbariException {
+
+ Function<List<RepositoryInfo>, List<RepositoryInfo>> function = new Function<List<RepositoryInfo>, List<RepositoryInfo>>() {
+ @Override
+ public List<RepositoryInfo> apply(List<RepositoryInfo> input) {
+ // !!! just return what is given
+ return input;
+ }
+ };
+
+ final List<RepositoryInfo> repoInfos = getBaseUrls(cluster, host, function);
+
+ if (null == repoInfos) {
+ return null;
+ }
+
+ final CommandRepository command = new CommandRepository();
+ StackId stackId = cluster.getDesiredStackVersion();
+ command.setRepositories(repoInfos);
+ command.setStackName(stackId.getStackName());
+
+ final BaseUrlUpdater<Void> updater = new BaseUrlUpdater<Void>(null) {
+ @Override
+ public Void apply(RepositoryVersionEntity rve) {
+
+ command.setRepositoryVersionId(rve.getId());
+ command.setRepositoryVersion(rve.getVersion());
+ command.setStackName(rve.getStackName());
+ command.setUniqueSuffix(String.format("-repo-%s", rve.getId()));
+
+ for (CommandRepository.Repository commandRepo : command.getRepositories()) {
+ String osType = commandRepo.getOsType();
+ String repoId = commandRepo.getRepoId();
+ String repoName = commandRepo.getRepoName();
+ String baseUrl = commandRepo.getBaseUrl();
+
+ for (OperatingSystemEntity ose : rve.getOperatingSystems()) {
+ if (ose.getOsType().equals(osType) && ose.isAmbariManagedRepos()) {
+ for (RepositoryEntity re : ose.getRepositories()) {
+ if (re.getName().equals(repoName) &&
+ re.getRepositoryId().equals(repoId) &&
+ !re.getBaseUrl().equals(baseUrl)) {
+ commandRepo.setBaseUrl(re.getBaseUrl());
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+ };
+
+ updateBaseUrls(cluster, updater);
+
+ return command;
}
- public String getRepoInfo(Cluster cluster, String hostOSType, String hostOSFamily, String hostName) throws AmbariException {
+ /**
+ * Executed by two different representations of repos. When we are comfortable with the new
+ * implemenation, this may be removed and called inline in {@link #getCommandRepository(Cluster, Host)}
+ *
+ * @param cluster the cluster to isolate the stack
+ * @param host used to resolve the family for the repositories
+ * @param function function that will transform the supplied repositories for specific use.
+ * @return <T> the type as defined by the supplied {@code function}.
+ * @throws AmbariException
+ */
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
+ private <T> T getBaseUrls(Cluster cluster, Host host, Function<List<RepositoryInfo>, T> function) throws AmbariException {
+
+ String hostOsType = host.getOsType();
+ String hostOsFamily = host.getOsFamily();
+ String hostName = host.getHostName();
StackId stackId = cluster.getDesiredStackVersion();
Map<String, List<RepositoryInfo>> repos = ambariMetaInfo.getRepository(
stackId.getStackName(), stackId.getStackVersion());
- String family = os_family.find(hostOSType);
+ String family = os_family.find(hostOsType);
if (null == family) {
- family = hostOSFamily;
+ family = hostOsFamily;
}
- JsonElement gsonList = null;
+ final List<RepositoryInfo> repoInfos;
// !!! check for the most specific first
- if (repos.containsKey(hostOSType)) {
- gsonList = gson.toJsonTree(repos.get(hostOSType));
+ if (repos.containsKey(hostOsType)) {
+ repoInfos = repos.get(hostOsType);
} else if (null != family && repos.containsKey(family)) {
- gsonList = gson.toJsonTree(repos.get(family));
+ repoInfos = repos.get(family);
} else {
+ repoInfos = null;
LOG.warn("Could not retrieve repo information for host"
+ ", hostname=" + hostName
+ ", clusterName=" + cluster.getClusterName()
+ ", stackInfo=" + stackId.getStackId());
}
- if (null != gsonList) {
- gsonList = updateBaseUrls(cluster, JsonArray.class.cast(gsonList));
- return gsonList.toString();
- } else {
- return "";
- }
+ // leave it to function implementation to handle null.
+ return function.apply(repoInfos);
}
/**
* Checks repo URLs against the current version for the cluster and makes
* adjustments to the Base URL when the current is different.
- * @param cluster the cluster to load the current version
- * @param jsonArray the array containing stack repo data
+ *
+ * @param <T> the result after appling the repository version, if found.
*/
- private JsonArray updateBaseUrls(Cluster cluster, JsonArray jsonArray) throws AmbariException {
+ @Experimental(feature = ExperimentalFeature.PATCH_UPGRADES)
+ private <T> T updateBaseUrls(Cluster cluster, BaseUrlUpdater<T> function) throws AmbariException {
ClusterVersionEntity cve = cluster.getCurrentClusterVersion();
if (null == cve) {
@@ -1235,40 +1373,12 @@ public class AmbariCustomCommandExecutionHelper {
if (null == cve || null == cve.getRepositoryVersion()) {
LOG.info("Cluster {} has no specific Repository Versions. Using stack-defined values", cluster.getClusterName());
- return jsonArray;
+ return function.getDefault();
}
RepositoryVersionEntity rve = cve.getRepositoryVersion();
- JsonArray result = new JsonArray();
-
- for (JsonElement e : jsonArray) {
- JsonObject obj = e.getAsJsonObject();
-
- String repoId = obj.has("repoId") ? obj.get("repoId").getAsString() : null;
- String repoName = obj.has("repoName") ? obj.get("repoName").getAsString() : null;
- String baseUrl = obj.has("baseUrl") ? obj.get("baseUrl").getAsString() : null;
- String osType = obj.has("osType") ? obj.get("osType").getAsString() : null;
-
- if (null == repoId || null == baseUrl || null == osType || null == repoName) {
- continue;
- }
-
- for (OperatingSystemEntity ose : rve.getOperatingSystems()) {
- if (ose.getOsType().equals(osType) && ose.isAmbariManagedRepos()) {
- for (RepositoryEntity re : ose.getRepositories()) {
- if (re.getName().equals(repoName) &&
- re.getRepositoryId().equals(repoId) &&
- !re.getBaseUrl().equals(baseUrl)) {
- obj.addProperty("baseUrl", re.getBaseUrl());
- }
- }
- result.add(e);
- }
- }
- }
-
- return result;
+ return function.apply(rve);
}
@@ -1488,4 +1598,22 @@ public class AmbariCustomCommandExecutionHelper {
hosts.removeAll(removedHosts);
return removedHosts;
}
+
+ /**
+ * Class that is used to update base urls. There are two implementations of this - when we no
+ * longer are sure the deprecated repo info can be removed, so too can this class.
+ */
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
+ abstract static class BaseUrlUpdater<T> implements Function<RepositoryVersionEntity, T> {
+ private T m_default;
+
+ private BaseUrlUpdater(T defaultValue) {
+ m_default = defaultValue;
+ }
+
+ private T getDefault() {
+ return m_default;
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
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 751ce08..04b72ea 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
@@ -2356,7 +2356,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
commandParams.put(ExecutionCommand.KeyNames.REFRESH_TOPOLOGY, "True");
}
- String repoInfo = customCommandExecutionHelper.getRepoInfo(cluster, hostEntity.getOsType(), osFamily , hostname);
+ String repoInfo = customCommandExecutionHelper.getRepoInfo(cluster, host);
if (LOG.isDebugEnabled()) {
LOG.debug("Sending repo information to agent"
+ ", hostname=" + scHost.getHostName()
@@ -2472,7 +2472,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
execCmd.setCommandParams(commandParams);
execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
-
+ execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, host));
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 {}",
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index e39588e..c3e66fc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -29,6 +29,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.StaticallyInject;
@@ -41,7 +43,6 @@ import org.apache.ambari.server.actionmanager.Stage;
import org.apache.ambari.server.actionmanager.StageFactory;
import org.apache.ambari.server.agent.CommandReport;
import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.ActionExecutionContext;
@@ -79,10 +80,9 @@ import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.RepositoryType;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.ServiceOsSpecific;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
+import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.ambari.server.utils.VersionUtils;
import org.apache.commons.lang.StringUtils;
@@ -91,7 +91,6 @@ import org.apache.hadoop.metrics2.sink.relocated.google.common.collect.Lists;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
-import com.google.gson.Gson;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Provider;
@@ -126,7 +125,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
protected static final String CLUSTER_STACK_VERSION_FORCE = "ClusterStackVersions/force";
protected static final String INSTALL_PACKAGES_ACTION = "install_packages";
- protected static final String INSTALL_PACKAGES_FULL_NAME = "Install version";
+ protected static final String INSTALL_PACKAGES_FULL_NAME = "Install Version";
/**
* The default success factor that will be used when determining if a stage's
@@ -173,9 +172,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
private static HostRoleCommandFactory hostRoleCommandFactory;
@Inject
- private static Gson gson;
-
- @Inject
private static Provider<AmbariActionExecutionHelper> actionExecutionHelper;
@Inject
@@ -193,6 +189,9 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
@Inject
private static HostComponentStateDAO hostComponentStateDAO;
+ @Inject
+ private static RepositoryVersionHelper repoVersionHelper;
+
/**
* We have to include such a hack here, because if we
* make finalizeUpgradeAction field static and request injection
@@ -602,6 +601,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
throws SystemException {
// Determine repositories for host
String osFamily = host.getOsFamily();
+
final List<RepositoryEntity> repoInfo = perOsRepos.get(osFamily);
if (repoInfo == null) {
throw new SystemException(String.format("Repositories for os type %s are " +
@@ -614,7 +614,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
}
// determine packages for all services that are installed on host
- List<ServiceOsSpecific.Package> packages = new ArrayList<>();
Set<String> servicesOnHost = new HashSet<>();
List<ServiceComponentHost> components = cluster.getServiceComponentHosts(host.getHostName());
for (ServiceComponentHost component : components) {
@@ -627,65 +626,9 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
return null;
}
- List<String> blacklistedPackagePrefixes = configuration.getRollingUpgradeSkipPackagesPrefixes();
- for (String serviceName : servicesOnHost) {
- try{
- if(ami.isServiceRemovedInStack(stackId.getStackName(), stackId.getStackVersion(), serviceName)){
- LOG.info(String.format("%s has been removed from stack %s-%s. Skip calculating its installation packages", stackId.getStackName(), stackId.getStackVersion(), serviceName));
- continue; //No need to calculate install packages for removed services
- }
- } catch (AmbariException e1) {
- throw new SystemException(String.format("Cannot obtain stack information for %s-%s", stackId.getStackName(), stackId.getStackVersion()), e1);
- }
-
- ServiceInfo info;
- try {
- info = ami.getService(stackId.getStackName(), stackId.getStackVersion(), serviceName);
- } catch (AmbariException e) {
- throw new SystemException("Cannot enumerate services", e);
- }
-
- List<ServiceOsSpecific.Package> packagesForService = managementController.getPackagesForServiceHost(info,
- new HashMap<String, String>(), // Contents are ignored
- osFamily);
- for (ServiceOsSpecific.Package aPackage : packagesForService) {
- if (! aPackage.getSkipUpgrade()) {
- boolean blacklisted = false;
- for(String prefix : blacklistedPackagePrefixes) {
- if (aPackage.getName().startsWith(prefix)) {
- blacklisted = true;
- break;
- }
- }
- if (! blacklisted) {
- packages.add(aPackage);
- }
- }
- }
- }
-
- final String packageList = gson.toJson(packages);
- final String repoList = gson.toJson(repoInfo);
-
- Map<String, String> params = new HashMap<>();
- params.put("stack_id", stackId.getStackId());
- params.put("repository_version", repoVersion.getVersion());
- params.put("base_urls", repoList);
- params.put(KeyNames.PACKAGE_LIST, packageList);
- params.put(KeyNames.REPO_VERSION_ID, repoVersion.getId().toString());
-
- VersionDefinitionXml xml = null;
- try {
- xml = repoVersion.getRepositoryXml();
- } catch (Exception e) {
- throw new SystemException(String.format("Could not load xml from repo version %s",
- repoVersion.getVersion()));
- }
-
- if (null != xml && StringUtils.isNotBlank(xml.getPackageVersion(osFamily))) {
- params.put(KeyNames.PACKAGE_VERSION, xml.getPackageVersion(osFamily));
- }
+ Map<String, String> roleParams = repoVersionHelper.buildRoleParams(managementController, repoVersion,
+ osFamily, servicesOnHost);
// add host to this stage
RequestResourceFilter filter = new RequestResourceFilter(null, null,
@@ -694,9 +637,11 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
ActionExecutionContext actionContext = new ActionExecutionContext(
cluster.getClusterName(), INSTALL_PACKAGES_ACTION,
Collections.singletonList(filter),
- params);
+ roleParams);
actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
+ repoVersionHelper.addCommandRepository(actionContext, osFamily, repoVersion, repoInfo);
+
return actionContext;
}
@@ -734,29 +679,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
return false;
}
-
- /**
- * Sets host versions states to not-required.
- *
- * Transitioning host version to NOT_REQUIRED state manually is ok since
- * other completion handlers set success/fail states correctly during heartbeat.
- * The number of NOT_REQUIRED components for a cluster will be low.
- */
- private void transitionHostVersionToNotRequired(Host host, Cluster cluster, RepositoryVersionEntity repoVersion) {
- LOG.info(String.format("Transitioning version %s on host %s directly to %s" +
- " without distributing bits to host since it has no versionable components.",
- repoVersion.getVersion(), host.getHostName(), RepositoryVersionState.NOT_REQUIRED));
-
- for (HostVersionEntity hve : host.getAllHostVersions()) {
- if (hve.getRepositoryVersion().equals(repoVersion)) {
- hve.setState(RepositoryVersionState.NOT_REQUIRED);
- hostVersionDAO.merge(hve);
- }
- }
-
- }
-
-
private RequestStageContainer createRequest() {
ActionManager actionManager = getManagementController().getActionManager();
@@ -876,6 +798,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
// !!! revisit for PU
// If forcing to become CURRENT, get the Cluster Version whose state is CURRENT and make sure that
// the Host Version records for the same Repo Version are also marked as CURRENT.
+ @Experimental(feature=ExperimentalFeature.PATCH_UPGRADES)
ClusterVersionEntity current = cluster.getCurrentClusterVersion();
if (!current.getRepositoryVersion().equals(rve)) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
index 811ce9b..71b9b6b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java
@@ -19,7 +19,6 @@ package org.apache.ambari.server.controller.internal;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -34,7 +33,6 @@ import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.actionmanager.RequestFactory;
import org.apache.ambari.server.actionmanager.Stage;
import org.apache.ambari.server.actionmanager.StageFactory;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.ActionExecutionContext;
@@ -61,17 +59,14 @@ import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.ServiceOsSpecific;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.repository.VersionDefinitionXml;
+import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import com.google.common.collect.Sets;
-import com.google.gson.Gson;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -107,7 +102,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
protected static final String INSTALL_PACKAGES_ACTION = "install_packages";
protected static final String STACK_SELECT_ACTION = "ru_set_all";
- protected static final String INSTALL_PACKAGES_FULL_NAME = "Install version";
+ protected static final String INSTALL_PACKAGES_FULL_NAME = "Install Version";
private static Set<String> pkPropertyIds = Sets.newHashSet(
@@ -147,8 +142,6 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
@Inject
private static RepositoryVersionDAO repositoryVersionDAO;
- private static Gson gson = StageUtils.getGson();
-
@Inject
private static StageFactory stageFactory;
@@ -161,6 +154,8 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
@Inject
private static Configuration configuration;
+ @Inject
+ private static RepositoryVersionHelper repoVersionHelper;
/**
* Constructor.
@@ -403,8 +398,6 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
LOG.error(String.format("Repository list is empty. Ambari may not be managing the repositories for %s", osFamily));
}
- // For every host at cluster, determine packages for all installed services
- List<ServiceOsSpecific.Package> packages = new ArrayList<>();
Set<String> servicesOnHost = new HashSet<>();
if (forceInstallOnNonMemberHost) {
@@ -426,7 +419,6 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
LOG.error("Service not found for component {}!", componentName, e);
throw new IllegalArgumentException("Service not found for component : " + componentName);
}
-
}
} else {
@@ -435,53 +427,9 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
servicesOnHost.add(component.getServiceName());
}
}
- List<String> blacklistedPackagePrefixes = configuration.getRollingUpgradeSkipPackagesPrefixes();
- for (String serviceName : servicesOnHost) {
- ServiceInfo info;
- try {
- info = ami.getService(stackName, stackVersion, serviceName);
- } catch (AmbariException e) {
- throw new SystemException("Can not enumerate services", e);
- }
- List<ServiceOsSpecific.Package> packagesForService = managementController.getPackagesForServiceHost(info,
- new HashMap<String, String>(), // Contents are ignored
- osFamily);
- for (ServiceOsSpecific.Package aPackage : packagesForService) {
- if (! aPackage.getSkipUpgrade()) {
- boolean blacklisted = false;
- for(String prefix : blacklistedPackagePrefixes) {
- if (aPackage.getName().startsWith(prefix)) {
- blacklisted = true;
- break;
- }
- }
- if (! blacklisted) {
- packages.add(aPackage);
- }
- }
- }
- }
- final String packageList = gson.toJson(packages);
- final String repoList = gson.toJson(repoInfo);
-
- Map<String, String> params = new HashMap<String, String>(){{
- put("stack_id", stackId.getStackId());
- put("repository_version", desiredRepoVersion);
- put("base_urls", repoList);
- put(KeyNames.PACKAGE_LIST, packageList);
- }};
-
- VersionDefinitionXml xml = null;
- try {
- xml = repoVersionEnt.getRepositoryXml();
- } catch (Exception e) {
- throw new SystemException(String.format("Could not load xml from repo version %s",
- repoVersionEnt.getVersion()));
- }
- if (null != xml && StringUtils.isNotBlank(xml.getPackageVersion(osFamily))) {
- params.put(KeyNames.PACKAGE_VERSION, xml.getPackageVersion(osFamily));
- }
+ Map<String, String> roleParams = repoVersionHelper.buildRoleParams(managementController, repoVersionEnt,
+ osFamily, servicesOnHost);
// Create custom action
RequestResourceFilter filter = new RequestResourceFilter(null, null,
@@ -490,9 +438,11 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
ActionExecutionContext actionContext = new ActionExecutionContext(
cluster.getClusterName(), INSTALL_PACKAGES_ACTION,
Collections.singletonList(filter),
- params);
+ roleParams);
actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
+ repoVersionHelper.addCommandRepository(actionContext, osFamily, repoVersionEnt, repoInfo);
+
String caption = String.format(INSTALL_PACKAGES_FULL_NAME + " on host %s", hostName);
RequestStageContainer req = createRequest(caption);
@@ -553,7 +503,7 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
Stage stage;
long stageId;
ActionExecutionContext actionContext;
- Map<String, String> commandParams = new HashMap();
+ Map<String, String> commandParams = new HashMap<>();
commandParams.put("version", desiredRepoVersion);
stage = stageFactory.createNew(req.getId(),
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
index fdb7c8d..14e0179 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelper.java
@@ -19,18 +19,33 @@ package org.apache.ambari.server.state.stack.upgrade;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.agent.CommandRepository;
+import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.ActionExecutionContext;
+import org.apache.ambari.server.controller.ActionExecutionContext.ExecutionCommandVisitor;
+import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.internal.OperatingSystemResourceProvider;
import org.apache.ambari.server.controller.internal.RepositoryResourceProvider;
import org.apache.ambari.server.controller.internal.RepositoryVersionResourceProvider;
+import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.RepositoryInfo;
+import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.ServiceOsSpecific;
+import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -44,6 +59,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.inject.Inject;
+import com.google.inject.Provider;
import com.google.inject.Singleton;
/**
@@ -57,8 +73,11 @@ public class RepositoryVersionHelper {
@Inject
private Gson gson;
- @Inject(optional = true)
- private AmbariMetaInfo ambariMetaInfo;
+ @Inject
+ private Provider<AmbariMetaInfo> ami;
+
+ @Inject
+ private Provider<Configuration> configuration;
/**
* Parses operating systems json to a list of entities. Expects json like:
@@ -198,7 +217,7 @@ public class RepositoryVersionHelper {
* @throws AmbariException if no upgrade packs suit the requirements
*/
public String getUpgradePackageName(String stackName, String stackVersion, String repositoryVersion, UpgradeType upgradeType) throws AmbariException {
- final Map<String, UpgradePack> upgradePacks = ambariMetaInfo.getUpgradePacks(stackName, stackVersion);
+ final Map<String, UpgradePack> upgradePacks = ami.get().getUpgradePacks(stackName, stackVersion);
for (UpgradePack upgradePack : upgradePacks.values()) {
final String upgradePackName = upgradePack.getName();
@@ -218,4 +237,109 @@ public class RepositoryVersionHelper {
throw new AmbariException("There were no suitable upgrade packs for stack " + stackName + " " + stackVersion +
((null != upgradeType) ? " and upgrade type " + upgradeType : ""));
}
+
+ /**
+ * Build the role parameters for an install command.
+ *
+ * @param amc the management controller. Tests don't use the same instance that gets injected.
+ * @param repoVersion the repository version
+ * @param osFamily the os family
+ * @param services the set of services to check for packages
+ * @param repos the list of individual repositories
+ * @return a Map<String, String> to use in
+ * @throws SystemException
+ */
+ public Map<String, String> buildRoleParams(AmbariManagementController amc, RepositoryVersionEntity repoVersion, String osFamily, Set<String> servicesOnHost)
+ throws SystemException {
+
+ StackId stackId = repoVersion.getStackId();
+
+ List<ServiceOsSpecific.Package> packages = new ArrayList<>();
+
+ for (String serviceName : servicesOnHost) {
+ ServiceInfo info;
+
+ try {
+ if (ami.get().isServiceRemovedInStack(stackId.getStackName(), stackId.getStackVersion(), serviceName)) {
+ LOG.info(String.format("%s has been removed from stack %s-%s. Skip calculating its installation packages", stackId.getStackName(), stackId.getStackVersion(), serviceName));
+ continue; //No need to calculate install packages for removed services
+ }
+
+ info = ami.get().getService(stackId.getStackName(), stackId.getStackVersion(), serviceName);
+ } catch (AmbariException e) {
+ throw new SystemException(String.format("Cannot obtain stack information for %s-%s", stackId.getStackName(), stackId.getStackVersion()), e);
+ }
+
+ List<ServiceOsSpecific.Package> packagesForService = amc.getPackagesForServiceHost(info,
+ new HashMap<String, String>(), osFamily);
+
+ List<String> blacklistedPackagePrefixes = configuration.get().getRollingUpgradeSkipPackagesPrefixes();
+
+ for (ServiceOsSpecific.Package aPackage : packagesForService) {
+ if (!aPackage.getSkipUpgrade()) {
+ boolean blacklisted = false;
+ for (String prefix : blacklistedPackagePrefixes) {
+ if (aPackage.getName().startsWith(prefix)) {
+ blacklisted = true;
+ break;
+ }
+ }
+ if (! blacklisted) {
+ packages.add(aPackage);
+ }
+ }
+ }
+ }
+
+ Map<String, String> roleParams = new HashMap<>();
+ roleParams.put("stack_id", stackId.getStackId());
+ roleParams.put("repository_version", repoVersion.getVersion());
+ // !!! TODO make roleParams <String, Object> so we don't have to do this awfulness.
+ roleParams.put(KeyNames.PACKAGE_LIST, gson.toJson(packages));
+ roleParams.put(KeyNames.REPO_VERSION_ID, repoVersion.getId().toString());
+
+ VersionDefinitionXml xml = null;
+ try {
+ xml = repoVersion.getRepositoryXml();
+ } catch (Exception e) {
+ throw new SystemException(String.format("Could not load xml from repo version %s",
+ repoVersion.getVersion()));
+ }
+
+ if (null != xml && StringUtils.isNotBlank(xml.getPackageVersion(osFamily))) {
+ roleParams.put(KeyNames.PACKAGE_VERSION, xml.getPackageVersion(osFamily));
+ }
+
+ return roleParams;
+ }
+
+ /**
+ * Adds a command repository to the action context
+ * @param context the context
+ * @param osFamily the OS family
+ * @param repoVersion the repository version entity
+ * @param repos the repository entities
+ */
+ public void addCommandRepository(ActionExecutionContext context, String osFamily,
+ RepositoryVersionEntity repoVersion, List<RepositoryEntity> repos) {
+ StackId stackId = repoVersion.getStackId();
+
+ final CommandRepository commandRepo = new CommandRepository();
+ commandRepo.setRepositories(osFamily, repos);
+ commandRepo.setRepositoryVersion(repoVersion.getVersion());
+ commandRepo.setRepositoryVersionId(repoVersion.getId());
+ commandRepo.setStackName(stackId.getStackName());
+ commandRepo.setUniqueSuffix(String.format("-repo-%s", repoVersion.getId()));
+
+ context.addVisitor(new ExecutionCommandVisitor() {
+ @Override
+ public void visit(ExecutionCommand command) {
+ if (null == command.getRepositoryFile()) {
+ command.setRepositoryFile(commandRepo);
+ }
+ }
+ });
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index 33adce1..c12dff1 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -16,36 +16,30 @@ 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.
-Ambari Agent
-
"""
-import os
import signal
import re
-import os.path
-import ambari_simplejson as json # simplejson is much faster comparing to Python 2.6 json module and has the same functions set.
+import ambari_simplejson as json
-from resource_management import *
-import resource_management
-from resource_management.libraries.functions.list_ambari_managed_repos import list_ambari_managed_repos
-from ambari_commons.os_check import OSCheck, OSConst
+from ambari_commons.os_check import OSCheck
from ambari_commons.str_utils import cbool, cint
+from resource_management.core.exceptions import Fail
+from resource_management.core.logger import Logger
+from resource_management.core.resources import Package
from resource_management.libraries.functions.packages_analyzer import allInstalledPackages, verifyDependencies
from resource_management.libraries.functions import conf_select
from resource_management.libraries.functions import stack_tools
from resource_management.libraries.functions.stack_select import get_stack_versions
from resource_management.libraries.functions.version import format_stack_version
from resource_management.libraries.functions.repo_version_history \
- import read_actual_version_from_history_file, write_actual_version_to_history_file, REPO_VERSION_HISTORY_FILE
-from resource_management.libraries.script.script import Script
-from resource_management.core.resources.system import Execute
-from resource_management.libraries.functions.stack_features import check_stack_feature
+ import read_actual_version_from_history_file, write_actual_version_to_history_file, REPO_VERSION_HISTORY_FILE
from resource_management.libraries.functions import StackFeature
-
-from resource_management.core.logger import Logger
-
+from resource_management.libraries.functions.repository_util import create_repo_files, CommandRepository
+from resource_management.libraries.functions.stack_features import check_stack_feature
+from resource_management.libraries.resources.repository import Repository
+from resource_management.libraries.script.script import Script
class InstallPackages(Script):
"""
@@ -73,22 +67,20 @@ class InstallPackages(Script):
self.repository_version_id = None
+ base_urls = []
# Select dict that contains parameters
try:
+ if 'base_urls' in config['roleParams']:
+ base_urls = json.loads(config['roleParams']['base_urls'])
+
self.repository_version = config['roleParams']['repository_version']
- base_urls = json.loads(config['roleParams']['base_urls'])
package_list = json.loads(config['roleParams']['package_list'])
stack_id = config['roleParams']['stack_id']
+
if 'repository_version_id' in config['roleParams']:
self.repository_version_id = config['roleParams']['repository_version_id']
except KeyError:
- # Last try
- self.repository_version = config['commandParams']['repository_version']
- base_urls = json.loads(config['commandParams']['base_urls'])
- package_list = json.loads(config['commandParams']['package_list'])
- stack_id = config['commandParams']['stack_id']
- if 'repository_version_id' in config['commandParams']:
- self.repository_version_id = config['commandParams']['repository_version_id']
+ pass
# current stack information
self.current_stack_version_formatted = None
@@ -110,9 +102,7 @@ class InstallPackages(Script):
self.repository_version = self.repository_version.strip()
-
# Install/update repositories
- installed_repositories = []
self.current_repositories = []
self.current_repo_files = set()
@@ -130,21 +120,22 @@ class InstallPackages(Script):
Logger.warning("Repository list is empty. Ambari may not be managing the repositories for {0}.".format(self.repository_version))
try:
- append_to_file = False
- for url_info in base_urls:
- repo_name, repo_file = self.install_repository(url_info, append_to_file, template)
- self.current_repositories.append(repo_name)
- self.current_repo_files.add(repo_file)
- append_to_file = True
-
- installed_repositories = list_ambari_managed_repos(self.stack_name)
+ if 'repositoryFile' in config:
+ create_repo_files(template, CommandRepository(config['repositoryFile']))
+ else:
+ append_to_file = False
+ for url_info in base_urls:
+ repo_name, repo_file = self.install_repository(url_info, append_to_file, template)
+ self.current_repositories.append(repo_name)
+ self.current_repo_files.add(repo_file)
+ append_to_file = True
+
except Exception, err:
- Logger.logger.exception("Cannot distribute repositories. Error: {0}".format(str(err)))
+ Logger.logger.exception("Cannot install repository files. Error: {0}".format(str(err)))
num_errors += 1
# Build structured output with initial values
self.structured_output = {
- 'ambari_repositories': installed_repositories,
'installed_repository_version': self.repository_version,
'stack_id': stack_id,
'package_installation_result': 'FAIL'
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/params.py
index 6193c11..50c5a40 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/params.py
@@ -111,3 +111,5 @@ if has_hbase_masters:
#repo params
repo_info = config['hostLevelParams']['repo_info']
service_repo_info = default("/hostLevelParams/service_repo_info",None)
+
+repo_file = default("/repositoryFile", None)
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
index a35dce7..cbbc466 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
@@ -19,11 +19,10 @@ limitations under the License.
from ambari_commons.os_check import OSCheck
from resource_management.libraries.resources.repository import Repository
+from resource_management.libraries.functions.repository_util import create_repo_files, CommandRepository, UBUNTU_REPO_COMPONENTS_POSTFIX
from resource_management.core.logger import Logger
-import ambari_simplejson as json # simplejson is much faster comparing to Python 2.6 json module and has the same functions set.
+import ambari_simplejson as json
-# components_lits = repoName + postfix
-_UBUNTU_REPO_COMPONENTS_POSTFIX = ["main"]
def _alter_repo(action, repo_string, repo_template):
"""
@@ -45,17 +44,17 @@ def _alter_repo(action, repo_string, repo_template):
repo['baseUrl'] = None
if not 'mirrorsList' in repo:
repo['mirrorsList'] = None
-
- ubuntu_components = [ repo['repoName'] ] + _UBUNTU_REPO_COMPONENTS_POSTFIX
-
+
+ ubuntu_components = [ repo['repoName'] ] + UBUNTU_REPO_COMPONENTS_POSTFIX
+
Repository(repo['repoId'],
action = action,
base_url = repo['baseUrl'],
mirror_list = repo['mirrorsList'],
repo_file_name = repo['repoName'],
repo_template = repo_template,
- components = ubuntu_components, # ubuntu specific
- )
+ components = ubuntu_components) # ubuntu specific
+
def install_repos():
import params
@@ -63,6 +62,13 @@ def install_repos():
return
template = params.repo_rhel_suse if OSCheck.is_suse_family() or OSCheck.is_redhat_family() else params.repo_ubuntu
+
+ # use this newer way of specifying repositories, if available
+ if params.repo_file is not None:
+ create_repo_files(template, CommandRepository(params.repo_file))
+ return
+
_alter_repo("create", params.repo_info, template)
+
if params.service_repo_info:
_alter_repo("create", params.service_repo_info, template)
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index 8f7b31d..6245708 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -219,9 +219,14 @@ public class ClusterStackVersionResourceProviderTest {
Map<String, String> hostLevelParams = new HashMap<>();
StackId stackId = new StackId("HDP", "2.0.1");
+ StackEntity stackEntity = new StackEntity();
+ stackEntity.setStackName("HDP");
+ stackEntity.setStackVersion("2.1.1");
+
RepositoryVersionEntity repoVersion = new RepositoryVersionEntity();
repoVersion.setId(1l);
repoVersion.setOperatingSystems(OS_JSON);
+ repoVersion.setStack(stackEntity);
final String hostWithoutVersionableComponents = "host2";
@@ -647,12 +652,17 @@ public class ClusterStackVersionResourceProviderTest {
File f = new File("src/test/resources/hbase_version_test.xml");
+ StackEntity stackEntity = new StackEntity();
+ stackEntity.setStackName("HDP");
+ stackEntity.setStackVersion("2.1.1");
+
RepositoryVersionEntity repoVersion = new RepositoryVersionEntity();
repoVersion.setId(1l);
repoVersion.setOperatingSystems(OS_JSON);
repoVersion.setVersionXml(IOUtils.toString(new FileInputStream(f)));
repoVersion.setVersionXsd("version_definition.xsd");
repoVersion.setType(RepositoryType.STANDARD);
+ repoVersion.setStack(stackEntity);
ambariMetaInfo.getComponent("HDP", "2.1.1", "HBASE", "HBASE_MASTER").setVersionAdvertised(true);
@@ -890,12 +900,17 @@ public class ClusterStackVersionResourceProviderTest {
File f = new File("src/test/resources/hbase_version_test.xml");
+ StackEntity stackEntity = new StackEntity();
+ stackEntity.setStackName("HDP");
+ stackEntity.setStackVersion("2.1.1");
+
RepositoryVersionEntity repoVersion = new RepositoryVersionEntity();
repoVersion.setId(1l);
repoVersion.setOperatingSystems(os_json);
repoVersion.setVersionXml(IOUtils.toString(new FileInputStream(f)));
repoVersion.setVersionXsd("version_definition.xsd");
repoVersion.setType(RepositoryType.STANDARD);
+ repoVersion.setStack(stackEntity);
ambariMetaInfo.getComponent("HDP", "2.1.1", "HBASE", "HBASE_MASTER").setVersionAdvertised(true);
@@ -1096,8 +1111,8 @@ public class ClusterStackVersionResourceProviderTest {
Assert.assertEquals(Float.valueOf(0.85f), successFactor);
Assert.assertTrue(executionCommand.getRoleParams().containsKey(KeyNames.PACKAGE_VERSION));
- Assert.assertTrue(executionCommand.getRoleParams().containsKey("base_urls"));
- Assert.assertEquals("[]", executionCommand.getRoleParams().get("base_urls"));
+ Assert.assertNotNull(executionCommand.getRepositoryFile());
+ Assert.assertEquals(0, executionCommand.getRepositoryFile().getRepositories().size());
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
index 4bed482..1ae83d4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
@@ -154,9 +154,10 @@ public class HostStackVersionResourceProviderTest {
StackEntity stack = new StackEntity();
stack.setStackName("HDP");
- stack.setStackVersion("2.2");
+ stack.setStackVersion("2.0.1");
repoVersion.setStack(stack);
repoVersion.setVersion("2.2");
+ repoVersion.setId(1L);
}
@After
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index c6ee875..5513271 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -40,6 +40,7 @@ import org.apache.ambari.server.actionmanager.HostRoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.agent.CommandReport;
+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.controller.AmbariCustomCommandExecutionHelper;
@@ -632,9 +633,6 @@ public class UpgradeActionTest {
CommandReport report = finalizeUpgradeAction.execute(null);
assertNotNull(report);
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
-
- // Verify the metainfo url
- verifyBaseRepoURL(helper, cluster, host, "http://foo1");
}
/**
@@ -699,6 +697,7 @@ public class UpgradeActionTest {
}
private void verifyBaseRepoURL(AmbariCustomCommandExecutionHelper helper, Cluster cluster, Host host, String expectedRepoBaseURL) throws AmbariException {
+
String repoInfo = helper.getRepoInfo(cluster, host);
Gson gson = new Gson();
JsonElement element = gson.fromJson(repoInfo, JsonElement.class);
@@ -709,6 +708,13 @@ public class UpgradeActionTest {
JsonObject o = list.get(0).getAsJsonObject();
assertTrue(o.has("baseUrl"));
assertEquals(expectedRepoBaseURL, o.get("baseUrl").getAsString());
+
+ CommandRepository commandRepo = helper.getCommandRepository(cluster, host);
+
+ assertNotNull(commandRepo);
+ assertNotNull(commandRepo.getRepositories());
+ assertEquals(1, commandRepo.getRepositories().size());
+ assertEquals(expectedRepoBaseURL, commandRepo.getRepositories().iterator().next().getBaseUrl());
}
@Test
@@ -1019,9 +1025,6 @@ public class UpgradeActionTest {
assertNotNull(report);
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
- // Verify the metainfo url
- verifyBaseRepoURL(helper, cluster, host, "http://foo1");
-
// ensure that history now exists
historyEntites = serviceComponentDesiredStateDAO.findHistory(cluster.getClusterId(),
nnSCH.getServiceName(), nnSCH.getServiceComponentName());
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
index df69f68..d67cdfc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/UpdateActiveRepoVersionOnStartupTest.java
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
+import java.lang.reflect.Field;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -45,6 +46,7 @@ import org.junit.Test;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
import com.google.common.io.Resources;
+import com.google.gson.Gson;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Provider;
@@ -97,8 +99,14 @@ public class UpdateActiveRepoVersionOnStartupTest {
ClusterDAO clusterDao = mock(ClusterDAO.class);
ClusterVersionDAO clusterVersionDAO = mock(ClusterVersionDAO.class);
repositoryVersionDao = mock(RepositoryVersionDAO.class);
+
final RepositoryVersionHelper repositoryVersionHelper = new RepositoryVersionHelper();
- AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ Field field = RepositoryVersionHelper.class.getDeclaredField("gson");
+ field.setAccessible(true);
+ field.set(repositoryVersionHelper, new Gson());
+
+
+ final AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
StackManager stackManager = mock(StackManager.class);
when(metaInfo.getStackManager()).thenReturn(stackManager);
@@ -123,15 +131,26 @@ public class UpdateActiveRepoVersionOnStartupTest {
stackInfo.getRepositories().add(repositoryInfo);
when(stackManager.getStack("HDP", "2.3")).thenReturn(stackInfo);
- Provider<RepositoryVersionHelper> repositoryVersionHelperProvider = mock(Provider.class);
+ final Provider<RepositoryVersionHelper> repositoryVersionHelperProvider = mock(Provider.class);
when(repositoryVersionHelperProvider.get()).thenReturn(repositoryVersionHelper);
+
+
+
InMemoryDefaultTestModule testModule = new InMemoryDefaultTestModule() {
@Override
protected void configure() {
- bind(RepositoryVersionHelper.class).toInstance(repositoryVersionHelper);
+ bind(RepositoryVersionHelper.class).toProvider(repositoryVersionHelperProvider);
+ bind(AmbariMetaInfo.class).toProvider(new Provider<AmbariMetaInfo>() {
+ @Override
+ public AmbariMetaInfo get() {
+ return metaInfo;
+ }
+ });
+
requestStaticInjection(RepositoryVersionEntity.class);
}
};
+
Injector injector = Guice.createInjector(testModule);
if (addClusterVersion) {
repoVersion = new RepositoryVersionEntity();
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelperTest.java
index 3a5532b..339786e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/upgrade/RepositoryVersionHelperTest.java
@@ -17,19 +17,15 @@
*/
package org.apache.ambari.server.state.stack.upgrade;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import org.apache.ambari.server.state.RepositoryInfo;
-import org.junit.Before;
+import org.junit.Assert;
import org.junit.Test;
import com.google.gson.Gson;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-import junit.framework.Assert;
/**
* Tests the {@link RepositoryVersionHelper} class
@@ -38,20 +34,15 @@ public class RepositoryVersionHelperTest {
private RepositoryVersionHelper helper;
- @Before
- public void before() throws Exception {
- final Injector injector = Guice.createInjector(new AbstractModule() {
-
- @Override
- protected void configure() {
- bind(Gson.class).toInstance(new Gson());
- }
- });
- helper = injector.getInstance(RepositoryVersionHelper.class);
- }
-
@Test
public void testSerializeOperatingSystems() throws Exception {
+ Gson gson = new Gson();
+ Field field = RepositoryVersionHelper.class.getDeclaredField("gson");
+ field.setAccessible(true);
+
+ RepositoryVersionHelper helper = new RepositoryVersionHelper();
+ field.set(helper, gson);
+
final List<RepositoryInfo> repositories = new ArrayList<>();
final RepositoryInfo repository = new RepositoryInfo();
repository.setBaseUrl("baseurl");
[2/4] ambari git commit: AMBARI-20871. Unify repository file creation
(ncole)
Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/python/stacks/2.0.6/configs/repository_file.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/repository_file.json b/ambari-server/src/test/python/stacks/2.0.6/configs/repository_file.json
new file mode 100644
index 0000000..1554f1b
--- /dev/null
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/repository_file.json
@@ -0,0 +1,1275 @@
+{
+ "localComponents": [
+ "NAMENODE",
+ "SECONDARY_NAMENODE",
+ "ZOOKEEPER_SERVER",
+ "DATANODE",
+ "HDFS_CLIENT",
+ "ZOOKEEPER_CLIENT",
+ "RESOURCEMANAGER",
+ "HISTORYSERVER",
+ "NODEMANAGER",
+ "YARN_CLIENT",
+ "MAPREDUCE2_CLIENT",
+ "SLIDER",
+ "PIG",
+ "SQOOP",
+ "HIVE_CLIENT",
+ "TEZ_CLIENT",
+ "HIVE_CLIENT",
+ "SPARK_CLIENT",
+ "SPARK2_CLIENT"
+ ],
+ "roleCommand": "SERVICE_CHECK",
+ "clusterName": "c1",
+ "hostname": "c6401.ambari.apache.org",
+ "hostLevelParams": {
+ "not_managed_hdfs_path_list": "[\"/apps/hive/warehouse\",\"/apps/falcon\",\"/mr-history/done\",\"/app-logs\",\"/tmp\"]",
+ "agent_stack_retry_count": "5",
+ "agent_stack_retry_on_unavailability": "false",
+ "agentCacheDir": "/var/lib/ambari-agent/cache",
+ "jdk_location": "http://c6401.ambari.apache.org:8080/resources/",
+ "ambari_db_rca_password": "mapred",
+ "ambari_db_rca_url": "jdbc:postgresql://c6401.ambari.apache.org/ambarirca",
+ "repo_info": "[{\"baseUrl\":\"http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0\",\"osType\":\"centos6\",\"repoId\":\"HDP-2.0._\",\"repoName\":\"HDP\",\"defaultBaseUrl\":\"http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.6.0\"}]",
+ "jce_name": "UnlimitedJCEPolicyJDK7.zip",
+ "stack_version": "2.0",
+ "stack_name": "HDP",
+ "ambari_db_rca_driver": "org.postgresql.Driver",
+ "jdk_name": "jdk-7u67-linux-x64.tar.gz",
+ "ambari_db_rca_username": "mapred",
+ "java_home": "/usr/jdk64/jdk1.7.0_45",
+ "java_version": "8",
+ "db_name": "ambari",
+ "user_group": "{\"sample\":[\"sample\",\"users\"]}",
+ "group_list": "[\"hadoop\",\"nobody\",\"users\"]",
+ "user_list": "[\"hive\",\"oozie\",\"nobody\",\"ambari-qa\",\"flume\",\"hdfs\",\"storm\",\"mapred\",\"hbase\",\"tez\",\"zookeeper\",\"falcon\",\"sqoop\",\"yarn\",\"hcat\"]",
+ "custom_mysql_jdbc_name" : "mysql-connector-java.jar",
+ "custom_oracle_jdbc_name" : "oracle-jdbc-driver.jar",
+ "custom_postgres_jdbc_name" : "test-postgres-jdbc.jar",
+ "custom_sqlanywhere_jdbc_name" : "sqla-client-jdbc.tar.gz"
+ },
+ "commandType": "EXECUTION_COMMAND",
+ "roleParams": {},
+ "serviceName": "HIVE",
+ "role": "HIVE_SERVER",
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 4,
+ "repoVersion": "2.2.0.1-885",
+ "repositories": [
+ {
+ "repoName": "HDP",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-2.2-repo-4"
+ },
+ {
+ "repoName": "HDP-UTILS",
+ "baseUrl": "http://repo1/HDP-UTILS/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-UTILS-1.1.0.20-repo-4"
+ }
+ ]
+ },
+ "commandParams": {
+ "command_timeout": "300",
+ "service_package_folder": "OOZIE",
+ "script_type": "PYTHON",
+ "script": "scripts/service_check.py",
+ "excluded_hosts": "host1,host2",
+ "mark_draining_only" : "false",
+ "update_exclude_file_only" : "false",
+ "xml_configs_list":[{"hdfs-site.xml":"hdfs-site"}],
+ "env_configs_list":[{"hadoop-env.sh":"hadoop-env"},{"log4j.properties":"hdfs-log4j,yarn-log4j"}],
+ "properties_configs_list":[{"runtime.properties":"falcon-runtime.properties"},{"startup.properties":"falcon-startup.properties"}],
+ "output_file":"HDFS_CLIENT-configs.tar.gz",
+ "refresh_topology": "True"
+ },
+ "taskId": 152,
+ "public_hostname": "c6401.ambari.apache.org",
+ "configurations": {
+ "sqoop-site": {
+ "atlas.cluster.name": "c1",
+ "sqoop.job.data.publish.class": "org.apache.atlas.sqoop.hook.SqoopHook"
+ },
+ "mapred-site": {
+ "mapreduce.jobhistory.address": "c6402.ambari.apache.org:10020",
+ "mapreduce.cluster.administrators": " hadoop",
+ "mapreduce.reduce.input.buffer.percent": "0.0",
+ "mapreduce.output.fileoutputformat.compress": "false",
+ "mapreduce.framework.name": "yarn",
+ "mapreduce.map.speculative": "false",
+ "mapreduce.reduce.shuffle.merge.percent": "0.66",
+ "yarn.app.mapreduce.am.resource.mb": "683",
+ "mapreduce.map.java.opts": "-Xmx273m",
+ "mapreduce.application.classpath": "$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*",
+ "mapreduce.job.reduce.slowstart.completedmaps": "0.05",
+ "mapreduce.output.fileoutputformat.compress.type": "BLOCK",
+ "mapreduce.reduce.speculative": "false",
+ "mapreduce.reduce.java.opts": "-Xmx546m",
+ "mapreduce.am.max-attempts": "2",
+ "yarn.app.mapreduce.am.admin-command-opts": "-Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN",
+ "mapreduce.reduce.log.level": "INFO",
+ "mapreduce.map.sort.spill.percent": "0.7",
+ "mapreduce.task.timeout": "300000",
+ "mapreduce.map.memory.mb": "341",
+ "mapreduce.task.io.sort.factor": "100",
+ "mapreduce.jobhistory.intermediate-done-dir": "/mr-history/tmp",
+ "mapreduce.reduce.memory.mb": "683",
+ "yarn.app.mapreduce.am.log.level": "INFO",
+ "mapreduce.map.log.level": "INFO",
+ "mapreduce.shuffle.port": "13562",
+ "mapreduce.admin.user.env": "LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native:/usr/lib/hadoop/lib/native/`$JAVA_HOME/bin/java -d32 -version &> /dev/null;if [ $? -eq 0 ]; then echo Linux-i386-32; else echo Linux-amd64-64;fi`",
+ "mapreduce.map.output.compress": "false",
+ "yarn.app.mapreduce.am.staging-dir": "/user",
+ "mapreduce.reduce.shuffle.parallelcopies": "30",
+ "mapreduce.reduce.shuffle.input.buffer.percent": "0.7",
+ "mapreduce.jobhistory.webapp.address": "c6402.ambari.apache.org:19888",
+ "mapreduce.jobhistory.done-dir": "/mr-history/done",
+ "mapreduce.admin.reduce.child.java.opts": "-Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN",
+ "mapreduce.task.io.sort.mb": "136",
+ "yarn.app.mapreduce.am.command-opts": "-Xmx546m",
+ "mapreduce.admin.map.child.java.opts": "-Djava.net.preferIPv4Stack=true -Dhadoop.metrics.log.level=WARN"
+ },
+ "oozie-site": {
+ "oozie.service.PurgeService.purge.interval": "3600",
+ "oozie.service.CallableQueueService.queue.size": "1000",
+ "oozie.service.SchemaService.wf.ext.schemas": "shell-action-0.1.xsd,email-action-0.1.xsd,hive-action-0.2.xsd,sqoop-action-0.2.xsd,ssh-action-0.1.xsd,distcp-action-0.1.xsd,shell-action-0.2.xsd,oozie-sla-0.1.xsd,oozie-sla-0.2.xsd,hive-action-0.3.xsd",
+ "oozie.service.JPAService.jdbc.url": "jdbc:derby:${oozie.data.dir}/${oozie.db.schema.name}-db;create=true",
+ "oozie.service.HadoopAccessorService.nameNode.whitelist": " ",
+ "use.system.libpath.for.mapreduce.and.pig.jobs": "false",
+ "oozie.db.schema.name": "oozie",
+ "oozie.credentials.credentialclasses": "hcat=org.apache.oozie.action.hadoop.HCatCredentials",
+ "oozie.service.JPAService.create.db.schema": "false",
+ "oozie.authentication.kerberos.name.rules": "\n RULE:[2:$1@$0]([jt]t@.*TODO-KERBEROS-DOMAIN)s/.*/TODO-MAPREDUSER/\n RULE:[2:$1@$0]([nd]n@.*TODO-KERBEROS-DOMAIN)s/.*/TODO-HDFSUSER/\n RULE:[2:$1@$0](hm@.*TODO-KERBEROS-DOMAIN)s/.*/TODO-HBASE-USER/\n RULE:[2:$1@$0](rs@.*TODO-KERBEROS-DOMAIN)s/.*/TODO-HBASE-USER/\n DEFAULT",
+ "oozie.service.ActionService.executor.ext.classes": "\n org.apache.oozie.action.email.EmailActionExecutor,\n org.apache.oozie.action.hadoop.HiveActionExecutor,\n org.apache.oozie.action.hadoop.ShellActionExecutor,\n org.apache.oozie.action.hadoop.SqoopActionExecutor,\n org.apache.oozie.action.hadoop.DistcpActionExecutor",
+ "oozie.base.url": "http://c6402.ambari.apache.org:11000/oozie",
+ "oozie.service.JPAService.jdbc.password": "asd",
+ "oozie.service.coord.normal.default.timeout": "120",
+ "oozie.service.AuthorizationService.security.enabled": "true",
+ "oozie.service.JPAService.pool.max.active.conn": "10",
+ "oozie.service.PurgeService.older.than": "30",
+ "oozie.service.coord.push.check.requeue.interval": "30000",
+ "oozie.service.HadoopAccessorService.hadoop.configurations": "*=/etc/hadoop/conf",
+ "oozie.service.HadoopAccessorService.jobTracker.whitelist": " ",
+ "oozie.service.CallableQueueService.callable.concurrency": "3",
+ "oozie.service.JPAService.jdbc.username": "oozie",
+ "oozie.service.CallableQueueService.threads": "10",
+ "oozie.services.ext": "org.apache.oozie.service.PartitionDependencyManagerService,org.apache.oozie.service.HCatAccessorService",
+ "oozie.systemmode": "NORMAL",
+ "oozie.service.WorkflowAppService.system.libpath": "/user/${user.name}/share/lib",
+ "oozie.services": "\n org.apache.oozie.service.SchedulerService,\n org.apache.oozie.service.InstrumentationService,\n org.apache.oozie.service.CallableQueueService,\n org.apache.oozie.service.UUIDService,\n org.apache.oozie.service.ELService,\n org.apache.oozie.service.AuthorizationService,\n org.apache.oozie.service.UserGroupInformationService,\n org.apache.oozie.service.HadoopAccessorService,\n org.apache.oozie.service.URIHandlerService,\n org.apache.oozie.service.MemoryLocksService,\n org.apache.oozie.service.DagXLogInfoService,\n org.apache.oozie.service.SchemaService,\n org.apache.oozie.service.LiteWorkflowAppService,\n org.apache.oozie.service.JPAService,\n org.apache.oozie.service.StoreService,\n org.apache.oozie.service.CoordinatorStoreService,\n org.apache.oozie.service.SLAStoreService,\n org.apache.oozie.service.DBLiteWorkflowStoreServic
e,\n org.apache.oozie.service.CallbackService,\n org.apache.oozie.service.ActionService,\n org.apache.oozie.service.ActionCheckerService,\n org.apache.oozie.service.RecoveryService,\n org.apache.oozie.service.PurgeService,\n org.apache.oozie.service.CoordinatorEngineService,\n org.apache.oozie.service.BundleEngineService,\n org.apache.oozie.service.DagEngineService,\n org.apache.oozie.service.CoordMaterializeTriggerService,\n org.apache.oozie.service.StatusTransitService,\n org.apache.oozie.service.PauseTransitService,\n org.apache.oozie.service.GroupsService,\n org.apache.oozie.service.ProxyUserService",
+ "oozie.service.URIHandlerService.uri.handlers": "org.apache.oozie.dependency.FSURIHandler,org.apache.oozie.dependency.HCatURIHandler",
+ "oozie.authentication.type": "simple",
+ "oozie.service.JPAService.jdbc.driver": "org.apache.derby.jdbc.EmbeddedDriver",
+ "oozie.system.id": "oozie-${user.name}"
+ },
+ "storm-site": {
+ "topology.tuple.serializer": "backtype.storm.serialization.types.ListDelegateSerializer",
+ "topology.workers": "1",
+ "drpc.worker.threads": "64",
+ "storm.zookeeper.servers": "['c6401.ambari.apache.org','c6402.ambari.apache.org']",
+ "supervisor.heartbeat.frequency.secs": "5",
+ "topology.executor.send.buffer.size": "1024",
+ "drpc.childopts": "-Xmx768m",
+ "nimbus.thrift.port": "6627",
+ "storm.zookeeper.retry.intervalceiling.millis": "30000",
+ "storm.local.dir": "/hadoop/storm",
+ "topology.receiver.buffer.size": "8",
+ "storm.messaging.netty.client_worker_threads": "1",
+ "transactional.zookeeper.root": "/transactional",
+ "drpc.request.timeout.secs": "600",
+ "topology.skip.missing.kryo.registrations": "false",
+ "worker.heartbeat.frequency.secs": "1",
+ "zmq.hwm": "0",
+ "storm.zookeeper.connection.timeout": "15000",
+ "topology.max.error.report.per.interval": "5",
+ "storm.messaging.netty.server_worker_threads": "1",
+ "supervisor.worker.start.timeout.secs": "120",
+ "zmq.threads": "1",
+ "topology.acker.executors": "null",
+ "storm.local.mode.zmq": "false",
+ "topology.max.task.parallelism": "null",
+ "storm.zookeeper.port": "2181",
+ "nimbus.childopts": "-Xmx1024m",
+ "worker.childopts": "-Xmx768m",
+ "drpc.queue.size": "128",
+ "storm.zookeeper.retry.times": "5",
+ "nimbus.monitor.freq.secs": "10",
+ "storm.cluster.mode": "distributed",
+ "dev.zookeeper.path": "/tmp/dev-storm-zookeeper",
+ "drpc.invocations.port": "3773",
+ "storm.zookeeper.root": "/storm",
+ "logviewer.childopts": "-Xmx128m",
+ "transactional.zookeeper.port": "null",
+ "topology.worker.childopts": "null",
+ "topology.max.spout.pending": "null",
+ "nimbus.cleanup.inbox.freq.secs": "600",
+ "storm.messaging.netty.min_wait_ms": "100",
+ "nimbus.task.timeout.secs": "30",
+ "nimbus.thrift.max_buffer_size": "1048576",
+ "topology.sleep.spout.wait.strategy.time.ms": "1",
+ "topology.optimize": "true",
+ "nimbus.reassign": "true",
+ "storm.messaging.transport": "backtype.storm.messaging.netty.Context",
+ "logviewer.appender.name": "A1",
+ "nimbus.host": "c6401.ambari.apache.org",
+ "ui.port": "8744",
+ "supervisor.slots.ports": "[6700, 6701]",
+ "nimbus.file.copy.expiration.secs": "600",
+ "supervisor.monitor.frequency.secs": "3",
+ "ui.childopts": "-Xmx768m",
+ "transactional.zookeeper.servers": "null",
+ "zmq.linger.millis": "5000",
+ "topology.error.throttle.interval.secs": "10",
+ "topology.worker.shared.thread.pool.size": "4",
+ "java.library.path": "/usr/local/lib:/opt/local/lib:/usr/lib",
+ "topology.spout.wait.strategy": "backtype.storm.spout.SleepSpoutWaitStrategy",
+ "task.heartbeat.frequency.secs": "3",
+ "topology.transfer.buffer.size": "1024",
+ "storm.zookeeper.session.timeout": "20000",
+ "topology.executor.receive.buffer.size": "1024",
+ "topology.stats.sample.rate": "0.05",
+ "topology.fall.back.on.java.serialization": "true",
+ "supervisor.childopts": "-Xmx256m",
+ "topology.enable.message.timeouts": "true",
+ "storm.messaging.netty.max_wait_ms": "1000",
+ "nimbus.topology.validator": "backtype.storm.nimbus.DefaultTopologyValidator",
+ "nimbus.supervisor.timeout.secs": "60",
+ "topology.disruptor.wait.strategy": "com.lmax.disruptor.BlockingWaitStrategy",
+ "nimbus.inbox.jar.expiration.secs": "3600",
+ "drpc.port": "3772",
+ "topology.kryo.factory": "backtype.storm.serialization.DefaultKryoFactory",
+ "storm.zookeeper.retry.interval": "1000",
+ "storm.messaging.netty.max_retries": "30",
+ "topology.tick.tuple.freq.secs": "null",
+ "supervisor.enable": "true",
+ "nimbus.task.launch.secs": "120",
+ "task.refresh.poll.secs": "10",
+ "topology.message.timeout.secs": "30",
+ "storm.messaging.netty.buffer_size": "5242880",
+ "topology.state.synchronization.timeout.secs": "60",
+ "supervisor.worker.timeout.secs": "30",
+ "topology.trident.batch.emit.interval.millis": "500",
+ "topology.builtin.metrics.bucket.size.secs": "60",
+ "storm.thrift.transport": "backtype.storm.security.auth.SimpleTransportPlugin",
+ "logviewer.port": "8000",
+ "topology.debug": "false"
+ },
+ "webhcat-site": {
+ "templeton.pig.path": "pig.tar.gz/pig/bin/pig",
+ "templeton.exec.timeout": "60000",
+ "templeton.override.enabled": "false",
+ "templeton.jar": "/usr/lib/hcatalog/share/webhcat/svr/webhcat.jar",
+ "templeton.zookeeper.hosts": "c6401.ambari.apache.org:2181,c6402.ambari.apache.org:2181",
+ "templeton.hive.properties": "hive.metastore.local=false,hive.metastore.uris=thrift://c6402.ambari.apache.org:9083,hive.metastore.sasl.enabled=yes,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse",
+ "templeton.storage.class": "org.apache.hive.hcatalog.templeton.tool.ZooKeeperStorage",
+ "templeton.hive.archive": "hdfs:///apps/webhcat/hive.tar.gz",
+ "templeton.streaming.jar": "hdfs:///apps/webhcat/hadoop-streaming.jar",
+ "templeton.port": "50111",
+ "templeton.libjars": "/usr/lib/zookeeper/zookeeper.jar",
+ "templeton.hadoop": "/usr/bin/hadoop",
+ "templeton.hive.path": "hive.tar.gz/hive/bin/hive",
+ "templeton.hadoop.conf.dir": "/etc/hadoop/conf",
+ "templeton.hcat": "/usr/bin/hcat",
+ "templeton.pig.archive": "hdfs:///apps/webhcat/pig.tar.gz",
+ "templeton.sqoop.archive": "hdfs:///apps/webhcat/sqoop.tar.gz"
+ },
+ "capacity-scheduler": {
+ "yarn.scheduler.capacity.node-locality-delay": "40",
+ "yarn.scheduler.capacity.root.capacity": "100",
+ "yarn.scheduler.capacity.root.acl_administer_queue": "*",
+ "yarn.scheduler.capacity.root.queues": "default",
+ "yarn.scheduler.capacity.maximum-applications": "10000",
+ "yarn.scheduler.capacity.root.default.user-limit-factor": "1",
+ "yarn.scheduler.capacity.root.default.maximum-capacity": "100",
+ "yarn.scheduler.capacity.root.default.state": "RUNNING",
+ "yarn.scheduler.capacity.maximum-am-resource-percent": "0.2",
+ "yarn.scheduler.capacity.root.default.acl_administer_jobs": "*",
+ "yarn.scheduler.capacity.root.default.capacity": "100",
+ "yarn.scheduler.capacity.root.default.acl_submit_applications": "*"
+ },
+ "hdfs-site": {
+ "dfs.namenode.checkpoint.period": "21600",
+ "dfs.namenode.avoid.write.stale.datanode": "true",
+ "dfs.block.access.token.enable": "true",
+ "dfs.support.append": "true",
+ "dfs.datanode.address": "0.0.0.0:${ambari.dfs.datanode.port}",
+ "nfs.file.dump.dir": "/tmp/.hdfs-nfs",
+ "dfs.datanode.address": "0.0.0.0:${ambari.dfs.datanode.port}",
+ "dfs.cluster.administrators": "test_user1,test_user2 hdfs,test_group",
+ "dfs.replication": "3",
+ "ambari.dfs.datanode.http.port": "50075",
+ "dfs.datanode.balance.bandwidthPerSec": "6250000",
+ "dfs.namenode.safemode.threshold-pct": "1.0f",
+ "dfs.namenode.checkpoint.edits.dir": "${dfs.namenode.checkpoint.dir}",
+ "dfs.permissions.enabled": "true",
+ "fs.checkpoint.size": "67108864",
+ "dfs.client.read.shortcircuit": "true",
+ "dfs.namenode.https-address": "c6401.ambari.apache.org:50470",
+ "dfs.journalnode.edits.dir": "/grid/0/hdfs/journal",
+ "dfs.blocksize": "134217728",
+ "dfs.datanode.max.transfer.threads": "1024",
+ "dfs.datanode.du.reserved": "1073741824",
+ "dfs.webhdfs.enabled": "true",
+ "dfs.namenode.handler.count": "100",
+ "dfs.namenode.checkpoint.dir": "/hadoop/hdfs/namesecondary,/hadoop/hdfs/namesecondary2",
+ "fs.permissions.umask-mode": "022",
+ "dfs.datanode.http.address": "0.0.0.0:50075",
+ "dfs.datanode.ipc.address": "0.0.0.0:8010",
+ "dfs.datanode.data.dir": "/hadoop/hdfs/data",
+ "dfs.namenode.http-address": "c6401.ambari.apache.org:50070",
+ "dfs.blockreport.initialDelay": "120",
+ "dfs.datanode.failed.volumes.tolerated": "0",
+ "dfs.namenode.accesstime.precision": "0",
+ "ambari.dfs.datanode.port": "50010",
+ "dfs.namenode.avoid.read.stale.datanode": "true",
+ "dfs.namenode.secondary.http-address": "c6402.ambari.apache.org:50090",
+ "dfs.namenode.stale.datanode.interval": "30000",
+ "dfs.heartbeat.interval": "3",
+ "dfs.client.read.shortcircuit.streams.cache.size": "4096",
+ "dfs.permissions.superusergroup": "hdfs",
+ "dfs.https.port": "50470",
+ "dfs.journalnode.http-address": "0.0.0.0:8480",
+ "dfs.domain.socket.path": "/var/lib/hadoop-hdfs/dn_socket",
+ "dfs.namenode.write.stale.datanode.ratio": "1.0f",
+ "dfs.hosts.exclude": "/etc/hadoop/conf/dfs.exclude",
+ "dfs.datanode.data.dir.perm": "750",
+ "dfs.namenode.name.dir.restore": "true",
+ "dfs.replication.max": "50",
+ "dfs.namenode.name.dir": "/hadoop/hdfs/namenode"
+ },
+ "hbase-site": {
+ "hbase.hstore.flush.retries.number": "120",
+ "hbase.client.keyvalue.maxsize": "10485760",
+ "hbase.hstore.compactionThreshold": "3",
+ "hbase.rootdir": "hdfs://c6401.ambari.apache.org:8020/apps/hbase/data",
+ "hbase.regionserver.handler.count": "60",
+ "hbase.regionserver.global.memstore.lowerLimit": "0.38",
+ "hbase.hregion.memstore.block.multiplier": "2",
+ "hbase.hregion.memstore.flush.size": "134217728",
+ "hbase.superuser": "hbase",
+ "hbase.zookeeper.property.clientPort": "2181",
+ "hbase.regionserver.global.memstore.upperLimit": "0.4",
+ "zookeeper.session.timeout": "30000",
+ "hbase.tmp.dir": "/hadoop/hbase",
+ "hbase.local.dir": "${hbase.tmp.dir}/local",
+ "hbase.hregion.max.filesize": "10737418240",
+ "hfile.block.cache.size": "0.40",
+ "hbase.security.authentication": "simple",
+ "hbase.defaults.for.version.skip": "true",
+ "hbase.zookeeper.quorum": "c6401.ambari.apache.org,c6402.ambari.apache.org",
+ "zookeeper.znode.parent": "/hbase-unsecure",
+ "hbase.hstore.blockingStoreFiles": "10",
+ "hbase.master.port": "60000",
+ "hbase.hregion.majorcompaction": "86400000",
+ "hbase.security.authorization": "false",
+ "hbase.cluster.distributed": "true",
+ "hbase.hregion.memstore.mslab.enabled": "true",
+ "hbase.client.scanner.caching": "100",
+ "hbase.zookeeper.useMulti": "true"
+ },
+ "core-site": {
+ "io.serializations": "org.apache.hadoop.io.serializer.WritableSerialization",
+ "gluster.daemon.user": "null",
+ "hadoop.proxyuser.oozie.groups": "users",
+ "hadoop.proxyuser.hcat.hosts": "c6402.ambari.apache.org",
+ "hadoop.proxyuser.hive.groups": "users",
+ "hadoop.security.authentication": "simple",
+ "hadoop.proxyuser.oozie.hosts": "c6402.ambari.apache.org",
+ "io.compression.codecs": "org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec",
+ "mapreduce.jobtracker.webinterface.trusted": "false",
+ "fs.AbstractFileSystem.glusterfs.impl": "null",
+ "fs.defaultFS": "hdfs://c6401.ambari.apache.org:8020",
+ "fs.trash.interval": "360",
+ "ipc.client.idlethreshold": "8000",
+ "io.file.buffer.size": "131072",
+ "hadoop.security.authorization": "false",
+ "hadoop.proxyuser.hive.hosts": "c6402.ambari.apache.org",
+ "hadoop.security.auth_to_local": "\n RULE:[2:$1@$0]([rn]m@.*)s/.*/yarn/\n RULE:[2:$1@$0](jhs@.*)s/.*/mapred/\n RULE:[2:$1@$0]([nd]n@.*)s/.*/hdfs/\n RULE:[2:$1@$0](hm@.*)s/.*/hbase/\n RULE:[2:$1@$0](rs@.*)s/.*/hbase/\n DEFAULT",
+ "hadoop.proxyuser.hcat.groups": "users",
+ "ipc.client.connection.maxidletime": "30000",
+ "ipc.client.connect.max.retries": "50"
+ },
+ "hive-site": {
+ "hive.enforce.sorting": "true",
+ "javax.jdo.option.ConnectionPassword": "!`\"' 1",
+ "javax.jdo.option.ConnectionDriverName": "com.mysql.jdbc.Driver",
+ "hive.optimize.bucketmapjoin.sortedmerge": "true",
+ "hive.security.metastore.authorization.manager": "org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider",
+ "fs.file.impl.disable.cache": "true",
+ "hive.auto.convert.join.noconditionaltask": "true",
+ "hive.map.aggr": "true",
+ "hive.optimize.index.filter": "true",
+ "hive.security.authorization.enabled": "false",
+ "hive.optimize.reducededuplication.min.reducer": "1",
+ "hive.optimize.bucketmapjoin": "true",
+ "hive.metastore.uris": "thrift://c6402.ambari.apache.org:9083",
+ "hive.mapjoin.bucket.cache.size": "10000",
+ "hive.auto.convert.join.noconditionaltask.size": "1000000000",
+ "hive.vectorized.execution.enabled": "false",
+ "javax.jdo.option.ConnectionUserName": "hive",
+ "hive.metastore.cache.pinobjtypes": "Table,Database,Type,FieldSchema,Order",
+ "hive.optimize.reducededuplication": "true",
+ "hive.metastore.warehouse.dir": "/apps/hive/warehouse",
+ "hive.metastore.client.socket.timeout": "60",
+ "hive.auto.convert.join": "true",
+ "hive.enforce.bucketing": "true",
+ "hive.mapred.reduce.tasks.speculative.execution": "false",
+ "hive.security.authenticator.manager": "org.apache.hadoop.hive.ql.security.ProxyUserAuthenticator",
+ "javax.jdo.option.ConnectionURL": "jdbc:mysql://c6402.ambari.apache.org/hive?createDatabaseIfNotExist=true",
+ "hive.auto.convert.sortmerge.join": "true",
+ "fs.hdfs.impl.disable.cache": "true",
+ "hive.security.authorization.manager": "org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider",
+ "ambari.hive.db.schema.name": "hive",
+ "hive.metastore.execute.setugi": "true",
+ "hive.auto.convert.sortmerge.join.noconditionaltask": "true",
+ "hive.server2.enable.doAs": "true",
+ "hive.server2.authentication": "NOSASL",
+ "hive.server2.transport.mode": "binary",
+ "hive.optimize.mapjoin.mapreduce": "true",
+ "hive.exec.scratchdir" : "/custompath/tmp/hive"
+ },
+ "hive-interactive-site": {
+ "hive.enforce.sorting": "true",
+ "javax.jdo.option.ConnectionPassword": "!`\"' 1",
+ "javax.jdo.option.ConnectionDriverName": "com.mysql.jdbc.Driver",
+ "hive.optimize.bucketmapjoin.sortedmerge": "true",
+ "hive.security.metastore.authorization.manager": "org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider",
+ "fs.file.impl.disable.cache": "true",
+ "hive.auto.convert.join.noconditionaltask": "true",
+ "hive.map.aggr": "true",
+ "hive.optimize.index.filter": "true",
+ "hive.security.authorization.enabled": "false",
+ "hive.optimize.reducededuplication.min.reducer": "1",
+ "hive.optimize.bucketmapjoin": "true",
+ "hive.metastore.uris": "thrift://c6402.ambari.apache.org:9084",
+ "hive.mapjoin.bucket.cache.size": "10000",
+ "hive.auto.convert.join.noconditionaltask.size": "1000000000",
+ "hive.vectorized.execution.enabled": "false",
+ "javax.jdo.option.ConnectionUserName": "hive",
+ "hive.metastore.cache.pinobjtypes": "Table,Database,Type,FieldSchema,Order",
+ "hive.optimize.reducededuplication": "true",
+ "hive.metastore.warehouse.dir": "/apps/hive/warehouse",
+ "hive.metastore.client.socket.timeout": "60",
+ "hive.auto.convert.join": "true",
+ "hive.enforce.bucketing": "true",
+ "hive.mapred.reduce.tasks.speculative.execution": "false",
+ "hive.security.authenticator.manager": "org.apache.hadoop.hive.ql.security.ProxyUserAuthenticator",
+ "javax.jdo.option.ConnectionURL": "jdbc:mysql://c6402.ambari.apache.org/hive?createDatabaseIfNotExist=true",
+ "hive.auto.convert.sortmerge.join": "true",
+ "fs.hdfs.impl.disable.cache": "true",
+ "hive.security.authorization.manager": "org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider",
+ "ambari.hive.db.schema.name": "hive",
+ "hive.metastore.execute.setugi": "true",
+ "hive.auto.convert.sortmerge.join.noconditionaltask": "true",
+ "hive.server2.enable.doAs": "true",
+ "hive.server2.authentication": "NOSASL",
+ "hive.server2.transport.mode": "binary",
+ "hive.optimize.mapjoin.mapreduce": "true",
+ "hive.exec.scratchdir" : "/custompath/tmp/hive"
+ },
+ "hiveserver2-site": {
+ "hive.metastore.metrics.enabled": "true",
+ "hive.service.metrics.reporter": "HADOOP2"
+ },
+ "ranger-hive-plugin-properties": {
+ "XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS": "900",
+ "XAAUDIT.HDFS.DESTINATION_DIRECTORY": "hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit",
+ "common.name.for.certificate": "-",
+ "XAAUDIT.HDFS.IS_ENABLED": "false",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FILE": "%time:yyyyMMdd-HHmm.ss%.log",
+ "SSL_KEYSTORE_PASSWORD": "myKeyFilePassword",
+ "XAAUDIT.DB.IS_ENABLED": "true",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS": "600",
+ "XAAUDIT.SOLR.SOLR_URL": "http://localhost:6083/solr/ranger_audits",
+ "XAAUDIT.SOLR.IS_ENABLED": "false",
+ "SSL_KEYSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-keystore.jks",
+ "XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS": "60",
+ "policy_user": "ambari-qa",
+ "UPDATE_XAPOLICIES_ON_GRANT_REVOKE": "true",
+ "XAAUDIT.HDFS.DESTINTATION_FILE": "%hostname%-audit.log",
+ "XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS": "86400",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT": "10",
+ "SSL_TRUSTSTORE_PASSWORD": "changeit",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit/archive",
+ "ranger-hive-plugin-enabled": "No",
+ "jdbc.driverClassName": "org.apache.hive.jdbc.HiveDriver",
+ "REPOSITORY_CONFIG_USERNAME": "hive",
+ "XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS": "1000",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS": "60",
+ "SSL_TRUSTSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-truststore.jks",
+ "REPOSITORY_CONFIG_PASSWORD": "hive",
+ "XAAUDIT.SOLR.MAX_QUEUE_SIZE": "1"
+ },
+ "ranger-knox-plugin-properties": {
+ "XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS": "900",
+ "KNOX_HOME": "/usr/hdp/current/knox-server",
+ "XAAUDIT.HDFS.DESTINATION_DIRECTORY": "hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit",
+ "common.name.for.certificate": "-",
+ "XAAUDIT.HDFS.IS_ENABLED": "false",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FILE": "%time:yyyyMMdd-HHmm.ss%.log",
+ "SSL_KEYSTORE_PASSWORD": "myKeyFilePassword",
+ "XAAUDIT.DB.IS_ENABLED": "true",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS": "600",
+ "XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS": "60",
+ "XAAUDIT.SOLR.SOLR_URL": "http://localhost:6083/solr/ranger_audits",
+ "XAAUDIT.SOLR.IS_ENABLED": "false",
+ "SSL_KEYSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-keystore.jks",
+ "ranger-knox-plugin-enabled": "No",
+ "policy_user": "ambari-qa",
+ "XAAUDIT.HDFS.DESTINTATION_FILE": "%hostname%-audit.log",
+ "XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS": "86400",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT": "10",
+ "SSL_TRUSTSTORE_PASSWORD": "changeit",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit/archive",
+ "REPOSITORY_CONFIG_USERNAME": "admin",
+ "XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS": "1000",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS": "60",
+ "SSL_TRUSTSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-truststore.jks",
+ "REPOSITORY_CONFIG_PASSWORD": "admin-password",
+ "XAAUDIT.SOLR.MAX_QUEUE_SIZE": "1"
+ },
+ "yarn-site": {
+ "yarn.nodemanager.disk-health-checker.min-healthy-disks": "0.25",
+ "yarn.nodemanager.container-executor.class": "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
+ "yarn.nodemanager.local-dirs": "/hadoop/yarn/local,/hadoop/yarn/local1",
+ "yarn.resourcemanager.resource-tracker.address": "c6402.ambari.apache.org:8025",
+ "yarn.nodemanager.remote-app-log-dir-suffix": "logs",
+ "yarn.resourcemanager.hostname": "c6402.ambari.apache.org",
+ "yarn.nodemanager.health-checker.script.timeout-ms": "60000",
+ "yarn.resourcemanager.scheduler.class": "org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler",
+ "yarn.nodemanager.resource.memory-mb": "2048",
+ "yarn.scheduler.minimum-allocation-mb": "683",
+ "yarn.resourcemanager.address": "c6402.ambari.apache.org:8050",
+ "yarn.resourcemanager.scheduler.address": "c6402.ambari.apache.org:8030",
+ "yarn.log-aggregation.retain-seconds": "2592000",
+ "yarn.scheduler.maximum-allocation-mb": "2048",
+ "yarn.log-aggregation-enable": "true",
+ "yarn.nodemanager.address": "0.0.0.0:45454",
+ "yarn.nodemanager.container-monitor.interval-ms": "3000",
+ "yarn.nodemanager.log-aggregation.compression-type": "gz",
+ "yarn.nodemanager.log.retain-seconds": "604800",
+ "yarn.nodemanager.delete.debug-delay-sec": "0",
+ "yarn.nodemanager.log-dirs": "/hadoop/yarn/log,/hadoop/yarn/log1",
+ "yarn.nodemanager.health-checker.interval-ms": "135000",
+ "yarn.resourcemanager.am.max-attempts": "2",
+ "yarn.nodemanager.remote-app-log-dir": "/app-logs",
+ "yarn.nodemanager.admin-env": "MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX",
+ "yarn.nodemanager.aux-services": "mapreduce_shuffle",
+ "yarn.nodemanager.vmem-check-enabled": "false",
+ "yarn.nodemanager.vmem-pmem-ratio": "2.1",
+ "yarn.admin.acl": "*",
+ "yarn.resourcemanager.webapp.address": "c6402.ambari.apache.org:8088",
+ "yarn.resourcemanager.nodes.exclude-path": "/etc/hadoop/conf/yarn.exclude",
+ "yarn.nodemanager.linux-container-executor.group": "hadoop",
+ "yarn.acl.enable": "true",
+ "yarn.log.server.url": "http://c6402.ambari.apache.org:19888/jobhistory/logs",
+ "yarn.application.classpath": "/etc/hadoop/conf,/usr/lib/hadoop/*,/usr/lib/hadoop/lib/*,/usr/lib/hadoop-hdfs/*,/usr/lib/hadoop-hdfs/lib/*,/usr/lib/hadoop-yarn/*,/usr/lib/hadoop-yarn/lib/*,/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*",
+ "yarn.resourcemanager.admin.address": "c6402.ambari.apache.org:8141",
+ "yarn.nodemanager.aux-services.mapreduce_shuffle.class": "org.apache.hadoop.mapred.ShuffleHandler",
+ "yarn.timeline-service.leveldb-timeline-store.path": "/var/log/hadoop-yarn/timeline",
+ "yarn.http.policy": "HTTP_ONLY",
+ "yarn.resourcemanager.webapp.https.address": "c6402.ambari.apache.org:8090"
+ },
+ "ranger-yarn-plugin-properties": {
+ "ranger-yarn-plugin-enabled": "No"
+ },
+ "tez-site": {
+ "tez.am.log.level": "WARN",
+ "tez.lib.uris": "hdfs:///apps/tez/,hdfs:///apps/tez/lib/",
+ "tez.staging-dir": "/tmp/${user.name}/staging",
+ "tez.am.am-rm.heartbeat.interval-ms.max": "250"
+ },
+ "slider-env": {
+ "content": "export JAVA_HOME={{java64_home}}\nexport HADOOP_CONF_DIR={{hadoop_conf_dir}}"
+ },
+ "yarn-env": {
+ "yarn_pid_dir_prefix": "/var/run/hadoop-yarn",
+ "apptimelineserver_heapsize": "1024",
+ "nodemanager_heapsize": "1024",
+ "content": "\nexport HADOOP_YARN_HOME={{hadoop_yarn_home}}\nexport YARN_LOG_DIR={{yarn_log_dir_prefix}}/$USER\nexport YARN_PID_DIR={{yarn_pid_dir_prefix}}/$USER\nexport HADOOP_LIBEXEC_DIR={{hadoop_libexec_dir}}\nexport JAVA_HOME={{java64_home}}\n\n# User for YARN daemons\nexport HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}\n\n# resolve links - $0 may be a softlink\nexport YARN_CONF_DIR=\"${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}\"\n\n# some Java parameters\n# export JAVA_HOME=/home/y/libexec/jdk1.6.0/\nif [ \"$JAVA_HOME\" != \"\" ]; then\n #echo \"run java in $JAVA_HOME\"\n JAVA_HOME=$JAVA_HOME\nfi\n\nif [ \"$JAVA_HOME\" = \"\" ]; then\n echo \"Error: JAVA_HOME is not set.\"\n exit 1\nfi\n\nJAVA=$JAVA_HOME/bin/java\nJAVA_HEAP_MAX=-Xmx1000m\n\n# For setting YARN specific HEAP sizes please use this\n# Parameter and set appropriately\nYARN_HEAPSIZE={{yarn_heapsize}}\n\n# check envvars which might override default args\nif [ \"$YARN_HEAPSIZE\" != \"\" ]; then\n JAVA_HEAP_M
AX=\"-Xmx\"\"$YARN_HEAPSIZE\"\"m\"\nfi\n\n# Resource Manager specific parameters\n\n# Specify the max Heapsize for the ResourceManager using a numerical value\n# in the scale of MB. For example, to specify an jvm option of -Xmx1000m, set\n# the value to 1000.\n# This value will be overridden by an Xmx setting specified in either YARN_OPTS\n# and/or YARN_RESOURCEMANAGER_OPTS.\n# If not specified, the default value will be picked from either YARN_HEAPMAX\n# or JAVA_HEAP_MAX with YARN_HEAPMAX as the preferred option of the two.\nexport YARN_RESOURCEMANAGER_HEAPSIZE={{resourcemanager_heapsize}}\n\n# Specify the JVM options to be used when starting the ResourceManager.\n# These options will be appended to the options specified as YARN_OPTS\n# and therefore may override any similar flags set in YARN_OPTS\n#export YARN_RESOURCEMANAGER_OPTS=\n\n# Node Manager specific parameters\n\n# Specify the max Heapsize for the NodeManager using a numerical value\n# in the scale of MB. For example, to
specify an jvm option of -Xmx1000m, set\n# the value to 1000.\n# This value will be overridden by an Xmx setting specified in either YARN_OPTS\n# and/or YARN_NODEMANAGER_OPTS.\n# If not specified, the default value will be picked from either YARN_HEAPMAX\n# or JAVA_HEAP_MAX with YARN_HEAPMAX as the preferred option of the two.\nexport YARN_NODEMANAGER_HEAPSIZE={{nodemanager_heapsize}}\n\n# Specify the max Heapsize for the HistoryManager using a numerical value\n# in the scale of MB. For example, to specify an jvm option of -Xmx1000m, set\n# the value to 1024.\n# This value will be overridden by an Xmx setting specified in either YARN_OPTS\n# and/or YARN_HISTORYSERVER_OPTS.\n# If not specified, the default value will be picked from either YARN_HEAPMAX\n# or JAVA_HEAP_MAX with YARN_HEAPMAX as the preferred option of the two.\nexport YARN_HISTORYSERVER_HEAPSIZE={{apptimelineserver_heapsize}}\n\n# Specify the JVM options to be used when starting the NodeManager.\n# These options will be
appended to the options specified as YARN_OPTS\n# and therefore may override any similar flags set in YARN_OPTS\n#export YARN_NODEMANAGER_OPTS=\n\n# so that filenames w/ spaces are handled correctly in loops below\nIFS=\n\n\n# default log directory and file\nif [ \"$YARN_LOG_DIR\" = \"\" ]; then\n YARN_LOG_DIR=\"$HADOOP_YARN_HOME/logs\"\nfi\nif [ \"$YARN_LOGFILE\" = \"\" ]; then\n YARN_LOGFILE='yarn.log'\nfi\n\n# default policy file for service-level authorization\nif [ \"$YARN_POLICYFILE\" = \"\" ]; then\n YARN_POLICYFILE=\"hadoop-policy.xml\"\nfi\n\n# restore ordinary behaviour\nunset IFS\n\n\nYARN_OPTS=\"$YARN_OPTS -Dhadoop.log.dir=$YARN_LOG_DIR\"\nYARN_OPTS=\"$YARN_OPTS -Dyarn.log.dir=$YARN_LOG_DIR\"\nYARN_OPTS=\"$YARN_OPTS -Dhadoop.log.file=$YARN_LOGFILE\"\nYARN_OPTS=\"$YARN_OPTS -Dyarn.log.file=$YARN_LOGFILE\"\nYARN_OPTS=\"$YARN_OPTS -Dyarn.home.dir=$YARN_COMMON_HOME\"\nYARN_OPTS=\"$YARN_OPTS -Dyarn.id.str=$YARN_IDENT_STRING\"\nYARN_OPTS=\"$YARN_OPTS -Dhadoop.root.logger=$
{YARN_ROOT_LOGGER:-INFO,console}\"\nYARN_OPTS=\"$YARN_OPTS -Dyarn.root.logger=${YARN_ROOT_LOGGER:-INFO,console}\"\nif [ \"x$JAVA_LIBRARY_PATH\" != \"x\" ]; then\n YARN_OPTS=\"$YARN_OPTS -Djava.library.path=$JAVA_LIBRARY_PATH\"\nfi\nYARN_OPTS=\"$YARN_OPTS -Dyarn.policy.file=$YARN_POLICYFILE\"",
+ "yarn_heapsize": "1024",
+ "yarn_user": "yarn",
+ "resourcemanager_heapsize": "1024",
+ "yarn_log_dir_prefix": "/var/log/hadoop-yarn",
+ "min_user_id": "1000",
+ "is_supported_yarn_ranger": "false",
+ "service_check.queue.name": "default"
+ },
+ "hadoop-env": {
+ "hdfs_tmp_dir": "/tmp",
+ "namenode_opt_maxnewsize": "200m",
+ "hdfs_log_dir_prefix": "/var/log/hadoop",
+ "namenode_heapsize": "1024m",
+ "namenode_opt_newsize": "200m",
+ "namenode_opt_permsize" : "128m",
+ "namenode_opt_maxpermsize" : "256m",
+ "content": "\n# Set Hadoop-specific environment variables here.\n\n# The only required environment variable is JAVA_HOME. All others are\n# optional. When running a distributed configuration it is best to\n# set JAVA_HOME in this file, so that it is correctly defined on\n# remote nodes.\n\n# The java implementation to use. Required.\nexport JAVA_HOME={{java_home}}\nexport HADOOP_HOME_WARN_SUPPRESS=1\n\n# Hadoop home directory\nexport HADOOP_HOME=${HADOOP_HOME:-/usr/lib/hadoop}\n\n# Hadoop Configuration Directory\n#TODO: if env var set that can cause problems\nexport HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-{{hadoop_conf_dir}}}\n\n{# this is different for HDP1 #}\n# Path to jsvc required by secure HDP 2.0 datanode\nexport JSVC_HOME={{jsvc_path}}\n\n\n# The maximum amount of heap to use, in MB. Default is 1000.\nexport HADOOP_HEAPSIZE=\"{{hadoop_heapsize}}\"\n\nexport HADOOP_NAMENODE_INIT_HEAPSIZE=\"-Xms{{namenode_heapsize}}\"\n\n# Extra Java runtime options. Empty by defaul
t.\nexport HADOOP_OPTS=\"-Djava.net.preferIPv4Stack=true ${HADOOP_OPTS}\"\n\n# Command specific options appended to HADOOP_OPTS when specified\nexport HADOOP_NAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -XX:PermSize={{namenode_opt_permsize}} -XX:MaxPermSize={{namenode_opt_maxpermsize}} -Xloggc:{{hdfs_log_dir_prefix}}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xms{{namenode_heapsize}} -Xmx{{namenode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_NAMENODE_OPTS}\"\nHADOOP_JOBTRACKER_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{jtnode_opt_newsize}} -XX:MaxNewSize={{jtnode_opt_maxnewsize}} -Xloggc:{{hdfs_log_dir_prefix}
}/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xmx{{jtnode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dmapred.audit.logger=INFO,MRAUDIT -Dhadoop.mapreduce.jobsummary.logger=INFO,JSA ${HADOOP_JOBTRACKER_OPTS}\"\n\nHADOOP_TASKTRACKER_OPTS=\"-server -Xmx{{ttnode_heapsize}} -Dhadoop.security.logger=ERROR,console -Dmapred.audit.logger=ERROR,console ${HADOOP_TASKTRACKER_OPTS}\"\nHADOOP_DATANODE_OPTS=\"-Xmx{{dtnode_heapsize}} -Dhadoop.security.logger=ERROR,DRFAS ${HADOOP_DATANODE_OPTS}\"\nHADOOP_BALANCER_OPTS=\"-server -Xmx{{hadoop_heapsize}}m ${HADOOP_BALANCER_OPTS}\"\n\nexport HADOOP_SECONDARYNAMENODE_OPTS=\"-server -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:ErrorFile={{hdfs_log_dir_prefix}}/$USER/hs_err_pid%p.log -XX:NewSize={{namenode_opt_newsize}} -XX:MaxNewSize={{namenode_opt_maxnewsize}} -XX:PermSize={{namenode_opt_permsize}} -XX:MaxPermSize={{namenode_opt_maxpermsize}} -Xloggc:{{hdfs_log_dir_prefix}}/
$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_INIT_HEAPSIZE} -Xmx{{namenode_heapsize}} -Dhadoop.security.logger=INFO,DRFAS -Dhdfs.audit.logger=INFO,DRFAAUDIT ${HADOOP_SECONDARYNAMENODE_OPTS}\"\n\n# The following applies to multiple commands (fs, dfs, fsck, distcp etc)\nexport HADOOP_CLIENT_OPTS=\"-Xmx${HADOOP_HEAPSIZE}m $HADOOP_CLIENT_OPTS\"\n# On secure datanodes, user to run the datanode as after dropping privileges\nexport HADOOP_SECURE_DN_USER={{hdfs_user}}\n\n# Extra ssh options. Empty by default.\nexport HADOOP_SSH_OPTS=\"-o ConnectTimeout=5 -o SendEnv=HADOOP_CONF_DIR\"\n\n# Where log files are stored. $HADOOP_HOME/logs by default.\nexport HADOOP_LOG_DIR={{hdfs_log_dir_prefix}}/$USER\n\n# History server logs\nexport HADOOP_MAPRED_LOG_DIR={{mapred_log_dir_prefix}}/$USER\n\n# Where log files are stored in the secure data environment.\nexport HADOOP_SECURE_DN_LOG_DIR={{hdfs_log_dir_prefix}}/$HAD
OOP_SECURE_DN_USER\n\n# File naming remote slave hosts. $HADOOP_HOME/conf/slaves by default.\n# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves\n\n# host:path where hadoop code should be rsync'd from. Unset by default.\n# export HADOOP_MASTER=master:/home/$USER/src/hadoop\n\n# Seconds to sleep between slave commands. Unset by default. This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arrive faster than the master can service them.\n# export HADOOP_SLAVE_SLEEP=0.1\n\n# The directory where pid files are stored. /tmp by default.\nexport HADOOP_PID_DIR={{hadoop_pid_dir_prefix}}/$USER\nexport HADOOP_SECURE_DN_PID_DIR={{hadoop_pid_dir_prefix}}/$HADOOP_SECURE_DN_USER\n\n# History server pid\nexport HADOOP_MAPRED_PID_DIR={{mapred_pid_dir_prefix}}/$USER\n\nYARN_RESOURCEMANAGER_OPTS=\"-Dyarn.server.resourcemanager.appsummary.logger=INFO,RMSUMMARY\"\n\n# A string representing this instance of hadoop. $USER by default.\nexport HADOOP_IDENT_STRING=$USER\n\n#
The scheduling priority for daemon processes. See 'man nice'.\n\n# export HADOOP_NICENESS=10\n\n# Use libraries from standard classpath\nJAVA_JDBC_LIBS=\"\"\n#Add libraries required by mysql connector\nfor jarFile in `ls /usr/share/java/*mysql* 2>/dev/null`\ndo\n JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by oracle connector\nfor jarFile in `ls /usr/share/java/*ojdbc* 2>/dev/null`\ndo\n JAVA_JDBC_LIBS=${JAVA_JDBC_LIBS}:$jarFile\ndone\n#Add libraries required by nodemanager\nMAPREDUCE_LIBS={{mapreduce_libs_path}}\nexport HADOOP_CLASSPATH=${HADOOP_CLASSPATH}${JAVA_JDBC_LIBS}:${MAPREDUCE_LIBS}\n\nif [ -d \"/usr/lib/tez\" ]; then\n export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/lib/tez/*:/usr/lib/tez/lib/*:/etc/tez/conf\nfi\n\n# Setting path to hdfs command line\nexport HADOOP_LIBEXEC_DIR={{hadoop_libexec_dir}}\n\n#Mostly required for hadoop 2.0\nexport JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/usr/lib/hadoop/lib/native/Linux-amd64-64",
+ "hdfs_user": "hdfs",
+ "dtnode_heapsize": "1024m",
+ "proxyuser_group": "users",
+ "hadoop_heapsize": "1024",
+ "hadoop_pid_dir_prefix": "/var/run/hadoop"
+ },
+ "hive-env": {
+ "hcat_pid_dir": "/var/run/webhcat",
+ "hcat_user": "hcat",
+ "hive_ambari_database": "MySQL",
+ "hive_hostname": "abtest-3.c.pramod-thangali.internal",
+ "hive_metastore_port": "9083",
+ "webhcat_user": "hcat",
+ "content": "\n if [ \"$SERVICE\" = \"cli\" ]; then\n if [ -z \"$DEBUG\" ]; then\n export HADOOP_OPTS=\"$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:+UseParNewGC -XX:-UseGCOverheadLimit\"\n else\n export HADOOP_OPTS=\"$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit\"\n fi\n fi\n\n# The heap size of the jvm stared by hive shell script can be controlled via:\n\nexport HADOOP_HEAPSIZE=\"{{hive_heapsize}}\"\nexport HADOOP_CLIENT_OPTS=\"-Xmx${HADOOP_HEAPSIZE}m $HADOOP_CLIENT_OPTS\"\n\n# Larger heap size may be required when running queries over large number of files or partitions.\n# By default hive shell scripts use a heap size of 256 (MB). Larger heap size would also be\n# appropriate for hive server (hwi etc).\n\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nHADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\n# Hive Configuration Director
y can be controlled by:\nexport HIVE_CONF_DIR={{conf_dir}}\n\n# Folder containing extra ibraries required for hive compilation/execution can be controlled by:\nif [ \"${HIVE_AUX_JARS_PATH}\" != \"\" ]; then\n export HIVE_AUX_JARS_PATH=${HIVE_AUX_JARS_PATH}\nelif [ -d \"/usr/lib/hive-hcatalog/\" ]; then\n export HIVE_AUX_JARS_PATH=/usr/lib/hive-hcatalog/share/hcatalog/hive-hcatalog-core-*.jar\nelse\n export HIVE_AUX_JARS_PATH=/usr/lib/hcatalog/share/hcatalog/hcatalog-core.jar\nfi\nexport METASTORE_PORT={{hive_metastore_port}}",
+ "hive_database_name": "hive",
+ "hive_database_type": "mysql",
+ "hive_pid_dir": "/var/run/hive",
+ "hive_log_dir": "/var/log/hive",
+ "hive_user": "hive",
+ "hcat_log_dir": "/var/log/webhcat",
+ "hive_database": "New MySQL Database",
+ "hive_security_authorization": "None"
+ },
+ "ranger-env": {
+ "xml_configurations_supported" : "false"
+ },
+ "cluster-env": {
+ "managed_hdfs_resource_property_names": "",
+ "security_enabled": "false",
+ "hdfs_user_principal" : "",
+ "hdfs_user_keytab" : "",
+ "ignore_groupsusers_create": "false",
+ "smokeuser": "ambari-qa",
+ "kerberos_domain": "EXAMPLE.COM",
+ "user_group": "hadoop",
+ "repo_suse_rhel_template": "[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0",
+ "repo_ubuntu_template": "{{package_type}} {{base_url}} {{components}}",
+ "metrics_collector_vip_host": "c6402.ambari.apache.org",
+ "metrics_collector_vip_port": "6189",
+ "override_uid" : "true",
+ "fetch_nonlocal_groups": "true",
+ "manage_dirs_on_root": "true",
+ "ignore_bad_mounts": "false"
+ },
+ "hbase-env": {
+ "hbase_pid_dir": "/var/run/hbase",
+ "hbase_user": "hbase",
+ "hbase_master_heapsize": "1024m",
+ "content": "\n# Set environment variables here.\n\n# The java implementation to use. Java 1.6 required.\nexport JAVA_HOME={{java64_home}}\n\n# HBase Configuration directory\nexport HBASE_CONF_DIR=${HBASE_CONF_DIR:-{{hbase_conf_dir}}}\n\n# Extra Java CLASSPATH elements. Optional.\nexport HBASE_CLASSPATH=${HBASE_CLASSPATH}\n\n# The maximum amount of heap to use, in MB. Default is 1000.\n# export HBASE_HEAPSIZE=1000\n\n# Extra Java runtime options.\n# Below are what we set by default. May only work with SUN JVM.\n# For more on why as well as other possible settings,\n# see http://wiki.apache.org/hadoop/PerformanceTuning\nexport HBASE_OPTS=\"-XX:+UseConcMarkSweepGC -XX:ErrorFile={{log_dir}}/hs_err_pid%p.log\"\nexport SERVER_GC_OPTS=\"-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{{log_dir}}/gc.log-`date +'%Y%m%d%H%M'`\"\n# Uncomment below to enable java garbage collection logging.\n# export HBASE_OPTS=\"$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintG
CDateStamps -Xloggc:$HBASE_HOME/logs/gc-hbase.log\"\n\n# Uncomment and adjust to enable JMX exporting\n# See jmxremote.password and jmxremote.access in $JRE_HOME/lib/management to configure remote password access.\n# More details at: http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html\n#\n# export HBASE_JMX_BASE=\"-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false\"\nexport HBASE_MASTER_OPTS=\"-Xmx{{master_heapsize}}\"\nexport HBASE_REGIONSERVER_OPTS=\"-Xmn{{regionserver_xmn_size}} -XX:CMSInitiatingOccupancyFraction=70 -Xms{{regionserver_heapsize}} -Xmx{{regionserver_heapsize}}\"\n# export HBASE_THRIFT_OPTS=\"$HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10103\"\n# export HBASE_ZOOKEEPER_OPTS=\"$HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10104\"\n\n# File naming hosts on which HRegionServers will run. $HBASE_HOME/conf/regionservers by default.\nexport HBASE_REGIONSERVERS=${HBASE_CONF_DIR}/regionservers\n\n#
Extra ssh options. Empty by default.\n# export HBASE_SSH_OPTS=\"-o ConnectTimeout=1 -o SendEnv=HBASE_CONF_DIR\"\n\n# Where log files are stored. $HBASE_HOME/logs by default.\nexport HBASE_LOG_DIR={{log_dir}}\n\n# A string representing this instance of hbase. $USER by default.\n# export HBASE_IDENT_STRING=$USER\n\n# The scheduling priority for daemon processes. See 'man nice'.\n# export HBASE_NICENESS=10\n\n# The directory where pid files are stored. /tmp by default.\nexport HBASE_PID_DIR={{pid_dir}}\n\n# Seconds to sleep between slave commands. Unset by default. This\n# can be useful in large clusters, where, e.g., slave rsyncs can\n# otherwise arrive faster than the master can service them.\n# export HBASE_SLAVE_SLEEP=0.1\n\n# Tell HBase whether it should manage it's own instance of Zookeeper or not.\nexport HBASE_MANAGES_ZK=false\n\n{% if security_enabled %}\nexport HBASE_OPTS=\"$HBASE_OPTS -Djava.security.auth.login.config={{client_jaas_config_file}}\"\nexport HBASE_MASTER_OPTS=\
"$HBASE_MASTER_OPTS -Djava.security.auth.login.config={{master_jaas_config_file}}\"\nexport HBASE_REGIONSERVER_OPTS=\"$HBASE_REGIONSERVER_OPTS -Djava.security.auth.login.config={{regionserver_jaas_config_file}}\"\n{% endif %}",
+ "hbase_regionserver_heapsize": "1024m",
+ "hbase_regionserver_xmn_max": "512",
+ "hbase_regionserver_xmn_ratio": "0.2",
+ "hbase_log_dir": "/var/log/hbase",
+ "hbase_java_io_tmpdir" : "/tmp",
+ "hbase_regionserver_shutdown_timeout": "30"
+ },
+ "ganglia-env": {
+ "gmond_user": "nobody",
+ "ganglia_runtime_dir": "/var/run/ganglia/hdp",
+ "rrdcached_base_dir": "/var/lib/ganglia/rrds",
+ "rrdcached_flush_timeout": "7200",
+ "gmetad_user": "nobody",
+ "rrdcached_write_threads": "4",
+ "rrdcached_delay": "1800",
+ "rrdcached_timeout": "3600"
+ },
+ "zookeeper-env": {
+ "zk_user": "zookeeper",
+ "zk_log_dir": "/var/log/zookeeper",
+ "content": "\nexport JAVA_HOME={{java64_home}}\nexport ZOO_LOG_DIR={{zk_log_dir}}\nexport ZOOPIDFILE={{zk_pid_file}}\nexport SERVER_JVMFLAGS={{zk_server_heapsize}}\nexport JAVA=$JAVA_HOME/bin/java\nexport CLASSPATH=$CLASSPATH:/usr/share/zookeeper/*\n\n{% if security_enabled %}\nexport SERVER_JVMFLAGS=\"$SERVER_JVMFLAGS -Djava.security.auth.login.config={{zk_server_jaas_file}}\"\nexport CLIENT_JVMFLAGS=\"$CLIENT_JVMFLAGS -Djava.security.auth.login.config={{zk_client_jaas_file}}\"\n{% endif %}",
+ "zk_pid_dir": "/var/run/zookeeper",
+ "zookeeper_principal_name": "zookeeper/_HOST@EXAMPLE.COM",
+ "zookeeper_keytab_path": "/etc/security/keytabs/zk.service.keytab"
+ },
+ "zoo.cfg": {
+ "clientPort": "2181",
+ "syncLimit": "5",
+ "initLimit": "10",
+ "dataDir": "/hadoop/zookeeper",
+ "tickTime": "2000"
+ },
+ "mapred-env": {
+ "content": "\n# export JAVA_HOME=/home/y/libexec/jdk1.6.0/\n\nexport HADOOP_JOB_HISTORYSERVER_HEAPSIZE={{jobhistory_heapsize}}\n\nexport HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA\n\n#export HADOOP_JOB_HISTORYSERVER_OPTS=\n#export HADOOP_MAPRED_LOG_DIR=\"\" # Where log files are stored. $HADOOP_MAPRED_HOME/logs by default.\n#export HADOOP_JHS_LOGGER=INFO,RFA # Hadoop JobSummary logger.\n#export HADOOP_MAPRED_PID_DIR= # The pid files are stored. /tmp by default.\n#export HADOOP_MAPRED_IDENT_STRING= #A string representing this instance of hadoop. $USER by default\n#export HADOOP_MAPRED_NICENESS= #The scheduling priority for daemons. Defaults to 0.",
+ "mapred_pid_dir_prefix": "/var/run/hadoop-mapreduce",
+ "mapred_user": "mapred",
+ "jobhistory_heapsize": "900",
+ "mapred_log_dir_prefix": "/var/log/hadoop-mapreduce"
+ },
+ "tez-env": {
+ "content": "\n# Tez specific configuration\nexport TEZ_CONF_DIR={{config_dir}}\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nexport HADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\n# The java implementation to use.\nexport JAVA_HOME={{java64_home}}",
+ "tez_user": "tez"
+ },
+ "flume-env": {
+ "content": "export JAVA_HOME={{java64_home}}\nexport HIVE_HOME={{flume_hive_home}}",
+ "flume_user": "flume",
+ "flume_log_dir": "/var/log/flume",
+ "flume_run_dir": "/var/run/flume"
+ },
+ "storm-env": {
+ "content": "\n#!/bin/bash\n\n# Set Storm specific environment variables here.\n\n# The java implementation to use.\nexport JAVA_HOME={{java_home}}\n\n# export STORM_CONF_DIR=\"\"",
+ "storm_log_dir": "/var/log/storm",
+ "storm_pid_dir": "/var/run/storm",
+ "storm_user": "storm"
+ },
+ "falcon-env": {
+ "falcon_apps_hdfs_dir": "/apps/falcon",
+ "falcon_port": "15000",
+ "falcon_pid_dir": "/var/run/falcon",
+ "falcon_log_dir": "/var/log/falcon",
+ "falcon.emeddedmq.port": "61616",
+ "falcon_user": "falcon",
+ "falcon_local_dir": "/hadoop/falcon",
+ "content": "\n# The java implementation to use. If JAVA_HOME is not found we expect java and jar to be in path\nexport JAVA_HOME={{java_home}}\n\n# any additional java opts you want to set. This will apply to both client and server operations\n#export FALCON_OPTS=\n\n# any additional java opts that you want to set for client only\n#export FALCON_CLIENT_OPTS=\n\n# java heap size we want to set for the client. Default is 1024MB\n#export FALCON_CLIENT_HEAP=\n\n# any additional opts you want to set for prisim service.\n#export FALCON_PRISM_OPTS=\n\n# java heap size we want to set for the prisim service. Default is 1024MB\n#export FALCON_PRISM_HEAP=\n\n# any additional opts you want to set for falcon service.\nexport FALCON_SERVER_OPTS=\"-Dfalcon.embeddedmq={{falcon_embeddedmq_enabled}} -Dfalcon.emeddedmq.port={{falcon_emeddedmq_port}}\"\n\n# java heap size we want to set for the falcon server. Default is 1024MB\n#export FALCON_SERVER_HEAP=\n\n# What is is considered as falco
n home dir. Default is the base locaion of the installed software\n#export FALCON_HOME_DIR=\n\n# Where log files are stored. Defatult is logs directory under the base install location\nexport FALCON_LOG_DIR={{falcon_log_dir}}\n\n# Where pid files are stored. Defatult is logs directory under the base install location\nexport FALCON_PID_DIR={{falcon_pid_dir}}\n\n# where the falcon active mq data is stored. Defatult is logs/data directory under the base install location\nexport FALCON_DATA_DIR={{falcon_embeddedmq_data}}\n\n# Where do you want to expand the war file. By Default it is in /server/webapp dir under the base install dir.\n#export FALCON_EXPANDED_WEBAPP_DIR=",
+ "falcon.embeddedmq.data": "/hadoop/falcon/embeddedmq/data",
+ "falcon.embeddedmq": "true",
+ "falcon_store_uri": "file:///hadoop/falcon/store",
+ "supports_hive_dr": "true"
+ },
+ "oozie-env": {
+ "oozie_derby_database": "Derby",
+ "oozie_admin_port": "11001",
+ "oozie_hostname": "abtest-3.c.pramod-thangali.internal",
+ "oozie_pid_dir": "/var/run/oozie",
+ "content": "\n#!/bin/bash\n\nif [ -d \"/usr/lib/bigtop-tomcat\" ]; then\n export OOZIE_CONFIG=${OOZIE_CONFIG:-/etc/oozie/conf}\n export CATALINA_BASE=${CATALINA_BASE:-/var/lib/oozie/oozie-server}\n export CATALINA_TMPDIR=${CATALINA_TMPDIR:-/var/tmp/oozie}\n export OOZIE_CATALINA_HOME=/usr/lib/bigtop-tomcat\nfi\n\n#Set JAVA HOME\nexport JAVA_HOME={{java_home}}\n\nexport JRE_HOME=${JAVA_HOME}\n\n# Set Oozie specific environment variables here.\n\n# Settings for the Embedded Tomcat that runs Oozie\n# Java System properties for Oozie should be specified in this variable\n#\n# export CATALINA_OPTS=\n\n# Oozie configuration file to load from Oozie configuration directory\n#\n# export OOZIE_CONFIG_FILE=oozie-site.xml\n\n# Oozie logs directory\n#\nexport OOZIE_LOG={{oozie_log_dir}}\n\n# Oozie pid directory\n#\nexport CATALINA_PID={{pid_file}}\n\n#Location of the data for oozie\nexport OOZIE_DATA={{oozie_data_dir}}\n\n# Oozie Log4J configuration file to load from Oozie config
uration directory\n#\n# export OOZIE_LOG4J_FILE=oozie-log4j.properties\n\n# Reload interval of the Log4J configuration file, in seconds\n#\n# export OOZIE_LOG4J_RELOAD=10\n\n# The port Oozie server runs\n#\nexport OOZIE_HTTP_PORT={{oozie_server_port}}\n\n# The admin port Oozie server runs\n#\nexport OOZIE_ADMIN_PORT={{oozie_server_admin_port}}\n\n# The host name Oozie server runs on\n#\n# export OOZIE_HTTP_HOSTNAME=`hostname -f`\n\n# The base URL for callback URLs to Oozie\n#\n# export OOZIE_BASE_URL=\"http://${OOZIE_HTTP_HOSTNAME}:${OOZIE_HTTP_PORT}/oozie\"\nexport JAVA_LIBRARY_PATH=/usr/lib/hadoop/lib/native/Linux-amd64-64",
+ "oozie_user": "oozie",
+ "oozie_admin_users": "{oozie_user}, {oozie_user}-admin",
+ "oozie_database": "New Derby Database",
+ "oozie_data_dir": "/hadoop/oozie/data",
+ "oozie_log_dir": "/var/log/oozie",
+ "oozie_tmp_dir": "/var/tmp/oozie"
+ },
+ "webhcat-env": {
+ "content": "\n# The file containing the running pid\nPID_FILE={{pid_file}}\n\nTEMPLETON_LOG_DIR={{templeton_log_dir}}/\n\n\nWEBHCAT_LOG_DIR={{templeton_log_dir}}/\n\n# The console error log\nERROR_LOG={{templeton_log_dir}}/webhcat-console-error.log\n\n# The console log\nCONSOLE_LOG={{templeton_log_dir}}/webhcat-console.log\n\n#TEMPLETON_JAR=templeton_jar_name\n\n#HADOOP_PREFIX=hadoop_prefix\n\n#HCAT_PREFIX=hive_prefix\n\n# Set HADOOP_HOME to point to a specific hadoop install directory\nexport HADOOP_HOME=/usr/lib/hadoop"
+ },
+ "hcat-env": {
+ "content": "JAVA_HOME={{java64_home}}\n HCAT_PID_DIR={{hcat_pid_dir}}/\n HCAT_LOG_DIR={{hcat_log_dir}}/\n HCAT_CONF_DIR={{hcat_conf_dir}}\n HADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n #DBROOT is the path where the connector jars are downloaded\n DBROOT={{hcat_dbroot}}\n USER={{hcat_user}}\n METASTORE_PORT={{hive_metastore_port}}"
+ },
+ "pig-env": {
+ "content": "\nJAVA_HOME={{java64_home}}\nHADOOP_HOME=${HADOOP_HOME:-{{hadoop_home}}}\n\nif [ -d \"/usr/lib/tez\" ]; then\n PIG_OPTS=\"$PIG_OPTS -Dmapreduce.framework.name=yarn\"\nfi"
+ },
+ "sqoop-env": {
+ "content": "\n# Set Hadoop-specific environment variables here.\n\n#Set path to where bin/hadoop is available\n#Set path to where bin/hadoop is available\nexport HADOOP_HOME=${HADOOP_HOME:-/usr/lib/hadoop}\n\n#set the path to where bin/hbase is available\nexport HBASE_HOME=${HBASE_HOME:-/usr/lib/hbase}\n\n#Set the path to where bin/hive is available\nexport HIVE_HOME=${HIVE_HOME:-/usr/lib/hive}\n\n#Set the path for where zookeper config dir is\nexport ZOOCFGDIR=${ZOOCFGDIR:-/etc/zookeeper/conf}\n\n# add libthrift in hive to sqoop class path first so hive imports work\nexport SQOOP_USER_CLASSPATH=\"`ls ${HIVE_HOME}/lib/libthrift-*.jar 2> /dev/null`:${SQOOP_USER_CLASSPATH}\"",
+ "sqoop_user": "sqoop"
+ },
+ "hdfs-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "yarn-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "hbase-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "hive-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "hive-exec-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "webhcat-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "zookeeper-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "pig-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "pig-properties": {
+ "content": "pigproperties\nline2"
+ },
+ "oozie-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "flume-conf": {
+ "content": "a1.sources = r1\n a1.sinks = k1\n a1.channels = c1\n # Describe/configure the source\n a1.sources.r1.type = netcat\n a1.sources.r1.bind = localhost\n a1.sources.r1.port = 44444\n \n # Describe the sink\n a1.sinks.k1.type = logger\n \n # Use a channel which buffers events in memory\n a1.channels.c1.type = memory\n a1.channels.c1.capacity = 1000\n a1.channels.c1.transactionCapacity = 100\n \n # Bind the source and sink to the channel\n a1.sources.r1.channels = c1\n a1.sinks.k1.channel = c1\n"
+ },
+ "flume-log4j": {
+ "content": "log4jproperties\nline2"
+ },
+ "ranger-hbase-plugin-properties": {
+ "POLICY_MGR_URL": "{{policymgr_mgr_url}}",
+ "XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS": "900",
+ "XAAUDIT.HDFS.DESTINATION_DIRECTORY": "hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit",
+ "common.name.for.certificate": "-",
+ "XAAUDIT.HDFS.IS_ENABLED": "false",
+ "SQL_CONNECTOR_JAR": "{{sql_connector_jar}}",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FILE": "%time:yyyyMMdd-HHmm.ss%.log",
+ "ranger-hbase-plugin-enabled": "No",
+ "REPOSITORY_NAME": "{{repo_name}}",
+ "SSL_KEYSTORE_PASSWORD": "myKeyFilePassword",
+ "XAAUDIT.DB.IS_ENABLED": "true",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS": "600",
+ "XAAUDIT.SOLR.SOLR_URL": "http://localhost:6083/solr/ranger_audits",
+ "XAAUDIT.DB.DATABASE_NAME": "{{xa_audit_db_name}}",
+ "XAAUDIT.DB.HOSTNAME": "{{xa_db_host}}",
+ "XAAUDIT.SOLR.IS_ENABLED": "false",
+ "SSL_KEYSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-keystore.jks",
+ "XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS": "60",
+ "XAAUDIT.DB.USER_NAME": "{{xa_audit_db_user}}",
+ "policy_user": "ambari-qa",
+ "UPDATE_XAPOLICIES_ON_GRANT_REVOKE": "true",
+ "XAAUDIT.HDFS.DESTINTATION_FILE": "%hostname%-audit.log",
+ "XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS": "86400",
+ "XAAUDIT.DB.PASSWORD": "{{xa_audit_db_password}}",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT": "10",
+ "SSL_TRUSTSTORE_PASSWORD": "changeit",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit/archive",
+ "REPOSITORY_CONFIG_USERNAME": "hbase",
+ "XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS": "1000",
+ "XAAUDIT.DB.FLAVOUR": "{{xa_audit_db_flavor}}",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS": "60",
+ "SSL_TRUSTSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-truststore.jks",
+ "REPOSITORY_CONFIG_PASSWORD": "hbase",
+ "XAAUDIT.SOLR.MAX_QUEUE_SIZE": "1"
+ },
+ "ranger-hdfs-plugin-properties": {
+ "XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS": "900",
+ "XAAUDIT.HDFS.DESTINATION_DIRECTORY": "hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit",
+ "common.name.for.certificate": "-",
+ "XAAUDIT.HDFS.IS_ENABLED": "false",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FILE": "%time:yyyyMMdd-HHmm.ss%.log",
+ "SSL_KEYSTORE_PASSWORD": "myKeyFilePassword",
+ "XAAUDIT.DB.IS_ENABLED": "true",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS": "600",
+ "XAAUDIT.SOLR.SOLR_URL": "http://localhost:6083/solr/ranger_audits",
+ "XAAUDIT.SOLR.IS_ENABLED": "false",
+ "hadoop.rpc.protection": "-",
+ "ranger-hdfs-plugin-enabled": "No",
+ "SSL_KEYSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-keystore.jks",
+ "XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS": "60",
+ "policy_user": "ambari-qa",
+ "XAAUDIT.HDFS.DESTINTATION_FILE": "%hostname%-audit.log",
+ "XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS": "86400",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT": "10",
+ "SSL_TRUSTSTORE_PASSWORD": "changeit",
+ "XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY": "__REPLACE__LOG_DIR/hadoop/%app-type%/audit/archive",
+ "REPOSITORY_CONFIG_USERNAME": "hadoop",
+ "XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS": "1000",
+ "XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS": "60",
+ "SSL_TRUSTSTORE_FILE_PATH": "/etc/hadoop/conf/ranger-plugin-truststore.jks",
+ "REPOSITORY_CONFIG_PASSWORD": "hadoop",
+ "XAAUDIT.SOLR.MAX_QUEUE_SIZE": "1"
+ },
+ "ams-hbase-env": {
+ "hbase_pid_dir": "/var/run/ambari-metrics-collector/",
+ "regionserver_xmn_size": "256m",
+ "max_open_files_limit": "32768",
+ "hbase_master_maxperm_size": "128m",
+ "hbase_regionserver_xmn_ratio": "0.2",
+ "hbase_master_heapsize": "512m",
+ "hbase_regionserver_heapsize": "512m",
+ "hbase_log_dir": "/var/log/ambari-metrics-collector",
+ "hbase_master_xmn_size": "256m",
+ "content": "\n",
+ "hbase_regionserver_shutdown_timeout": "30"
+ },
+ "ams-log4j": {
+ "content": "\n"
+ },
+ "ams-hbase-site": {
+ "hbase.master.info.bindAddress": "0.0.0.0",
+ "hbase.zookeeper.property.dataDir": "${hbase.tmp.dir}/zookeeper",
+ "hbase.master.wait.on.regionservers.mintostart": "1",
+ "hbase.replication": "false",
+ "hbase.regionserver.global.memstore.lowerLimit": "0.3",
+ "hbase.hregion.memstore.block.multiplier": "4",
+ "hbase.hregion.memstore.flush.size": "134217728",
+ "hbase.rootdir": "hdfs://localhost:8020/apps/hbase/data",
+ "hbase.zookeeper.property.clientPort": "61181",
+ "phoenix.spool.directory": "${hbase.tmp.dir}/phoenix-spool",
+ "hbase.client.scanner.timeout.period": "900000",
+ "phoenix.groupby.maxCacheSize": "307200000",
+ "hbase.snapshot.enabled": "false",
+ "hbase.regionserver.global.memstore.upperLimit": "0.35",
+ "hbase_master_xmn_size": "128m",
+ "phoenix.query.spoolThresholdBytes": "12582912",
+ "zookeeper.session.timeout": "120000",
+ "hbase.tmp.dir": "/var/lib/ambari-metrics-collector/hbase-tmp",
+ "hfile.block.cache.size": "0.3",
+ "hbase.regionserver.port": "61320",
+ "hbase.regionserver.thread.compaction.small": "3",
+ "hbase.master.info.port": "61310",
+ "hbase.hregion.majorcompaction": "0",
+ "phoenix.query.maxGlobalMemoryPercentage": "15",
+ "hbase.zookeeper.quorum": "{{zookeeper_quorum_hosts}}",
+ "hbase.regionserver.info.port": "61330",
+ "hbase.hstore.blockingStoreFiles": "200",
+ "hbase.master.port": "61300",
+ "hbase.zookeeper.leaderport": "61388",
+ "hbase.regionserver.thread.compaction.large": "2",
+ "phoenix.query.timeoutMs": "1200000",
+ "hbase.local.dir": "${hbase.tmp.dir}/local",
+ "hbase.cluster.distributed": "true",
+ "zookeeper.session.timeout.localHBaseCluster": "20000",
+ "hbase.client.scanner.caching": "10000",
+ "phoenix.sequence.saltBuckets": "2",
+ "hbase.hstore.flusher.count": "2",
+ "hbase.zookeeper.peerport": "61288"
+ },
+ "ams-env": {
+ "ambari_metrics_user": "ams",
+ "metrics_monitor_log_dir": "/var/log/ambari-metrics-monitor",
+ "metrics_collector_log_dir": "/var/log/ambari-metrics-collector",
+ "metrics_monitor_pid_dir": "/var/run/ambari-metrics-monitor",
+ "content": "\n",
+ "metrics_collector_pid_dir": "/var/run/ambari-metrics-collector",
+ "metrics_collector_heapsize": "512m"
+ },
+ "ams-hbase-policy": {
+ "security.masterregion.protocol.acl": "*",
+ "security.admin.protocol.acl": "*",
+ "security.client.protocol.acl": "*"
+ },
+ "ams-hbase-log4j": {
+ "content": "\n"
+ },
+ "ams-site": {
+ "timeline.metrics.service.http.policy": "HTTPS_ONLY",
+ "timeline.metrics.host.aggregator.minute.ttl": "604800",
+ "timeline.metrics.cluster.aggregator.daily.checkpointCutOffMultiplier": "1",
+ "timeline.metrics.cluster.aggregator.daily.ttl": "63072000",
+ "timeline.metrics.cluster.aggregator.minute.timeslice.interval": "30",
+ "timeline.metrics.service.resultset.fetchSize": "2000",
+ "timeline.metrics.service.checkpointDelay": "60",
+ "timeline.metrics.host.aggregator.hourly.disabled": "false",
+ "timeline.metrics.cluster.aggregator.daily.interval": "86400",
+ "timeline.metrics.cluster.aggregator.hourly.ttl": "31536000",
+ "timeline.metrics.host.aggregator.daily.disabled": "false",
+ "timeline.metrics.hbase.compression.scheme": "SNAPPY",
+ "timeline.metrics.cluster.aggregator.hourly.interval": "3600",
+ "phoenix.spool.directory": "/tmp",
+ "timeline.metrics.host.aggregator.ttl": "86400",
+ "timeline.metrics.cluster.aggregator.hourly.checkpointCutOffMultiplier": "2",
+ "timeline.metrics.service.cluster.aggregator.appIds": "datanode,nodemanager,hbase",
+ "timeline.metrics.service.webapp.address": "0.0.0.0:6188",
+ "timeline.metrics.cluster.aggregator.hourly.disabled": "false",
+ "timeline.metrics.aggregator.checkpoint.dir": "/var/lib/ambari-metrics-collector/checkpoint",
+ "timeline.metrics.hbase.data.block.encoding": "FAST_DIFF",
+ "timeline.metrics.cluster.aggregator.minute.ttl": "2592000",
+ "timeline.metrics.host.aggregator.minute.disabled": "false",
+ "phoenix.query.maxGlobalMemoryPercentage": "25",
+ "timeline.metrics.service.operation.mode": "distributed",
+ "timeline.metrics.host.aggregator.minute.checkpointCutOffMultiplier": "2",
+ "timeline.metrics.cluster.aggregator.minute.checkpointCutOffMultiplier": "2",
+ "timeline.metrics.host.aggregator.hourly.checkpointCutOffMultiplier": "2",
+ "timeline.metrics.cluster.aggregator.daily.disabled": "false",
+ "timeline.metrics.service.rpc.address": "0.0.0.0:60200",
+ "timeline.metrics.cluster.aggregator.minute.disabled": "false",
+ "timeline.metrics.host.aggregator.hourly.ttl": "2592000",
+ "timeline.metrics.host.aggregator.minute.interval": "120",
+ "timeline.metrics.service.default.result.limit": "5760",
+ "timeline.metrics.host.aggregator.daily.ttl": "31536000",
+ "timeline.metrics.host.aggregator.daily.checkpointCutOffMultiplier": "1",
+ "timeline.metrics.daily.aggregator.minute.interval": "86400",
+ "timeline.metrics.cluster.aggregator.minute.interval": "120",
+ "timeline.metrics.host.aggregator.hourly.interval": "3600"
+ },
+ "ams-grafana-env": {
+ "metrics_grafana_log_dir": "/var/log/ambari-metrics-grafana",
+ "metrics_grafana_pid_dir": "/var/run/ambari-metrics-grafana",
+ "metrics_grafana_data_dir": "/var/lib/ambari-metrics-grafana",
+ "content": "\n",
+ "metrics_grafana_username" : "admin",
+ "metrics_grafana_password" : "admin"
+ },
+ "ams-ssl-server": {
+ "content": "\n"
+ },
+ "ams-ssl-client": {
+ "ssl.client.truststore.location": "/etc/security/clientKeys/all.jks",
+ "ssl.client.truststore.type": "jks",
+ "ssl.client.truststore.password": "bigdata"
+ },
+ "ams-grafana-ini": {
+ "content": "\n"
+ },
+ "hadoop-metrics2.properties": {
+ "content": "# Licensed to the Apache Software Foundation (ASF) under one or more\r\n# contributor license agreements. See the NOTICE file distributed with\r\n# this work for additional information regarding copyright ownership.\r\n# The ASF licenses this file to You under the Apache License, Version 2.0\r\n# (the \"License\"); you may not use this file except in compliance with\r\n# the License. You may obtain a copy of the License at\r\n#\r\n# http:\/\/www.apache.org\/licenses\/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# syntax: [prefix].[source|sink|jmx].[instance].[options]\r\n# See package.html for org.apache.hadoop.metrics2 for details\r\n\r\n{% if has_gang
lia_server %}\r\n*.period=60\r\n\r\n*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31\r\n*.sink.ganglia.period=10\r\n\r\n# default for supportsparse is false\r\n*.sink.ganglia.supportsparse=true\r\n\r\n.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both\r\n.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40\r\n\r\n# Hook up to the server\r\nnamenode.sink.ganglia.servers={{ganglia_server_host}}:8661\r\ndatanode.sink.ganglia.servers={{ganglia_server_host}}:8659\r\njobtracker.sink.ganglia.servers={{ganglia_server_host}}:8662\r\ntasktracker.sink.ganglia.servers={{ganglia_server_host}}:8658\r\nmaptask.sink.ganglia.servers={{ganglia_server_host}}:8660\r\nreducetask.sink.ganglia.servers={{ganglia_server_host}}:8660\r\nresourcemanager.sink.ganglia.servers={{ganglia_server_host}}:8664\r\nnodemanager.sink.ganglia.servers={{ganglia_server_host}}:8657\r\nhistoryserver.sink.ganglia.servers={{ganglia_server_host}}:8666\r\njo
urnalnode.sink.ganglia.servers={{ganglia_server_host}}:8654\r\nnimbus.sink.ganglia.servers={{ganglia_server_host}}:8649\r\nsupervisor.sink.ganglia.servers={{ganglia_server_host}}:8650\r\n\r\nresourcemanager.sink.ganglia.tagsForPrefix.yarn=Queue\r\n\r\n{% endif %}\r\n\r\n{% if has_metric_collector %}\r\n\r\n*.period={{metrics_collection_period}}\r\n*.sink.timeline.plugin.urls=file:\/\/\/usr\/lib\/ambari-metrics-hadoop-sink\/ambari-metrics-hadoop-sink.jar\r\n*.sink.timeline.class=org.apache.hadoop.metrics2.sink.timeline.HadoopTimelineMetricsSink\r\n*.sink.timeline.period={{metrics_collection_period}}\r\n*.sink.timeline.sendInterval={{metrics_report_interval}}000\r\n*.sink.timeline.slave.host.name={{hostname}}\r\n*.sink.timeline.zookeeper.quorum={{zookeeper_quorum}}\r\n*.sink.timeline.protocol={{metric_collector_protocol}}\r\n*.sink.timeline.port={{metric_collector_port}}\r\n\r\n# HTTPS properties\r\n*.sink.timeline.truststore.path = {{metric_truststore_path}}\r\n*.sink.timeline.trusts
tore.type = {{metric_truststore_type}}\r\n*.sink.timeline.truststore.password = {{metric_truststore_password}}\r\n\r\ndatanode.sink.timeline.collector={{metric_collector_hosts}}\r\nnamenode.sink.timeline.collector={{metric_collector_hosts}}\r\nresourcemanager.sink.timeline.collector={{metric_collector_hosts}}\r\nnodemanager.sink.timeline.collector={{metric_collector_hosts}}\r\njobhistoryserver.sink.timeline.collector={{metric_collector_hosts}}\r\njournalnode.sink.timeline.collector={{metric_collector_hosts}}\r\nmaptask.sink.timeline.collector={{metric_collector_hosts}}\r\nreducetask.sink.timeline.collector={{metric_collector_hosts}}\r\napplicationhistoryserver.sink.timeline.collector={{metric_collector_hosts}}\r\n\r\nresourcemanager.sink.timeline.tagsForPrefix.yarn=Queue\r\n\r\n{% if is_nn_client_port_configured %}\r\n# Namenode rpc ports customization\r\nnamenode.sink.timeline.metric.rpc.client.port={{nn_rpc_client_port}}\r\n{% endif %}\r\n{% if is_nn_dn_port_configured %}\r\nnamen
ode.sink.timeline.metric.rpc.datanode.port={{nn_rpc_dn_port}}\r\n{% endif %}\r\n{% if is_nn_healthcheck_port_configured %}\r\nnamenode.sink.timeline.metric.rpc.healthcheck.port={{nn_rpc_healthcheck_port}}\r\n{% endif %}\r\n\r\n{% endif %}"
+ }
+ },
+ "configuration_attributes": {
+ "ams-hbase-env": {},
+ "ams-hbase-security-site": {},
+ "ams-log4j": {},
+ "ams-hbase-site": {},
+ "ams-hbase-policy": {},
+ "ams-hbase-log4j": {},
+ "ams-site": {},
+ "ams-ssl-server": {},
+ "ams-ssl-client": {},
+ "sqoop-site": {},
+ "yarn-site": {
+ "final": {
+ "yarn.nodemanager.disk-health-checker.min-healthy-disks": "true",
+ "yarn.nodemanager.container-executor.class": "true",
+ "yarn.nodemanager.local-dirs": "true"
+ }
+ },
+ "tez-site": {
+ "final": {
+ "tez.am.log.level": "true"
+ }
+ },
+ "capacity-scheduler": {
+ "final": {
+ "yarn.scheduler.capacity.node-locality-delay": "true"
+ }
+ },
+ "mapred-site": {
+ "final": {
+ "mapred.healthChecker.script.path": "true",
+ "mapreduce.jobtracker.staging.root.dir": "true"
+ }
+ },
+ "oozie-site": {
+ "final": {
+ "oozie.service.PurgeService.purge.interval": "true",
+ "oozie.service.CallableQueueService.queue.size": "true"
+ }
+ },
+ "webhcat-site": {
+ "final": {
+ "templeton.pig.path": "true",
+ "templeton.exec.timeout": "true",
+ "templeton.override.enabled": "true"
+ }
+ },
+ "hdfs-site": {
+ "final": {
+ "dfs.web.ugi": "true",
+ "dfs.support.append": "true",
+ "dfs.cluster.administrators": "true"
+ }
+ },
+ "hbase-site": {
+ "final": {
+ "hbase.client.keyvalue.maxsize": "true",
+ "hbase.hstore.compactionThreshold": "true",
+ "hbase.rootdir": "true"
+ }
+ },
+ "core-site": {
+ "final": {
+ "hadoop.proxyuser.hive.groups": "true",
+ "webinterface.private.actions": "true",
+ "hadoop.proxyuser.oozie.hosts": "true"
+ }
+ },
+ "hive-site": {
+ "final": {
+ "javax.jdo.option.ConnectionPassword": "true",
+ "javax.jdo.option.ConnectionDriverName": "true",
+ "hive.optimize.bucketmapjoin.sortedmerge": "true"
+ }
+ },
+ "hiveserver2-site": {
+ "final": {
+ "javax.jdo.option.ConnectionPassword": "true",
+ "javax.jdo.option.ConnectionDriverName": "true",
+ "hive.optimize.bucketmapjoin.sortedmerge": "true"
+ }
+ },
+ "hive-interactive-site": {
+ "final": {
+ "javax.jdo.option.ConnectionPassword": "true",
+ "javax.jdo.option.ConnectionDriverName": "true",
+ "hive.optimize.bucketmapjoin.sortedmerge": "true"
+ }
+ }
+ },
+ "configurationTags": {
+ "ams-hbase-env": {
+ "tag": "version1"
+ },
+ "ams-hbase-security-site": {
+ "tag": "version1"
+ },
+ "ams-hbase-site": {
+ "tag": "version1"
+ },
+ "ams-env": {
+ "tag": "version1"
+ },
+ "ams-site": {
+ "tag": "version1"
+ },
+ "ams-ssl-server": {
+ "tag": "version1"
+ },
+ "ams-ssl-client": {
+ "tag": "version1"
+ },
+ "ams-hbase-policy": {
+ "tag": "version1"
+ },
+ "ams-log4j": {
+ "tag": "version1"
+ },
+ "ams-hbase-log4j": {
+ "tag": "version1"
+ },
+ "capacity-scheduler": {
+ "tag": "version1"
+ },
+ "oozie-site": {
+ "tag": "version1"
+ },
+ "storm-site": {
+ "tag": "version1"
+ },
+ "webhcat-site": {
+ "tag": "version1"
+ },
+ "global": {
+ "tag": "version1"
+ },
+ "mapred-site": {
+ "tag": "version1"
+ },
+ "hdfs-site": {
+ "tag": "version1"
+ },
+ "hbase-site": {
+ "tag": "version1"
+ },
+ "core-site": {
+ "tag": "version1"
+ },
+ "yarn-site": {
+ "tag": "version1"
+ },
+ "hive-site": {
+ "tag": "version1"
+ },
+ "hive-interactive-site": {
+ "tag": "version1"
+ },
+ "hiveserver2-site": {
+ "tag": "version1"
+ },
+ "hdfs-log4j": {
+ "tag": "version1"
+ },
+ "yarn-log4j": {
+ "tag": "version1"
+ },
+ "hbase-log4j": {
+ "tag": "version1"
+ },
+ "hive-log4j": {
+ "tag": "version1"
+ },
+ "hive-exec-log4j": {
+ "tag": "version1"
+ },
+ "zookeeper-log4j": {
+ "tag": "version1"
+ },
+ "oozie-log4j": {
+ "tag": "version1"
+ },
+ "pig-log4j": {
+ "tag": "version1"
+ },
+ "pig-properties": {
+ "tag": "version1"
+ }
+ },
+ "commandId": "7-1",
+ "clusterHostInfo": {
+ "ambari_server_host": [
+ "c6401.ambari.apache.org"
+ ],
+ "snamenode_host": [
+ "c6402.ambari.apache.org"
+ ],
+ "nm_hosts": [
+ "c6402.ambari.apache.org"
+ ],
+ "drpc_server_hosts": [
+ "c6402.ambari.apache.org"
+ ],
+ "slave_hosts": [
+ "c6402.ambari.apache.org"
+ ],
+ "ganglia_server_host": [
+ "c6401.ambari.apache.org"
+ ],
+ "hive_server_host": [
+ "c6402.ambari.apache.org"
+ ],
+ "logviewer_server_hosts": [
+ "c6402.ambari.apache.org"
+ ],
+ "hive_metastore_host": [
+
<TRUNCATED>
[3/4] ambari git commit: AMBARI-20871. Unify repository file creation
(ncole)
Posted by nc...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
index 77e3bee..5206ea3 100644
--- a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
+++ b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
@@ -90,8 +90,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
@@ -157,8 +156,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
@@ -200,8 +198,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
@@ -263,8 +260,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': ["HDP-UTILS-2.2.0.1-885"]})
+ 'actual_version': VERSION_STUB})
self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
@@ -340,7 +336,6 @@ class TestInstallPackages(RMFTestCase):
self.assertEquals(put_structured_out_mock.call_args[0][0],
{'stack_id': 'HDP-2.2',
'installed_repository_version': VERSION_STUB,
- 'ambari_repositories': [],
'package_installation_result': 'FAIL'})
self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
@@ -397,8 +392,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
@@ -468,8 +462,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
@@ -535,8 +528,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertTrue(write_actual_version_to_history_file_mock.called)
self.assertEquals(write_actual_version_to_history_file_mock.call_args[0], (VERSION_STUB_WITHOUT_BUILD_NUMBER, VERSION_STUB))
@@ -571,8 +563,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -622,7 +613,7 @@ class TestInstallPackages(RMFTestCase):
self.assertTrue(put_structured_out_mock.called)
self.assertEquals(put_structured_out_mock.call_args_list[-1][0][0],
- { 'ambari_repositories': [],
+ {
'package_installation_result': 'FAIL',
'installed_repository_version': '2.2.0.1',
'stack_id': u'HDP-2.2'})
@@ -678,8 +669,7 @@ class TestInstallPackages(RMFTestCase):
self.assertEquals(put_structured_out_mock.call_args_list[-1][0][0],
{'package_installation_result': 'FAIL',
'stack_id': u'HDP-2.2',
- 'installed_repository_version': '2.2.0.1',
- 'ambari_repositories': []})
+ 'installed_repository_version': '2.2.0.1'})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -720,8 +710,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'FAIL',
'stack_id': u'HDP-2.2',
'installed_repository_version': VERSION_STUB,
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -762,8 +751,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB_WITHOUT_BUILD_NUMBER,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertTrue(write_actual_version_to_history_file_mock.called)
self.assertEquals(write_actual_version_to_history_file_mock.call_args[0], (VERSION_STUB_WITHOUT_BUILD_NUMBER, VERSION_STUB))
@@ -798,8 +786,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': VERSION_STUB_WITHOUT_BUILD_NUMBER,
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -840,8 +827,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': '2.2.0.1-500',
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertTrue(write_actual_version_to_history_file_mock.called)
self.assertEquals(write_actual_version_to_history_file_mock.call_args[0], ('2.2.0.1', VERSION_STUB))
@@ -876,8 +862,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'SUCCESS',
'installed_repository_version': '2.2.0.1-500',
'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -926,8 +911,7 @@ class TestInstallPackages(RMFTestCase):
self.assertEquals(put_structured_out_mock.call_args_list[-1][0][0],
{'package_installation_result': 'FAIL',
'stack_id': u'HDP-2.2',
- 'installed_repository_version': '2.2.0.1',
- 'ambari_repositories': []})
+ 'installed_repository_version': '2.2.0.1'})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -968,8 +952,7 @@ class TestInstallPackages(RMFTestCase):
{'package_installation_result': 'FAIL',
'stack_id': u'HDP-2.2',
'installed_repository_version': VERSION_STUB,
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertFalse(write_actual_version_to_history_file_mock.called)
@@ -1011,8 +994,7 @@ class TestInstallPackages(RMFTestCase):
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
'repository_version_id': '2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
self.assertTrue(write_actual_version_to_history_file_mock.called)
self.assertEquals(write_actual_version_to_history_file_mock.call_args[0], (VERSION_STUB_WITHOUT_BUILD_NUMBER, VERSION_STUB))
@@ -1049,7 +1031,65 @@ class TestInstallPackages(RMFTestCase):
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
'repository_version_id': '2',
- 'actual_version': VERSION_STUB,
- 'ambari_repositories': []})
+ 'actual_version': VERSION_STUB})
- self.assertFalse(write_actual_version_to_history_file_mock.called)
\ No newline at end of file
+ self.assertFalse(write_actual_version_to_history_file_mock.called)
+
+ @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
+ @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.script.Script.put_structured_out")
+ @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
+ @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
+ @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
+ def test_normal_flow_rhel_with_command_repo(self,
+ write_actual_version_to_history_file_mock,
+ read_actual_version_from_history_file_mock,
+ stack_versions_mock,
+ put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+ stack_versions_mock.side_effect = [
+ [], # before installation attempt
+ [VERSION_STUB]
+ ]
+ allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+ list_ambari_managed_repos_mock.return_value=[]
+ self.executeScript("scripts/install_packages.py",
+ classname="InstallPackages",
+ command="actionexecute",
+ config_file="install_packages_repository_file.json",
+ target=RMFTestCase.TARGET_CUSTOM_ACTIONS,
+ os_type=('Redhat', '6.4', 'Final'),
+ )
+ self.assertTrue(put_structured_out_mock.called)
+ self.assertEquals(put_structured_out_mock.call_args[0][0],
+ {'package_installation_result': 'SUCCESS',
+ 'installed_repository_version': VERSION_STUB,
+ 'stack_id': 'HDP-2.2',
+ 'actual_version': VERSION_STUB})
+
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20-repo-4',
+ base_url=u'http://repo1/HDP-UTILS/centos5/2.x/updates/2.2.0.0',
+ action=['create'],
+ components=[u'HDP-UTILS', 'main'],
+ repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
+ repo_file_name=u'ambari-hdp-4',
+ mirror_list=None,
+ append_to_file=False,
+ )
+ self.assertResourceCalled('Repository', 'HDP-2.2-repo-4',
+ base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
+ action=['create'],
+ components=[u'HDP', 'main'],
+ repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
+ repo_file_name=u'ambari-hdp-4',
+ mirror_list=None,
+ append_to_file=True,
+ )
+ self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertNoMoreResources()
http://git-wip-us.apache.org/repos/asf/ambari/blob/b6866249/ambari-server/src/test/python/custom_actions/configs/install_packages_repository_file.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/configs/install_packages_repository_file.json b/ambari-server/src/test/python/custom_actions/configs/install_packages_repository_file.json
new file mode 100644
index 0000000..761dced
--- /dev/null
+++ b/ambari-server/src/test/python/custom_actions/configs/install_packages_repository_file.json
@@ -0,0 +1,112 @@
+{
+ "configuration_attributes": {},
+ "roleCommand": "ACTIONEXECUTE",
+ "clusterName": "cc",
+ "hostname": "0b3.vm",
+ "passiveInfo": [],
+ "hostLevelParams": {
+ "agent_stack_retry_count": "5",
+ "agent_stack_retry_on_unavailability": "false",
+ "jdk_location": "http://0b3.vm:8080/resources/",
+ "ambari_db_rca_password": "mapred",
+ "java_home": "/usr/jdk64/jdk1.7.0_67",
+ "java_version": "8",
+ "ambari_db_rca_url": "jdbc:postgresql://0b3.vm/ambarirca",
+ "jce_name": "UnlimitedJCEPolicyJDK7.zip",
+ "oracle_jdbc_url": "http://0b3.vm:8080/resources//ojdbc6.jar",
+ "stack_version": "2.1",
+ "stack_name": "HDP",
+ "db_name": "ambari",
+ "ambari_db_rca_driver": "org.postgresql.Driver",
+ "jdk_name": "jdk-7u67-linux-x64.tar.gz",
+ "ambari_db_rca_username": "mapred",
+ "db_driver_filename": "mysql-connector-java.jar",
+ "mysql_jdbc_url": "http://0b3.vm:8080/resources//mysql-connector-java.jar"
+ },
+ "commandType": "EXECUTION_COMMAND",
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 4,
+ "repoVersion": "2.2.0.1-885",
+ "repositories": [
+ {
+ "repoName": "HDP-UTILS",
+ "baseUrl": "http://repo1/HDP-UTILS/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-UTILS-1.1.0.20-repo-4"
+ },
+ {
+ "repoName": "HDP",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-2.2-repo-4"
+ }
+ ]
+ },
+ "roleParams": {
+ "stack_id": "HDP-2.2",
+ "repository_version": "2.2.0.1-885",
+ "package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]"
+ },
+ "serviceName": "null",
+ "role": "install_packages",
+ "forceRefreshConfigTags": [],
+ "taskId": 61,
+ "public_hostname": "0b3.vm",
+ "configurations": {
+ "cluster-env": {
+ "repo_suse_rhel_template": "[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0",
+ "repo_ubuntu_template": "{{package_type}} {{base_url}} {{components}}"
+ }
+ },
+ "commandParams": {
+ "command_timeout": "60",
+ "script_type": "PYTHON",
+ "repository_version": "2.2.0.1-885",
+ "package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]",
+ "script": "install_packages.py"
+ },
+ "commandId": "14-1",
+ "clusterHostInfo": {
+ "snamenode_host": [
+ "0b3.vm"
+ ],
+ "nm_hosts": [
+ "0b3.vm"
+ ],
+ "app_timeline_server_hosts": [
+ "0b3.vm"
+ ],
+ "all_ping_ports": [
+ "8670"
+ ],
+ "rm_host": [
+ "0b3.vm"
+ ],
+ "all_hosts": [
+ "0b3.vm"
+ ],
+ "slave_hosts": [
+ "0b3.vm"
+ ],
+ "namenode_host": [
+ "0b3.vm"
+ ],
+ "ambari_server_host": [
+ "0b3.vm"
+ ],
+ "zookeeper_hosts": [
+ "0b3.vm"
+ ],
+ "hs_host": [
+ "0b3.vm"
+ ]
+ },
+ "configurations": {
+ "cluster-env": {
+ "repo_suse_rhel_template": "[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0",
+ "repo_ubuntu_template": "{{package_type}} {{base_url}} {{components}}"
+ },
+ "core-site": {
+ "io.compression.codecs": "com.hadoop.compression.lzo"
+ }
+ }
+}