Browse Source

AMBARI-5748. Improve handling of groupmod errors and provide ability to skip (aonishuk)

Andrew Onishuk 11 years ago
parent
commit
6a58d9fc1a

+ 2 - 1
ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-INSTALL/scripts/params.py

@@ -122,4 +122,5 @@ is_slave = hostname in slave_hosts
 if has_ganglia_server:
   ganglia_server_host = ganglia_server_hosts[0]
 
-hbase_tmp_dir = config['configurations']['hbase-site']['hbase.tmp.dir']
+hbase_tmp_dir = config['configurations']['hbase-site']['hbase.tmp.dir']
+ignore_groupsusers_create = default("ignore_groupsusers_create", False)

+ 55 - 19
ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-INSTALL/scripts/shared_initialization.py

@@ -27,13 +27,21 @@ def setup_users():
   """
   import params
 
-  Group(params.user_group)
-  Group(params.smoke_user_group)
-  Group(params.proxyuser_group)
+  Group(params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+  )
+  Group(params.smoke_user_group,
+         ignore_failures = params.ignore_groupsusers_create
+  )
+  Group(params.proxyuser_group,
+         ignore_failures = params.ignore_groupsusers_create
+  )
   User(params.smoke_user,
        gid=params.user_group,
-       groups=[params.proxyuser_group]
+       groups=[params.proxyuser_group],
+       ignore_failures = params.ignore_groupsusers_create
   )
+  
   smoke_user_dirs = format(
     "/tmp/hadoop-{smoke_user},/tmp/hsperfdata_{smoke_user},/home/{smoke_user},/tmp/{smoke_user},/tmp/sqoop-{smoke_user}")
   set_uid(params.smoke_user, smoke_user_dirs)
@@ -41,55 +49,83 @@ def setup_users():
   if params.has_hbase_masters:
     User(params.hbase_user,
          gid = params.user_group,
-         groups=[params.user_group])
+         groups=[params.user_group],
+         ignore_failures = params.ignore_groupsusers_create
+    )
     hbase_user_dirs = format(
       "/home/{hbase_user},/tmp/{hbase_user},/usr/bin/{hbase_user},/var/log/{hbase_user},{hbase_tmp_dir}")
     set_uid(params.hbase_user, hbase_user_dirs)
 
   if params.has_nagios:
-    Group(params.nagios_group)
+    Group(params.nagios_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.nagios_user,
-         gid=params.nagios_group)
+         gid=params.nagios_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_oozie_server:
     User(params.oozie_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_hcat_server_host:
     User(params.webhcat_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.hcat_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_hive_server_host:
     User(params.hive_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_resourcemanager:
     User(params.yarn_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_ganglia_server:
-    Group(params.gmetad_user)
-    Group(params.gmond_user)
+    Group(params.gmetad_user,
+         ignore_failures = params.ignore_groupsusers_create
+    )
+    Group(params.gmond_user,
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.gmond_user,
          gid=params.user_group,
-        groups=[params.gmond_user])
+         groups=[params.gmond_user],
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.gmetad_user,
          gid=params.user_group,
-        groups=[params.gmetad_user])
+         groups=[params.gmetad_user],
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   User(params.hdfs_user,
         gid=params.user_group,
-        groups=[params.user_group]
+        groups=[params.user_group],
+        ignore_failures = params.ignore_groupsusers_create
   )
   User(params.mapred_user,
        gid=params.user_group,
-       groups=[params.user_group]
+       groups=[params.user_group],
+       ignore_failures = params.ignore_groupsusers_create
   )
   if params.has_zk_host:
     User(params.zk_user,
-         gid=params.user_group)
+         gid=params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
 def set_uid(user, user_dirs):
   """

+ 5 - 0
ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HDFS/configuration/global.xml

@@ -163,5 +163,10 @@
     <value>hdfs</value>
     <description>User and Groups.</description>
   </property>
