def get_cluster_spec(self, cluster, user_inputs, scaled_groups=None, cluster_template=None): if cluster_template: cluster_spec = cs.ClusterSpec(cluster_template) else: if scaled_groups: for ng in cluster.node_groups: ng_id = ng['id'] if (ng_id in scaled_groups and ng['count'] > scaled_groups[ng_id]): raise ex.ClusterCannotBeScaled( cluster.name, _('The HDP plugin does not support ' 'the decommissioning of nodes ' 'for HDP version 1.3.2')) cluster_spec = self.get_default_cluster_configuration() cluster_spec.create_operational_config(cluster, user_inputs, scaled_groups) cs.validate_number_of_datanodes(cluster, scaled_groups, self.get_config_items()) return cluster_spec
def test__get_ambari_info(self, patched): cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_1_3_2/resources/' 'default-cluster.template') test_host = base.TestServer('host1', 'test-master', '11111', 3, '111.11.1111', '222.11.1111') node_group = base.TestNodeGroup('ng1', [test_host], [ "AMBARI_SERVER", "NAMENODE", "DATANODE", "JOBTRACKER", "TASKTRACKER" ]) cluster = base.TestCluster([node_group]) cluster_config = cs.ClusterSpec(cluster_config_file) cluster_config.create_operational_config(cluster, []) plugin = ap.AmbariPlugin() # change port cluster_config.configurations['ambari']['server.port'] = '9000' ambari_info = plugin.get_ambari_info(cluster_config) self.assertEqual('9000', ambari_info.port) # remove port del cluster_config.configurations['ambari']['server.port'] ambari_info = plugin.get_ambari_info(cluster_config) self.assertEqual('8080', ambari_info.port)
def test__set_ambari_credentials__admin_only(self, client): client.side_effect = self._get_test_request self.requests = [] plugin = ap.AmbariPlugin() cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_1_3_2/resources/' 'default-cluster.template') cluster_spec = cs.ClusterSpec(cluster_config_file) ambari_info = ap.AmbariInfo(TestHost('111.11.1111'), '8080', 'admin', 'old-pwd') plugin._set_ambari_credentials(cluster_spec, ambari_info, '1.3.2') self.assertEqual(1, len(self.requests)) request = self.requests[0] self.assertEqual('put', request.method) self.assertEqual('http://111.11.1111:8080/api/v1/users/admin', request.url) self.assertEqual( '{"Users":{"roles":"admin","password":"******",' '"old_password":"******"} }', request.data) self.assertEqual(('admin', 'old-pwd'), request.auth) self.assertEqual('admin', ambari_info.user) self.assertEqual('admin', ambari_info.password)
def create_clusterspec(hdp_version='1.3.2'): version_suffix = hdp_version.replace('.', '_') cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_{0}/resources/' 'default-cluster.template'.format(version_suffix)) return cs.ClusterSpec(cluster_config_file, version=hdp_version)
def get_cluster_spec(self, cluster, user_inputs, scaled_groups=None, cluster_template=None): if cluster_template: cluster_spec = cs.ClusterSpec(cluster_template) else: cluster_spec = self.get_default_cluster_configuration() cluster_spec.create_operational_config( cluster, user_inputs, scaled_groups) return cluster_spec
def test_convert(self): plugin = ap.AmbariPlugin() cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_1_3_2/resources/' 'default-cluster.template') cluster = plugin.convert(cluster_config_file, 'ambari', '1.3.2', 'test-plugin', create_cluster_template) normalized_config = cs.ClusterSpec(cluster_config_file).normalize() self.assertEqual(normalized_config.hadoop_version, cluster.hadoop_version) self.assertEqual(len(normalized_config.node_groups), len(cluster.node_groups))
def test_update_ambari_info_credentials(self): plugin = ap.AmbariPlugin() cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_1_3_2/resources/' 'default-cluster.template') cluster_spec = cs.ClusterSpec(cluster_config_file) ambari_info = ap.AmbariInfo(TestHost('111.11.1111'), '8080', 'admin', 'old-pwd') plugin._update_ambari_info_credentials(cluster_spec, ambari_info) self.assertEqual('admin', ambari_info.user) self.assertEqual('admin', ambari_info.password)
def test__set_ambari_credentials__new_user_with_admin(self, client): self.requests = [] plugin = ap.AmbariPlugin() client.side_effect = self._get_test_request cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_1_3_2/resources/' 'default-cluster.template') cluster_spec = cs.ClusterSpec(cluster_config_file) for service in cluster_spec.services: if service.name == 'AMBARI': new_user = cs.User('test', 'test_pw', ['user']) service.users.append(new_user) ambari_info = ap.AmbariInfo(TestHost('111.11.1111'), '8080', 'admin', 'old-pwd') plugin._set_ambari_credentials(cluster_spec, ambari_info, '1.3.2') self.assertEqual(2, len(self.requests)) request = self.requests[0] self.assertEqual('put', request.method) self.assertEqual('http://111.11.1111:8080/api/v1/users/admin', request.url) self.assertEqual( '{"Users":{"roles":"admin","password":"******",' '"old_password":"******"} }', request.data) self.assertEqual(('admin', 'old-pwd'), request.auth) request = self.requests[1] self.assertEqual('post', request.method) self.assertEqual('http://111.11.1111:8080/api/v1/users/test', request.url) self.assertEqual('{"Users":{"password":"******","roles":"user"} }', request.data) self.assertEqual(('admin', 'admin'), request.auth) self.assertEqual('admin', ambari_info.user) self.assertEqual('admin', ambari_info.password)
def test__set_ambari_credentials__new_user_no_admin(self, client): self.requests = [] plugin = ap.AmbariPlugin() client.side_effect = self._get_test_request cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_2_0_6/resources/' 'default-cluster.template') cluster_spec = cs.ClusterSpec(cluster_config_file) for service in cluster_spec.services: if service.name == 'AMBARI': user = service.users[0] user.name = 'test' user.password = '******' ambari_info = ap.AmbariInfo(TestHost('111.11.1111'), '8080', 'admin', 'old-pwd') plugin._set_ambari_credentials(cluster_spec, ambari_info, '2.0.6') self.assertEqual(2, len(self.requests)) request = self.requests[0] self.assertEqual('post', request.method) self.assertEqual('http://111.11.1111:8080/api/v1/users/test', request.url) self.assertEqual( '{"Users":{"password":"******","roles":"admin"' '} }', request.data) self.assertEqual(('admin', 'old-pwd'), request.auth) request = self.requests[1] self.assertEqual('delete', request.method) self.assertEqual('http://111.11.1111:8080/api/v1/users/admin', request.url) self.assertIsNone(request.data) self.assertEqual(('test', 'test_pw'), request.auth) self.assertEqual('test', ambari_info.user) self.assertEqual('test_pw', ambari_info.password)
def test__set_ambari_credentials__no_admin_user(self, client): self.requests = [] plugin = ap.AmbariPlugin() client.side_effect = self._get_test_request cluster_config_file = pkg.resource_string( version.version_info.package, 'plugins/hdp/versions/version_1_3_2/resources/' 'default-cluster.template') cluster_spec = cs.ClusterSpec(cluster_config_file) for service in cluster_spec.services: if service.name == 'AMBARI': user = service.users[0] user.name = 'test' user.password = '******' user.groups = ['user'] ambari_info = ap.AmbariInfo(TestHost('111.11.1111'), '8080', 'admin', 'old-pwd') self.assertRaises( ex.HadoopProvisionError, plugin._set_ambari_credentials(cluster_spec, ambari_info, '1.3.2'))
def get_default_cluster_configuration(self): return cs.ClusterSpec(self._get_default_cluster_template())