Bladeren bron

AMBARI-8879: Common Services: Refactor HDP-2.2 Kerberos service (Jayush Luniya)

Jayush Luniya 10 jaren geleden
bovenliggende
commit
0d7976bc3d
15 gewijzigde bestanden met toevoegingen van 187 en 124 verwijderingen
  1. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/configuration/krb5-conf.xml
  2. 129 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml
  3. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py
  4. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py
  5. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py
  6. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py
  7. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/service_check.py
  8. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/utils.py
  9. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/templates/kadm5_acl.j2
  10. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/templates/kdc_conf.j2
  11. 0 0
      ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/templates/krb5_conf.j2
  12. 1 104
      ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/metainfo.xml
  13. 30 12
      ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py
  14. 23 8
      ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_server.py
  15. 4 0
      ambari-server/src/test/python/stacks/utils/RMFTestCase.py

+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/configuration/krb5-conf.xml → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/configuration/krb5-conf.xml


+ 129 - 0
ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/metainfo.xml

@@ -0,0 +1,129 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       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.
+-->
+<metainfo>
+  <schemaVersion>2.0</schemaVersion>
+  <services>
+    <service>
+      <name>KERBEROS</name>
+      <displayName>Kerberos</displayName>
+      <comment>A computer network authentication protocol which works on
+        the basis of 'tickets' to allow nodes communicating over a
+        non-secure network to prove their identity to one another in a
+        secure manner.
+      </comment>
+      <version>1.10.3-10</version>
+
+      <components>
+        <component>
+          <name>KERBEROS_CLIENT</name>
+          <displayName>Kerberos Client</displayName>
+          <category>CLIENT</category>
+          <cardinality>ALL</cardinality>
+          <auto-deploy>
+            <enabled>true</enabled>
+          </auto-deploy>
+          <commandScript>
+            <script>scripts/kerberos_client.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>1200</timeout>
+          </commandScript>
+          <customCommands>
+            <customCommand>
+              <name>SET_KEYTAB</name>
+              <commandScript>
+                <script>scripts/kerberos_client.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>1000</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
+          <configFiles>
+            <configFile>
+              <type>env</type>
+              <fileName>krb5.conf</fileName>
+              <dictionaryName>krb5-conf</dictionaryName>
+            </configFile>
+          </configFiles>
+        </component>
+      </components>
+
+      <osSpecifics>
+        <osSpecific>
+          <osFamily>redhat5,redhat6</osFamily>
+          <packages>
+            <package>
+              <name>krb5-server</name>
+            </package>
+            <package>
+              <name>krb5-libs</name>
+            </package>
+            <package>
+              <name>krb5-workstation</name>
+            </package>
+          </packages>
+        </osSpecific>
+
+        <osSpecific>
+          <osFamily>ubuntu12</osFamily>
+          <packages>
+            <package>
+              <name>krb5-kdc</name>
+            </package>
+            <package>
+              <name>krb5-admin-server</name>
+            </package>
+            <package>
+              <name>krb5-user</name>
+            </package>
+            <package>
+              <name>krb5-config</name>
+            </package>
+          </packages>
+        </osSpecific>
+
+        <osSpecific>
+          <osFamily>suse11</osFamily>
+          <packages>
+            <package>
+              <name>krb5</name>
+            </package>
+            <package>
+              <name>krb5-client</name>
+            </package>
+            <package>
+              <name>krb5-server</name>
+            </package>
+          </packages>
+        </osSpecific>
+      </osSpecifics>
+
+      <commandScript>
+        <script>scripts/service_check.py</script>
+        <scriptType>PYTHON</scriptType>
+        <timeout>300</timeout>
+      </commandScript>
+
+      <configuration-dependencies>
+        <config-type>krb5-conf</config-type>
+        <config-type>kdc-conf</config-type>
+        <config-type>kadm5-acl</config-type>
+      </configuration-dependencies>
+      <restartRequiredAfterChange>true</restartRequiredAfterChange>
+    </service>
+  </services>
+</metainfo>