+  <property>
+    <name>ignore_groupsusers_create</name>
+    <value>false</value>
+    <description>Whether to ignores failures on users and group creation</description>
+  </property>
   
 </configuration>

+ 1 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/params.py

@@ -100,3 +100,4 @@ jdk_name = default("/hostLevelParams/jdk_name", None) # None when jdk is already
 jce_policy_zip = default("/hostLevelParams/jce_name", None) # None when jdk is already installed by user
 jce_location = config['hostLevelParams']['jdk_location']
 jdk_location = config['hostLevelParams']['jdk_location']
+ignore_groupsusers_create = default("ignore_groupsusers_create", False)

+ 62 - 23
ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/shared_initialization.py

@@ -27,12 +27,20 @@ def setup_users():
   """
   import params
 
-  Group(params.user_group)
-  Group(params.smoke_user_group)
-  Group(params.proxyuser_group)
+  Group(params.user_group, 
+        ignore_failures = params.ignore_groupsusers_create
+  )
+  
+  Group(params.smoke_user_group,
+        ignore_failures = params.ignore_groupsusers_create
+  )
+  Group(params.proxyuser_group,
+        ignore_failures = params.ignore_groupsusers_create
+  )
   User(params.smoke_user,
        gid=params.user_group,
-       groups=[params.proxyuser_group]
+       groups=[params.proxyuser_group],
+       ignore_failures = params.ignore_groupsusers_create
   )
   smoke_user_dirs = format(
     "/tmp/hadoop-{smoke_user},/tmp/hsperfdata_{smoke_user},/home/{smoke_user},/tmp/{smoke_user},/tmp/sqoop-{smoke_user}")
@@ -41,73 +49,104 @@ def setup_users():
   if params.has_hbase_masters:
     User(params.hbase_user,
          gid = params.user_group,
-         groups=[params.user_group])
+         groups=[params.user_group],
+         ignore_failures = params.ignore_groupsusers_create)
     hbase_user_dirs = format(
       "/home/{hbase_user},/tmp/{hbase_user},/usr/bin/{hbase_user},/var/log/{hbase_user},{hbase_tmp_dir}")
     set_uid(params.hbase_user, hbase_user_dirs)
 
   if params.has_nagios:
-    Group(params.nagios_group)
+    Group(params.nagios_group,
+      ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.nagios_user,
-         gid=params.nagios_group)
+         gid=params.nagios_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_oozie_server:
     User(params.oozie_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_hcat_server_host:
     User(params.webhcat_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.hcat_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_hive_server_host:
     User(params.hive_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_resourcemanager:
     User(params.yarn_user,
-         gid = params.user_group)
+         gid = params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_ganglia_server:
-    Group(params.gmetad_user)
-    Group(params.gmond_user)
+    Group(params.gmetad_user,
+         ignore_failures = params.ignore_groupsusers_create
+    )
+    Group(params.gmond_user,
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.gmond_user,
          gid=params.user_group,
-        groups=[params.gmond_user])
+         groups=[params.gmond_user],
+         ignore_failures = params.ignore_groupsusers_create
+    )
     User(params.gmetad_user,
          gid=params.user_group,
-        groups=[params.gmetad_user])
+         groups=[params.gmetad_user],
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   User(params.hdfs_user,
         gid=params.user_group,
-        groups=[params.user_group]
+        groups=[params.user_group],
+        ignore_failures = params.ignore_groupsusers_create
   )
   User(params.mapred_user,
        gid=params.user_group,
-       groups=[params.user_group]
+       groups=[params.user_group],
+       ignore_failures = params.ignore_groupsusers_create
   )
+  
   if params.has_zk_host:
     User(params.zk_user,
-         gid=params.user_group)
+         gid=params.user_group,
+         ignore_failures = params.ignore_groupsusers_create
+    )
 
   if params.has_storm_server:
     User(params.storm_user,
          gid=params.user_group,
-         groups=[params.user_group]
+         groups=[params.user_group],
+         ignore_failures = params.ignore_groupsusers_create
     )
 
   if params.has_falcon_server:
     User(params.falcon_user,
          gid=params.user_group,
-         groups=[params.user_group]
+         groups=[params.user_group],
+         ignore_failures = params.ignore_groupsusers_create
     )
     
   if params.has_tez:  
     User(params.tez_user,
       gid=params.user_group,
-      groups=[params.proxyuser_group]
-  )
+      groups=[params.proxyuser_group],
+      ignore_failures = params.ignore_groupsusers_create
+    )
 
 def set_uid(user, user_dirs):
   """

