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 2018/05/01 19:03:04 UTC
[ambari] branch branch-feature-AMBARI-14714 updated: [AMBARI-23726]
Mpack Installation Response is not Updating State
This is an automated email from the ASF dual-hosted git repository.
ncole pushed a commit to branch branch-feature-AMBARI-14714
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/branch-feature-AMBARI-14714 by this push:
new 6389ecf [AMBARI-23726] Mpack Installation Response is not Updating State
6389ecf is described below
commit 6389ecf05d7e0130bcf91ff0273452891dc2d302
Author: Nate Cole <nc...@hortonworks.com>
AuthorDate: Tue May 1 14:15:18 2018 -0400
[AMBARI-23726] Mpack Installation Response is not Updating State
---
.../main/java/org/apache/ambari/server/Role.java | 1 -
.../actionmanager/ExecutionCommandWrapper.java | 10 +-
.../UpgradePlanInstallResourceProvider.java | 2 +-
.../upgrade/MpackInstallStateListener.java | 4 +-
.../publishers/CommandReportEventPublisher.java | 9 +-
.../custom_actions/scripts/mpack_packages.py | 5 +-
.../topology/ClusterDeployWithStartOnlyTest.java | 2 -
.../custom_actions/configs/mpack_packages.json | 227 +++++++++++++++++++++
.../python/custom_actions/test_mpack_install.py | 191 +++++++++++++++++
9 files changed, 432 insertions(+), 19 deletions(-)
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/Role.java b/ambari-server/src/main/java/org/apache/ambari/server/Role.java
index c384e2e..377b7de 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/Role.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/Role.java
@@ -122,7 +122,6 @@ public class Role {
public static final Role LOGSEARCH_SERVER = valueOf("LOGSEARCH_SERVER");
public static final Role INFRA_SOLR = valueOf("INFRA_SOLR");
public static final Role LOGSEARCH_LOGFEEDER = valueOf("LOGSEARCH_LOGFEEDER");
- public static final Role INSTALL_PACKAGES = valueOf("install_packages");
public static final Role UPDATE_REPO = valueOf("update_repo");
private String name = null;
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
index 3bf8583..cc021c3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
@@ -311,10 +311,12 @@ public class ExecutionCommandWrapper {
executionCommand.setComponentVersions(cluster);
} catch (ServiceNotFoundException serviceNotFoundException) {
// it's possible that there are commands specified for a service where
- // the service doesn't exist yet
- LOG.warn(
- "The service {} is not installed in the cluster. No repository version will be sent for this command.",
- serviceName);
+ // the service doesn't exist yet. Ignore nulls to avoid flooding the log.
+ if (null != serviceName) {
+ LOG.warn(
+ "The service {} is not installed in the cluster. No repository version will be sent for this command.",
+ serviceName);
+ }
} catch (AmbariException e) {
throw new RuntimeException(e);
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradePlanInstallResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradePlanInstallResourceProvider.java
index 370cb82..8a5addf 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradePlanInstallResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UpgradePlanInstallResourceProvider.java
@@ -110,7 +110,7 @@ public class UpgradePlanInstallResourceProvider extends AbstractControllerResour
UPGRADE_PLAN_INSTALL_ID,
UPGRADE_PLAN_INSTALL_CLUSTER_NAME);
- protected static final String MPACK_PACKAGES_ACTION = "mpack_packages";
+ public static final String MPACK_PACKAGES_ACTION = "mpack_packages";
protected static final String INSTALL_PACKAGES = "Install Version";
/**
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/MpackInstallStateListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/MpackInstallStateListener.java
index 8175796..4e4de67 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/MpackInstallStateListener.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/MpackInstallStateListener.java
@@ -25,10 +25,10 @@ import javax.annotation.Nullable;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.EagerSingleton;
-import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.controller.internal.UpgradePlanInstallResourceProvider;
import org.apache.ambari.server.events.CommandReportReceivedEvent;
import org.apache.ambari.server.events.HostsAddedEvent;
import org.apache.ambari.server.events.HostsRemovedEvent;
@@ -215,7 +215,7 @@ public class MpackInstallStateListener {
String role = event.getRole();
String roleCommand = commandReport.getRoleCommand();
- if (!StringUtils.equals(role, Role.INSTALL_PACKAGES.name())
+ if (!StringUtils.equals(role, UpgradePlanInstallResourceProvider.MPACK_PACKAGES_ACTION)
&& !StringUtils.equals(roleCommand, RoleCommand.INSTALL.name())) {
return;
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/CommandReportEventPublisher.java b/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/CommandReportEventPublisher.java
index 68e7f1f..b3e80ac 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/CommandReportEventPublisher.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/publishers/CommandReportEventPublisher.java
@@ -19,9 +19,9 @@ package org.apache.ambari.server.events.publishers;
import java.util.concurrent.Executors;
-import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.controller.internal.UpgradePlanInstallResourceProvider;
import org.apache.ambari.server.events.CommandReportReceivedEvent;
import org.apache.commons.lang.StringUtils;
@@ -44,11 +44,6 @@ public class CommandReportEventPublisher {
private final EventBus m_eventBus;
/**
- * The string representation of {@link Role#INSTALL_PACKAGES}
- */
- private final String ROLE_INSTALL_PACKAGES = Role.INSTALL_PACKAGES.name();
-
- /**
* The string representation of {@code RoleCommand#INSTALL}
*/
private final String ROLE_COMMAND_INSTALL = RoleCommand.INSTALL.name();
@@ -72,7 +67,7 @@ public class CommandReportEventPublisher {
*/
public void publish(CommandReportReceivedEvent event) {
CommandReport commandReport = event.getCommandReport();
- if (!StringUtils.equals(event.getRole(), ROLE_INSTALL_PACKAGES)
+ if (!StringUtils.equals(event.getRole(), UpgradePlanInstallResourceProvider.MPACK_PACKAGES_ACTION)
&& !StringUtils.equals(commandReport.getRoleCommand(), ROLE_COMMAND_INSTALL)) {
return;
}
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/mpack_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/mpack_packages.py
index 79a24ea..f956075 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/mpack_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/mpack_packages.py
@@ -86,7 +86,7 @@ class MpackPackages(Script):
# Build structured output with initial values
self.structured_output = {
'package_installation_result': 'FAIL',
- 'mpack_id': command_repository.mpack_id
+ 'mpackId': command_repository.mpack_id
}
self.put_structured_out(self.structured_output)
@@ -106,6 +106,7 @@ class MpackPackages(Script):
try:
ret_code = self.install_packages(package_list)
+
if ret_code == 0:
self.structured_output['package_installation_result'] = 'SUCCESS'
self.put_structured_out(self.structured_output)
@@ -134,7 +135,6 @@ class MpackPackages(Script):
# Install packages
packages_were_checked = False
packages_installed_before = []
-# stack_selector_package = stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME)
try:
repositories = config['repositoryFile']['repositories']
@@ -153,6 +153,7 @@ class MpackPackages(Script):
available_packages_in_repos = self.repo_mgr.get_available_packages_in_repos(command_repos)
except Exception:
available_packages_in_repos = []
+
for package in filtered_package_list:
name = self.get_package_from_available(package['name'], available_packages_in_repos)
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
index 791e3ac..a49f6d2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
@@ -383,12 +383,10 @@ public class ClusterDeployWithStartOnlyTest extends EasyMockSupport {
expect(hostRoleCommandInstallComponent3.getTaskId()).andReturn(1L).atLeastOnce();
expect(hostRoleCommandInstallComponent3.getRoleCommand()).andReturn(RoleCommand.INSTALL).atLeastOnce();
- expect(hostRoleCommandInstallComponent3.getRole()).andReturn(Role.INSTALL_PACKAGES).atLeastOnce();
expect(hostRoleCommandInstallComponent3.getStatus()).andReturn(HostRoleStatus.COMPLETED).atLeastOnce();
expect(hostRoleCommandInstallComponent4.getTaskId()).andReturn(2L).atLeastOnce();
expect(hostRoleCommandInstallComponent4.getRoleCommand()).andReturn(RoleCommand.INSTALL).atLeastOnce();
- expect(hostRoleCommandInstallComponent4.getRole()).andReturn(Role.INSTALL_PACKAGES).atLeastOnce();
expect(hostRoleCommandInstallComponent4.getStatus()).andReturn(HostRoleStatus.COMPLETED).atLeastOnce();
expect(ambariContext.createAmbariTask(anyLong(), anyLong(), eq("component1"),
diff --git a/ambari-server/src/test/python/custom_actions/configs/mpack_packages.json b/ambari-server/src/test/python/custom_actions/configs/mpack_packages.json
new file mode 100644
index 0000000..9332f46
--- /dev/null
+++ b/ambari-server/src/test/python/custom_actions/configs/mpack_packages.json
@@ -0,0 +1,227 @@
+{
+ "commandParams": {
+ "ambari_java_version": "8",
+ "script": "mpack_packages.py",
+ "ambari_jdk_name": "jdk-8u60-linux-x64.tar.gz",
+ "ambari_java_home": "/usr/jdk64/jdk1.8.0_60",
+ "command_timeout": "1800",
+ "ambari_jce_name": "jce_policy-8.zip",
+ "script_type": "PYTHON"
+ },
+ "localComponents": [
+ "ZOOKEEPER_CLIENT",
+ "ZOOKEEPER_SERVER"
+ ],
+ "clusterId": "2",
+ "mpackId": 1,
+ "agentLevelParams": {
+ "public_hostname": null,
+ "hostname": "c7401.ambari.apache.org",
+ "agentConfigParams": {
+ "agent": {
+ "parallel_execution": 0,
+ "use_system_proxy_settings": true
+ }
+ },
+ "agentCacheDir": "/var/lib/ambari-agent/cache"
+ },
+ "commandId": "15-1",
+ "repositoryFile": {
+ "repositories": [
+ {
+ "mirrorsList": null,
+ "ambariManaged": true,
+ "baseUrl": "http://repos.ambari.apache.org/hdp/HDP-UTILS-1.1.0.21",
+ "repoName": "HDP-UTILS",
+ "components": null,
+ "distribution": null,
+ "repoId": "HDP-UTILS-1.1.0.21-repo-hdpcore"
+ },
+ {
+ "mirrorsList": null,
+ "ambariManaged": true,
+ "baseUrl": "http://repos.ambari.apache.org/hdp/HDPCORE-1.0.0-b251",
+ "repoName": "HDPCORE",
+ "components": null,
+ "distribution": null,
+ "repoId": "HDPCORE-1.0.0-b251-repo-hdpcore"
+ }
+ ],
+ "feature": {
+ "preInstalled": false,
+ "scoped": true
+ },
+ "mpackId": 2,
+ "mpackVersion": "1.0.0-b251",
+ "repoFileName": "ambari-hdpcore-2",
+ "mpackName": "HDPCORE"
+ },
+ "clusterLevelParams": {
+ "not_managed_hdfs_path_list": "[]",
+ "hooks_folder": "stack-hooks",
+ "stack_name": "HDPCORE",
+ "group_list": "[\"hadoop\"]",
+ "user_groups": "{\"zookeeper\":[\"hadoop\"],\"ambari-qa\":[\"hadoop\"]}",
+ "stack_version": "1.0.0-b250",
+ "user_list": "[\"zookeeper\",\"ambari-qa\"]"
+ },
+ "serviceName": "null",
+ "role": "mpack_packages",
+ "requestId": 15,
+ "clusterHostInfo": {
+ "zookeeper_server_hosts": [
+ "c7401.ambari.apache.org",
+ "c7402.ambari.apache.org",
+ "c7403.ambari.apache.org"
+ ],
+ "zookeeper_client_hosts": [
+ "c7401.ambari.apache.org",
+ "c7402.ambari.apache.org",
+ "c7403.ambari.apache.org"
+ ]
+ },
+ "clusterSettings": {
+ "security_enabled": "false",
+ "hide_yarn_memory_widget": "false",
+ "enable_external_ranger": "false",
+ "override_uid": "true",
+ "fetch_nonlocal_groups": "true",
+ "one_dir_per_partition": "false",
+ "recovery_max_count": "6",
+ "repo_ubuntu_template": "{{package_type}} {{base_url}} {{components}}",
+ "ignore_groupsusers_create": "false",
+ "alerts_repeat_tolerance": "1",
+ "namenode_rolling_restart_timeout": "4200",
+ "kerberos_domain": "EXAMPLE.COM",
+ "manage_dirs_on_root": "true",
+ "recovery_lifetime_max_count": "1024",
+ "recovery_type": "AUTO_START",
+ "smokeuser": "ambari-qa",
+ "ignore_bad_mounts": "false",
+ "recovery_window_in_minutes": "60",
+ "sysprep_skip_setup_jce": "false",
+ "user_group": "hadoop",
+ "namenode_rolling_restart_safemode_exit_timeout": "3600",
+ "recovery_retry_interval": "5",
+ "sysprep_skip_copy_oozie_share_lib_to_hdfs": "false",
+ "sysprep_skip_copy_tarballs_hdfs": "false",
+ "manage_hive_fsroot": "true",
+ "service_check_type": "full",
+ "agent_mounts_ignore_list": "",
+ "sysprep_skip_create_users_and_groups": "false",
+ "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\n",
+ "smokeuser_keytab": "/etc/security/keytabs/smokeuser.headless.keytab",
+ "managed_hdfs_resource_property_names": "",
+ "recovery_enabled": "true",
+ "sysprep_skip_copy_fast_jar_hdfs": "false"
+ },
+ "clusterName": "c1",
+ "commandType": "EXECUTION_COMMAND",
+ "taskId": 105,
+ "requiredConfigTimestamp": 1524850781664,
+ "ambariLevelParams": {
+ "jdk_location": "http://hw10553.home:8080/resources/",
+ "agent_stack_retry_count": "5",
+ "db_driver_filename": "mysql-connector-java.jar",
+ "agent_stack_retry_on_unavailability": "false",
+ "jce_name": "jce_policy-8.zip",
+ "java_version": "8",
+ "oracle_jdbc_url": "http://hw10553.home:8080/resources//ojdbc6.jar",
+ "ambari_server_host": "hw10553.home",
+ "ambari_server_port": "8080",
+ "host_sys_prepped": "false",
+ "db_name": "ambari",
+ "ambari_server_use_ssl": "false",
+ "gpl_license_accepted": "true",
+ "jdk_name": "jdk-8u60-linux-x64.tar.gz",
+ "java_home": "/usr/jdk64/jdk1.8.0_60",
+ "mysql_jdbc_url": "http://hw10553.home:8080/resources//mysql-connector-java.jar"
+ },
+ "roleCommand": "ACTIONEXECUTE",
+ "configurationAttributes": {
+ "zoo.cfg": {},
+ "zookeeper-env": {},
+ "zookeeper-log4j": {},
+ "cluster-env": {}
+ },
+ "serviceGroupName": "HDPCORE",
+ "hostLevelParams": {
+ "recoveryConfig": {
+ "retryGap": "5",
+ "windowInMinutes": "60",
+ "maxLifetimeCount": "12",
+ "components": null,
+ "maxCount": "6",
+ "type": "AUTO_START"
+ },
+ "hostRepositories": {
+ "componentRepos": {
+ "ZOOKEEPER_SERVER": "HDP-UTILS",
+ "ZOOKEEPER_CLIENT": "HDP-UTILS"
+ },
+ "commandRepos": {
+ "HDP-UTILS": {
+ "repositories": [
+ {
+ "mirrorsList": null,
+ "ambariManaged": true,
+ "baseUrl": "http://repos.ambari.apache.org/hdp/HDP-UTILS-1.1.0.21",
+ "repoName": "HDP-UTILS",
+ "components": null,
+ "distribution": null,
+ "repoId": "HDP-UTILS-1.1.0.21-repo-hdpcore"
+ },
+ {
+ "mirrorsList": null,
+ "ambariManaged": true,
+ "baseUrl": "http://repos.ambari.apache.org/hdp/HDPCORE-1.0.0-b250",
+ "repoName": "HDPCORE",
+ "components": null,
+ "distribution": null,
+ "repoId": "HDPCORE-1.0.0-b250-repo-hdpcore"
+ }
+ ],
+ "feature": {
+ "preInstalled": false,
+ "scoped": true
+ },
+ "mpackId": 1,
+ "mpackVersion": "1.0.0-b250",
+ "repoFileName": "ambari-hdpcore-1",
+ "mpackName": "HDPCORE"
+ }
+ }
+ }
+ },
+ "roleParams": {
+ "package_list": "[{\"name\":\"hdpcore_1_0_0_b251\",\"condition\":\"\",\"skipUpgrade\":false}]"
+ },
+ "configurations": {
+ "zoo.cfg": {
+ "clientPort": "2181",
+ "autopurge.purgeInterval": "24",
+ "syncLimit": "5",
+ "dataDir": "/hadoop/zookeeper",
+ "initLimit": "10",
+ "tickTime": "3000",
+ "autopurge.snapRetainCount": "30"
+ },
+ "zookeeper-env": {
+ "content": "\nexport JAVA_HOME={{java64_home}}\nexport ZOOKEEPER_HOME={{zk_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. [...]
+ "zk_log_dir": "/var/log/zookeeper",
+ "zk_server_heapsize": "1024m",
+ "zk_pid_dir": "/var/run/zookeeper",
+ "zk_user": "zookeeper"
+ },
+ "zookeeper-log4j": {
+ "content": "\n#\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership. The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/license [...]
+ "zookeeper_log_max_backup_size": "10",
+ "zookeeper_log_number_of_backup_files": "10"
+ },
+ "cluster-env": {
+ "commands_to_retry": "INSTALL,START",
+ "command_retry_max_time_in_sec": "600",
+ "command_retry_enabled": "true"
+ }
+ }
+}
\ No newline at end of file
diff --git a/ambari-server/src/test/python/custom_actions/test_mpack_install.py b/ambari-server/src/test/python/custom_actions/test_mpack_install.py
new file mode 100644
index 0000000..2ec7095
--- /dev/null
+++ b/ambari-server/src/test/python/custom_actions/test_mpack_install.py
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+
+'''
+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.
+'''
+import json
+import os
+from ambari_commons import subprocess32
+import select
+
+from stacks.utils.RMFTestCase import *
+from mock.mock import patch, MagicMock
+from resource_management.core.base import Resource
+from resource_management.core.exceptions import Fail
+from resource_management.libraries.script import Script
+
+OLD_VERSION_STUB = '2.1.0.0-400'
+VERSION_STUB_WITHOUT_BUILD_NUMBER = '2.2.0.1'
+VERSION_STUB = '2.2.0.1-885'
+
+subproc_mock = MagicMock()
+subproc_mock.return_value = MagicMock()
+subproc_stdout = MagicMock()
+subproc_mock.return_value.stdout = subproc_stdout
+
+@patch.object(os, "read", new=MagicMock(return_value=None))
+@patch.object(select, "select", new=MagicMock(return_value=([subproc_stdout], None, None)))
+@patch("pty.openpty", new = MagicMock(return_value=(1,5)))
+@patch.object(os, "close", new=MagicMock())
+@patch.object(subprocess32, "Popen", new=subproc_mock)
+class TestMpackPackages(RMFTestCase):
+ _install_failed = False
+ def setUp(self):
+ self.maxDiff = None
+
+ @staticmethod
+ def _add_packages(*args):
+ return [
+ ["pkg1", "1.0", "repo"],
+ ["pkg2", "2.0", "repo2"]
+ ]
+
+ @staticmethod
+ def _add_packages_available(*args):
+ return [
+ ["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"],
+ ["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"],
+ ["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"]
+ ]
+
+ @staticmethod
+ def _add_packages_lookUpYum(*args):
+ return TestMpackPackages._add_packages_available(*args)
+
+
+ @staticmethod
+ def _add_packages_with_fail():
+ arg = []
+ arg.append(["pkg1_2_2_0_1_885_pack", "1.0", "repo"])
+ arg.append(["pkg2_2_2_0_1_885_pack2", "2.0", "repo2"])
+ if TestMpackPackages._install_failed:
+ arg.append(["should_not_be_removed_pkg1", "1.0", "repo"])
+ arg.append(["hadoop_2_2_0_1_885fake_pkg", "1.0", "repo"])
+ arg.append(["snappy__2_2_0_1_885_fake_pkg", "3.0", "repo2"])
+ arg.append(["ubuntu-like-2-2-0-1-885-fake-pkg", "3.0", "repo2"])
+ arg.append(["should_not_be_removed_pkg2", "3.0", "repo2"])
+
+ return arg
+
+ @staticmethod
+ def _new_with_exception(cls, name, env=None, provider=None, **kwargs):
+ if (name != "snappy-devel"):
+ return Resource.__new__(cls, name, env, provider, **kwargs)
+ else:
+ TestMpackPackages._install_failed = True
+ raise Exception()
+
+ @staticmethod
+ def side_effect(*args):
+ TestMpackPackages._install_failed = True
+ raise Exception()
+
+ @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
+ @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+ @patch("ambari_commons.repo_manager.ManagerFactory.get")
+ @patch("resource_management.core.resources.packaging.Package.__new__")
+ @patch("resource_management.libraries.script.Script.put_structured_out")
+ @patch("ambari_commons.shell.launch_subprocess")
+ def test_fail(self, subprocess_with_timeout, put_structured_out_mock, Package__mock, get_provider,
+ is_redhat_family_mock, list_ambari_managed_repos_mock):
+ from ambari_commons.os_check import OSConst
+ from ambari_commons.repo_manager import ManagerFactory
+
+ pkg_manager = ManagerFactory.get_new_instance(OSConst.REDHAT_FAMILY)
+
+ with patch.object(pkg_manager, "all_packages") as all_packages, \
+ patch.object(pkg_manager, "available_packages") as available_packages, \
+ patch.object(pkg_manager, "installed_packages") as installed_packages, \
+ patch.object(pkg_manager, "check_uncompleted_transactions") as check_uncompleted_transactions, \
+ patch.object(pkg_manager, "upgrade_package") as upgrade_package:
+ all_packages.side_effect = TestMpackPackages._add_packages_with_fail
+ available_packages.side_effect = TestMpackPackages._add_packages_with_fail
+ installed_packages.side_effect = TestMpackPackages._add_packages_with_fail
+ upgrade_package.side_effect = TestMpackPackages.side_effect
+ check_uncompleted_transactions.return_value = False
+
+ get_provider.return_value = pkg_manager
+
+ is_redhat_family_mock.return_value = True
+ list_ambari_managed_repos_mock.return_value = []
+
+ Package__mock.side_effect = TestMpackPackages.side_effect
+ self.assertRaises(Fail, self.executeScript, "scripts/mpack_packages.py",
+ classname="MpackPackages",
+ command="actionexecute",
+ config_file="mpack_packages.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],
+ {'mpackId': 2,
+ 'package_installation_result': 'FAIL'})
+
+ self.assertNoMoreResources()
+
+ TestMpackPackages._install_failed = False
+
+ @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
+ @patch("ambari_commons.repo_manager.ManagerFactory.get")
+ @patch("resource_management.libraries.script.Script.put_structured_out")
+ @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
+ @patch("ambari_commons.shell.launch_subprocess")
+ def test_normal_flow_rhel(self,
+ subprocess_with_timeout,
+ stack_versions_mock,
+ put_structured_out_mock,
+ get_provider,
+ list_ambari_managed_repos_mock):
+ stack_versions_mock.side_effect = [
+ [], # before installation attempt
+ [VERSION_STUB]
+ ]
+
+ from ambari_commons.os_check import OSConst
+ from ambari_commons.repo_manager import ManagerFactory
+
+ pkg_manager = ManagerFactory.get_new_instance(OSConst.REDHAT_FAMILY)
+
+ with patch.object(pkg_manager, "all_packages") as all_packages, \
+ patch.object(pkg_manager, "available_packages") as available_packages, \
+ patch.object(pkg_manager, "installed_packages") as installed_packages, \
+ patch.object(pkg_manager, "check_uncompleted_transactions") as check_uncompleted_transactions:
+ all_packages.side_effect = TestMpackPackages._add_packages_available
+ available_packages.side_effect = TestMpackPackages._add_packages_available
+ installed_packages.side_effect = TestMpackPackages._add_packages_available
+ check_uncompleted_transactions.return_value = False
+
+ get_provider.return_value = pkg_manager
+ list_ambari_managed_repos_mock.return_value=[]
+ repo_file_name = 'ambari-hdp-4'
+
+ self.executeScript("scripts/mpack_packages.py",
+ classname="MpackPackages",
+ command="actionexecute",
+ config_file="mpack_packages.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',
+ 'mpackId': 2
+ })
+
+ self.assertNoMoreResources()
+
--
To stop receiving notification emails like this one, please contact
ncole@apache.org.