+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/scripts/kerberos_client.py → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_client.py


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/scripts/kerberos_common.py → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_common.py


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/scripts/kerberos_server.py → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/scripts/params.py → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/scripts/service_check.py → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/service_check.py


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/scripts/utils.py → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/utils.py


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/templates/kadm5_acl.j2 → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/templates/kadm5_acl.j2


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/templates/kdc_conf.j2 → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/templates/kdc_conf.j2


+ 0 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/package/templates/krb5_conf.j2 → ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/templates/krb5_conf.j2


+ 1 - 104
ambari-server/src/main/resources/stacks/HDP/2.2/services/KERBEROS/metainfo.xml

@@ -20,110 +20,7 @@
   <services>
     <service>
       <name>KERBEROS</name>
-      <displayName>Kerberos</displayName>
-      <comment>A computer network authentication protocol which works on
-        the basis of 'tickets' to allow nodes communicating over a
-        non-secure network to prove their identity to one another in a
-        secure manner.
-      </comment>
-      <version>1.10.3-10</version>
-
-      <components>
-        <component>
-          <name>KERBEROS_CLIENT</name>
-          <displayName>Kerberos Client</displayName>
-          <category>CLIENT</category>
-          <cardinality>ALL</cardinality>
-          <auto-deploy>
-            <enabled>true</enabled>
-          </auto-deploy>
-          <commandScript>
-            <script>scripts/kerberos_client.py</script>
-            <scriptType>PYTHON</scriptType>
-            <timeout>1200</timeout>
-          </commandScript>
-          <customCommands>
-            <customCommand>
-              <name>SET_KEYTAB</name>
-              <commandScript>
-                <script>scripts/kerberos_client.py</script>
-                <scriptType>PYTHON</scriptType>
-                <timeout>1000</timeout>
-              </commandScript>
-            </customCommand>
-          </customCommands>
-          <configFiles>
-            <configFile>
-              <type>env</type>
-              <fileName>krb5.conf</fileName>
-              <dictionaryName>krb5-conf</dictionaryName>
-            </configFile>
-          </configFiles>
-        </component>
-      </components>
-
-      <osSpecifics>
-        <osSpecific>
-          <osFamily>redhat5,redhat6</osFamily>
-          <packages>
-            <package>
-              <name>krb5-server</name>
-            </package>
-            <package>
-              <name>krb5-libs</name>
-            </package>
-            <package>
-              <name>krb5-workstation</name>
-            </package>
-          </packages>
-        </osSpecific>
-
-        <osSpecific>
-          <osFamily>ubuntu12</osFamily>
-          <packages>
-            <package>
-              <name>krb5-kdc</name>
-            </package>
-            <package>
-              <name>krb5-admin-server</name>
-            </package>
-            <package>
-              <name>krb5-user</name>
-            </package>
-            <package>
-              <name>krb5-config</name>
-            </package>
-          </packages>
-        </osSpecific>
-
-        <osSpecific>
-          <osFamily>suse11</osFamily>
-          <packages>
-            <package>
-              <name>krb5</name>
-            </package>
-            <package>
-              <name>krb5-client</name>
-            </package>
-            <package>
-              <name>krb5-server</name>
-            </package>
-          </packages>
-        </osSpecific>
-      </osSpecifics>
-
-      <commandScript>
-        <script>scripts/service_check.py</script>
-        <scriptType>PYTHON</scriptType>
-        <timeout>300</timeout>
-      </commandScript>
-
-      <configuration-dependencies>
-        <config-type>krb5-conf</config-type>
-        <config-type>kdc-conf</config-type>
-        <config-type>kadm5-acl</config-type>
-      </configuration-dependencies>
-      <restartRequiredAfterChange>true</restartRequiredAfterChange>
+      <extends>common-services/KERBEROS/1.10.3-10</extends>
     </service>
   </services>
 </metainfo>

+ 30 - 12
ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_client.py

@@ -19,20 +19,23 @@ limitations under the License.
 
 import os
 import use_cases
-from utils import get_property_value, get_unstructured_data
-
-
-
+import sys
 from stacks.utils.RMFTestCase import *
 
 class TestKerberosClient(RMFTestCase):