+ 5 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HDFS/configuration/global.xml

@@ -163,5 +163,10 @@
     <value>true</value>
     <description>LZO compression enabled</description>
   </property>
+  <property>
+    <name>ignore_groupsusers_create</name>
+    <value>false</value>
+    <description>Whether to ignores failures on users and group creation</description>
+  </property>
   
 </configuration>

+ 2 - 1
ambari-server/src/test/python/stacks/1.3.2/configs/default.json

@@ -219,7 +219,8 @@
             "hadoop_pid_dir_prefix": "/var/run/hadoop", 
             "nagios_user": "nagios", 
             "hbase_log_dir": "/var/log/hbase",
-            "oozie_admin_port": "11001"
+            "oozie_admin_port": "11001",
+            "ignore_groupsusers_create": "false"
         }, 
         "hdfs-site": {
             "dfs.namenode.avoid.write.stale.datanode": "true", 

+ 2 - 1
ambari-server/src/test/python/stacks/1.3.2/configs/secured.json

@@ -296,7 +296,8 @@
             "jtnode_opt_newsize": "200m", 
             "hbase_regionserver_keytab": "/etc/security/keytabs/hbase.service.keytab", 
             "hbase_principal_name": "hbase", 
-            "hdfs_principal_name": "hdfs"
+            "hdfs_principal_name": "hdfs",
+            "ignore_groupsusers_create": "false"
         }, 
         "hdfs-site": {
             "dfs.namenode.avoid.write.stale.datanode": "true", 

+ 82 - 58
ambari-server/src/test/python/stacks/1.3.2/hooks/before-INSTALL/test_before_install.py

@@ -28,81 +28,105 @@ class TestHookBeforeInstall(RMFTestCase):
                        command="hook",
                        config_file="default.json"
     )
-    self.assertResourceCalled('Execute', "mkdir -p /tmp/HDP-artifacts/ ; curl -kf --noproxy c6401.ambari.apache.org --retry 10 http://c6401.ambari.apache.org:8080/resources//jdk-7u45-linux-x64.tar.gz -o /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz",
-                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
-                              path = ['/bin', '/usr/bin/'],
-                              )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/ ; curl -kf --noproxy c6401.ambari.apache.org --retry 10 http://c6401.ambari.apache.org:8080/resources//jdk-7u45-linux-x64.tar.gz -o /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz',
+        not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+        path = ['/bin', '/usr/bin/'],
+    )
     self.assertResourceCalled('Execute', 'mkdir -p /usr/jdk64 ; cd /usr/jdk64 ; tar -xf /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz > /dev/null 2>&1',
-                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
-                              path = ['/bin', '/usr/bin/'],
-                              )
-    self.assertResourceCalled('Execute', "mkdir -p /tmp/HDP-artifacts/; curl -kf --noproxy c6401.ambari.apache.org --retry 10 http://c6401.ambari.apache.org:8080/resources//UnlimitedJCEPolicyJDK7.zip -o /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip",
-                              not_if = 'test -e /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
-                              ignore_failures = True,
-                              path = ['/bin', '/usr/bin/'],
-                              )
-    self.assertResourceCalled('Group', 'hadoop',)
-    self.assertResourceCalled('Group', 'users',)
-    self.assertResourceCalled('Group', 'users',)
+        not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+        path = ['/bin', '/usr/bin/'],
+    )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/; curl -kf --noproxy c6401.ambari.apache.org --retry 10 http://c6401.ambari.apache.org:8080/resources//UnlimitedJCEPolicyJDK7.zip -o /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+        not_if = 'test -e /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+        ignore_failures = True,
+        path = ['/bin', '/usr/bin/'],
+    )
+    self.assertResourceCalled('Group', 'hadoop',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'users',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'users',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'ambari-qa',
-                              gid = 'hadoop',
-                              groups = [u'users'],
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'users'],
+    )
     self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
+        content = StaticFile('changeToSecureUid.sh'),
+        mode = 0555,
+    )
     self.assertResourceCalled('Execute', '/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa 2>/dev/null',
-                              not_if = 'test $(id -u ambari-qa) -gt 1000',
-                              )
+        not_if = 'test $(id -u ambari-qa) -gt 1000',
+    )
     self.assertResourceCalled('User', 'hbase',
-                              gid = 'hadoop',
-                              groups = [u'hadoop'],
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'hadoop'],
+    )
     self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                              content = StaticFile('changeToSecureUid.sh'),
-                              mode = 0555,
-                              )
+        content = StaticFile('changeToSecureUid.sh'),
+        mode = 0555,
+    )
     self.assertResourceCalled('Execute', '/tmp/changeUid.sh hbase /home/hbase,/tmp/hbase,/usr/bin/hbase,/var/log/hbase,/hadoop/hbase 2>/dev/null',
-                              not_if = 'test $(id -u hbase) -gt 1000',
-                              )
-    self.assertResourceCalled('Group', 'nagios',)
+        not_if = 'test $(id -u hbase) -gt 1000',
+    )
+    self.assertResourceCalled('Group', 'nagios',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'nagios',
-                              gid = 'nagios',
-                              )
+        gid = 'nagios',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'oozie',
-                              gid = 'hadoop',
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'hcat',
-                              gid = 'hadoop',
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'hcat',
-                              gid = 'hadoop',
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'hive',
-                              gid = 'hadoop',
-                              )
-    self.assertResourceCalled('Group', 'nobody',)
-    self.assertResourceCalled('Group', 'nobody',)
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'nobody',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'nobody',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'nobody',
-                              gid = 'hadoop',
-                              groups = [u'nobody'],
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'nobody'],
+    )
     self.assertResourceCalled('User', 'nobody',
-                              gid = 'hadoop',
-                              groups = [u'nobody'],
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'nobody'],
+    )
     self.assertResourceCalled('User', 'hdfs',
-                              gid = 'hadoop',
-                              groups = [u'hadoop'],
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'hadoop'],
+    )
     self.assertResourceCalled('User', 'mapred',
-                              gid = 'hadoop',
-                              groups = [u'hadoop'],
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'hadoop'],
+    )
     self.assertResourceCalled('User', 'zookeeper',
-                              gid = 'hadoop',
-                              )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('Package', 'unzip',)
     self.assertNoMoreResources()
 

+ 2 - 1
ambari-server/src/test/python/stacks/2.0.6/configs/default.json

@@ -293,7 +293,8 @@
             "falcon_local_dir": "/hadoop/falcon",
             "tez_user": "tez",
             "rca_enabled": "false",
-            "oozie_admin_port": "11001"
+            "oozie_admin_port": "11001",
+            "ignore_groupsusers_create": "false"
         }, 
         "capacity-scheduler": {
             "yarn.scheduler.capacity.node-locality-delay": "40", 

+ 2 - 1
ambari-server/src/test/python/stacks/2.0.6/configs/secured.json

@@ -387,7 +387,8 @@
             "falcon_user": "falcon",
             "falcon_port": "15000",
             "falcon_local_dir": "/hadoop/falcon",
-            "rca_enabled": "false"
+            "rca_enabled": "false",
+            "ignore_groupsusers_create": "false"
         }, 
         "capacity-scheduler": {
             "yarn.scheduler.capacity.node-locality-delay": "40", 

+ 101 - 56
ambari-server/src/test/python/stacks/2.0.6/hooks/before-INSTALL/test_before_install.py

@@ -28,81 +28,126 @@ class TestHookBeforeInstall(RMFTestCase):
                        command="hook",
                        config_file="default.json"
     )