+  COMMON_SERVICES_PACKAGE_DIR = "KERBEROS/1.10.3-10/package"
+  STACK_VERSION = "2.2"
+
   def test_configure_managed_kdc(self):
     json_data = use_cases.get_manged_kdc_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_client.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_client.py",
                        classname="KerberosClient",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
                               owner='root',
@@ -52,10 +55,14 @@ class TestKerberosClient(RMFTestCase):
   def test_configure_unmanaged_kdc(self):
     json_data = use_cases.get_unmanged_kdc_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_client.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_client.py",
                        classname="KerberosClient",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
+
 
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
                               owner='root',
@@ -75,10 +82,13 @@ class TestKerberosClient(RMFTestCase):
   def test_configure_unmanaged_ad(self):
     json_data = use_cases.get_unmanged_ad_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_client.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_client.py",
                        classname="KerberosClient",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
                               owner='root',
@@ -98,10 +108,13 @@ class TestKerberosClient(RMFTestCase):
   def test_configure_cross_realm_trust(self):
     json_data = use_cases.get_cross_realm_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_client.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_client.py",
                        classname="KerberosClient",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
                               owner='root',
@@ -120,6 +133,11 @@ class TestKerberosClient(RMFTestCase):
 
 
   def test_get_property(self):
+    package_dir = os.path.join(RMFTestCase._getCommonServicesFolder(), self.COMMON_SERVICES_PACKAGE_DIR)
+    scripts_dir = os.path.join(package_dir, "scripts")
+    sys.path += [scripts_dir]
+    from utils import get_property_value
+
     d = {
       'non_empty' : "Nonempty value",
       'unicode_non_empty' : u"Nonempty value",

+ 23 - 8
ambari-server/src/test/python/stacks/2.2/KERBEROS/test_kerberos_server.py

@@ -23,13 +23,19 @@ import use_cases
 from stacks.utils.RMFTestCase import *
 
 class TestKerberosServer(RMFTestCase):
+  COMMON_SERVICES_PACKAGE_DIR = "KERBEROS/1.10.3-10/package"
+  STACK_VERSION = "2.2"
+
   def test_configure_managed_kdc(self):
     json_data = use_cases.get_manged_kdc_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_server.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_server.py",
                        classname="KerberosServer",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     # Validate krb5.conf file
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
@@ -82,10 +88,13 @@ class TestKerberosServer(RMFTestCase):
   def test_configure_unmanaged_kdc(self):
     json_data = use_cases.get_unmanged_kdc_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_server.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_server.py",
                        classname="KerberosServer",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     # Validate krb5.conf file
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
@@ -138,10 +147,13 @@ class TestKerberosServer(RMFTestCase):
   def test_configure_unmanaged_ad(self):
     json_data = use_cases.get_unmanged_ad_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_server.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_server.py",
                        classname="KerberosServer",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     # Validate krb5.conf file
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),
@@ -194,10 +206,13 @@ class TestKerberosServer(RMFTestCase):
   def test_configure_cross_realm_trust(self):
     json_data = use_cases.get_cross_realm_use_case()
 
-    self.executeScript("2.2/services/KERBEROS/package/scripts/kerberos_server.py",
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kerberos_server.py",
                        classname="KerberosServer",
                        command="configure",
-                       config_dict=json_data)
+                       config_dict=json_data,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
 
     # Validate krb5.conf file
     self.assertResourceCalled('Directory', use_cases.get_krb5_conf_dir(json_data),

+ 4 - 0
ambari-server/src/test/python/stacks/utils/RMFTestCase.py

@@ -140,6 +140,10 @@ class RMFTestCase(TestCase):
   @staticmethod
   def _getSrcFolder():
     return os.path.join(os.path.abspath(os.path.dirname(__file__)),os.path.normpath("../../../../"))
+  
+  @staticmethod
+  def _getCommonServicesFolder():
+    return os.path.join(RMFTestCase._getSrcFolder(), PATH_TO_COMMON_SERVICES)
       
   @staticmethod
   def _get_attr(module, attr):