-    self.assertResourceCalled('Package', 'unzip', )
-    self.assertResourceCalled('Package', 'curl', )
-    
-    self.assertResourceCalled('Execute', "mkdir -p /tmp/HDP-artifacts/ ;   curl --noproxy c6401.ambari.apache.org -kf   --retry 10 http://c6401.ambari.apache.org:8080/resources//jdk-7u45-linux-x64.tar.gz -o /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz",
-                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
-                              path = ['/bin', '/usr/bin/'],
-                              )
+    self.assertResourceCalled('Package', 'unzip',)
+    self.assertResourceCalled('Package', 'curl',)
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/ ;   curl --noproxy c6401.ambari.apache.org -kf   --retry 10 http://c6401.ambari.apache.org:8080/resources//jdk-7u45-linux-x64.tar.gz -o /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz',
+        not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+        path = ['/bin', '/usr/bin/'],
+    )
     self.assertResourceCalled('Execute', 'mkdir -p /usr/jdk64 ; cd /usr/jdk64 ; tar -xf /tmp/HDP-artifacts//jdk-7u45-linux-x64.tar.gz > /dev/null 2>&1',
-                              not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
-                              path = ['/bin', '/usr/bin/'],
-                              )
-    self.assertResourceCalled('Execute', "mkdir -p /tmp/HDP-artifacts/;     curl --noproxy c6401.ambari.apache.org -kf --retry 10     http://c6401.ambari.apache.org:8080/resources//UnlimitedJCEPolicyJDK7.zip -o /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip",
-                              not_if = 'test -e /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
-                              ignore_failures = True,
-                              path = ['/bin', '/usr/bin/'],
-                              )
-    self.assertResourceCalled('Group', 'hadoop', )
-    self.assertResourceCalled('Group', 'users', )
-    self.assertResourceCalled('Group', 'users', )
+        not_if = 'test -e /usr/jdk64/jdk1.7.0_45/bin/java',
+        path = ['/bin', '/usr/bin/'],
+    )
+    self.assertResourceCalled('Execute', 'mkdir -p /tmp/HDP-artifacts/;     curl --noproxy c6401.ambari.apache.org -kf --retry 10     http://c6401.ambari.apache.org:8080/resources//UnlimitedJCEPolicyJDK7.zip -o /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+        not_if = 'test -e /tmp/HDP-artifacts//UnlimitedJCEPolicyJDK7.zip',
+        ignore_failures = True,
+        path = ['/bin', '/usr/bin/'],
+    )
+    self.assertResourceCalled('Group', 'hadoop',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'users',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'users',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'ambari-qa',
-                          gid='hadoop',
-                          groups=['users'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'users'],
+    )
     self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                          content=StaticFile('changeToSecureUid.sh'),
-                          mode=0555, )
-    self.assertResourceCalled('Execute',
-                          '/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa 2>/dev/null',
-                          not_if='test $(id -u ambari-qa) -gt 1000', )
+        content = StaticFile('changeToSecureUid.sh'),
+        mode = 0555,
+    )
+    self.assertResourceCalled('Execute', '/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa 2>/dev/null',
+        not_if = 'test $(id -u ambari-qa) -gt 1000',
+    )
     self.assertResourceCalled('User', 'hbase',
-                          gid='hadoop',
-                          groups=['hadoop'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = [u'hadoop'],
+    )
     self.assertResourceCalled('File', '/tmp/changeUid.sh',
-                          content=StaticFile('changeToSecureUid.sh'),
-                          mode=0555, )
-    self.assertResourceCalled('Execute',
-                          '/tmp/changeUid.sh hbase /home/hbase,/tmp/hbase,/usr/bin/hbase,/var/log/hbase,/hadoop/hbase 2>/dev/null',
-                          not_if='test $(id -u hbase) -gt 1000', )
-    self.assertResourceCalled('Group', 'nagios', )
+        content = StaticFile('changeToSecureUid.sh'),
+        mode = 0555,
+    )
+    self.assertResourceCalled('Execute', '/tmp/changeUid.sh hbase /home/hbase,/tmp/hbase,/usr/bin/hbase,/var/log/hbase,/hadoop/hbase 2>/dev/null',
+        not_if = 'test $(id -u hbase) -gt 1000',
+    )
+    self.assertResourceCalled('Group', 'nagios',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'nagios',
-                          gid='nagios', )
+        gid = 'nagios',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'oozie',
-                          gid='hadoop', )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'hcat',
-                          gid='hadoop', )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'hcat',
-                          gid='hadoop', )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'hive',
-                          gid='hadoop', )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'yarn',
-                          gid='hadoop', )
-    self.assertResourceCalled('Group', 'nobody', )
-    self.assertResourceCalled('Group', 'nobody', )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'nobody',
+        ignore_failures = False,
+    )
+    self.assertResourceCalled('Group', 'nobody',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'nobody',
-                          gid='hadoop',
-                          groups=['nobody'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['nobody'],
+    )
     self.assertResourceCalled('User', 'nobody',
-                          gid='hadoop',
-                          groups=['nobody'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['nobody'],
+    )
     self.assertResourceCalled('User', 'hdfs',
-                          gid='hadoop',
-                          groups=['hadoop'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['hadoop'],
+    )
     self.assertResourceCalled('User', 'mapred',
-                          gid='hadoop',
-                          groups=['hadoop'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['hadoop'],
+    )
     self.assertResourceCalled('User', 'zookeeper',
-                          gid='hadoop', )
+        gid = 'hadoop',
+        ignore_failures = False,
+    )
     self.assertResourceCalled('User', 'storm',
-                          gid='hadoop',
-                          groups=['hadoop'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['hadoop'],
+    )
     self.assertResourceCalled('User', 'falcon',
-                              gid='hadoop',
-                              groups=['hadoop'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['hadoop'],
+    )
     self.assertResourceCalled('User', 'tez',
-                              gid='hadoop',
-                              groups=['users'], )
+        gid = 'hadoop',
+        ignore_failures = False,
+        groups = ['users'],
+    )
     self.assertNoMoreResources()
 
 

+ 12 - 1
ambari-web/app/data/HDP2/global_properties.js

@@ -1880,7 +1880,18 @@ module.exports =
       "serviceName": "GANGLIA",
       "category": "General",
       "belongsToService": ["GANGLIA"]
+    },
+    {
+      "id": "puppet var",
+      "name": "ignore_groupsusers_create",
+      "displayName": "Skip group modifications during install",
+      "displayType": "checkbox",
+      "isReconfigurable": true,
+      "isOverridable": false,
+      "isVisible": true,
+      "serviceName": "MISC",
+      "category": "Users and Groups",
+      "belongsToService": ["HDFS"]
     }
-
   ]
 };

+ 12 - 0
ambari-web/app/data/global_properties.js

@@ -1513,6 +1513,18 @@ module.exports =
       "serviceName": "GANGLIA",
       "category": "General",
       "belongsToService": ["GANGLIA"]
+    },
+    {
+      "id": "puppet var",
+      "name": "ignore_groupsusers_create",
+      "displayName": "Skip group modifications during install",
+      "displayType": "checkbox",
+      "isReconfigurable": true,
+      "isOverridable": false,
+      "isVisible": true,
+      "serviceName": "MISC",
+      "category": "Users and Groups",
+      "belongsToService": ["HDFS"]
     }
   ]
 };