You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2013/02/20 01:54:01 UTC

svn commit: r1447983 - in /incubator/ambari/trunk: ./ ambari-server/ ambari-server/sbin/ ambari-server/src/main/python/ ambari-server/src/main/resources/upgrade/dml/

Author: mahadev
Date: Wed Feb 20 00:54:01 2013
New Revision: 1447983

URL: http://svn.apache.org/r1447983
Log:
AMBARI-1448. Enabling stack upgrade via Ambari Server. (mahadev)

Added:
    incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/dml/
    incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/dml/Ambari-DML-Postgres-UPGRADE_STACK.sql
Modified:
    incubator/ambari/trunk/CHANGES.txt
    incubator/ambari/trunk/ambari-server/pom.xml
    incubator/ambari/trunk/ambari-server/sbin/ambari-server
    incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py

Modified: incubator/ambari/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1447983&r1=1447982&r2=1447983&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Wed Feb 20 00:54:01 2013
@@ -291,6 +291,8 @@ Trunk (unreleased changes):
 
  AMBARI-1438. Add new stack definition for new stacks. (mahadev)
 
+ AMBARI-1448. Enabling stack upgrade via Ambari Server. (mahadev)
+
  BUG FIXES
 
  AMBARI-1445. Redirect to main app page when testMode flag is set True and

Modified: incubator/ambari/trunk/ambari-server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/pom.xml?rev=1447983&r1=1447982&r2=1447983&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/pom.xml (original)
+++ incubator/ambari/trunk/ambari-server/pom.xml Wed Feb 20 00:54:01 2013
@@ -258,6 +258,17 @@
               </sources>
             </mapping>
             <mapping>
+              <directory>/var/lib/ambari-server/resources/upgrade/dml</directory>
+              <filemode>755</filemode>
+              <username>root</username>
+              <groupname>root</groupname>
+              <sources>
+                <source>
+                  <location>src/main/resources/upgrade/dml/Ambari-DML-Postgres-UPGRADE_STACK.sql</location>
+                </source>
+              </sources>
+            </mapping>
+            <mapping>
               <directory>/var/lib/ambari-server/resources/stacks</directory>
               <filemode>755</filemode>
               <username>root</username>

Modified: incubator/ambari/trunk/ambari-server/sbin/ambari-server
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/sbin/ambari-server?rev=1447983&r1=1447982&r2=1447983&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/sbin/ambari-server (original)
+++ incubator/ambari/trunk/ambari-server/sbin/ambari-server Wed Feb 20 00:54:01 2013
@@ -77,6 +77,10 @@ case "$1" in
         echo -e "Upgrading ambari-server"
         $PYTHON /usr/sbin/ambari-server.py $@
         ;;
+  upgradestack)
+        echo -e "Upgrading stack of ambari-server"
+        $PYTHON /usr/sbin/ambari-server.py $@
+        ;;
   setup)
         echo -e "Run postgresql initdb"
         initdb_res=`/sbin/service postgresql initdb`
@@ -89,7 +93,7 @@ case "$1" in
         $PYTHON /usr/sbin/ambari-server.py $@
         ;;
   *)
-        echo "Usage: /usr/sbin/ambari-server {start|stop|restart|setup|upgrade} [options]"
+        echo "Usage: /usr/sbin/ambari-server {start|stop|restart|setup|upgrade|upgradestack} [options]"
         exit 1
 esac
 

Modified: incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py?rev=1447983&r1=1447982&r2=1447983&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py (original)
+++ incubator/ambari/trunk/ambari-server/src/main/python/ambari-server.py Wed Feb 20 00:54:01 2013
@@ -45,6 +45,7 @@ START_ACTION = "start"
 STOP_ACTION = "stop"
 RESET_ACTION = "reset"
 UPGRADE_ACTION = "upgrade"
+UPGRADE_STACK_ACTION = "upgradestack"
 
 # selinux commands
 GET_SE_LINUX_ST_CMD = "/usr/sbin/sestatus"
@@ -65,6 +66,9 @@ IP_TBLS_SRVC_NT_FND = "iptables: unrecog
 ambari_provider_module_option = ""
 ambari_provider_module = os.environ.get('AMBARI_PROVIDER_MODULE')
 
+# constants
+STACK_NAME_VER_SEP = "-"
+
 if ambari_provider_module is not None:
   ambari_provider_module_option = "-Dprovider.module.class=" +\
                                   ambari_provider_module + " "
@@ -96,6 +100,8 @@ AMBARI_PROPERTIES_FILE="ambari.propertie
 
 SETUP_DB_CMD = ['su', 'postgres',
         '--command=psql -f {0} -v username=\'"{1}"\' -v password="\'{2}\'"']
+UPGRADE_STACK_CMD = ['su', 'postgres',
+        '--command=psql -f {0} -v stack_name="\'{1}\'"  -v stack_version="\'{2}\'"']
 PG_ST_CMD = "/sbin/service postgresql status"
 PG_START_CMD = "/sbin/service postgresql start"
 PG_RESTART_CMD = "/sbin/service postgresql restart"
@@ -262,6 +268,19 @@ def upgrade_db(args):
     print errdata
   return retcode
 
+def upgrade_stack(args, stack_id):
+  #password access to ambari-server and mapred
+  configure_postgres_username_password(args)
+  dbname = args.postgredbname
+  file = args.upgrade_stack_script_file
+  stack_name, stack_version = stack_id.split(STACK_NAME_VER_SEP)
+  command = UPGRADE_STACK_CMD[:]
+  command[-1] = command[-1].format(file, stack_name, stack_version)
+  retcode, outdata, errdata = run_os_command(command)
+  if not retcode == 0:
+    print errdata
+  return retcode
+
 #
 # Checks SELinux
 #
@@ -908,7 +927,7 @@ def configure_postgres_username_password
   try:
     properties.load(open(conf_file))
   except Exception, e:
-    print 'Could not read "%s": %s' % (conf_file, e)
+    print 'Could not read ambari config file "%s": %s' % (conf_file, e)
     return -1
 
   username = properties[JDBC_USER_NAME_PROPERTY]
@@ -959,7 +978,7 @@ def configure_postgres_username_password
 # Main.
 #
 def main():
-  parser = optparse.OptionParser(usage="usage: %prog [options] action",)
+  parser = optparse.OptionParser(usage="usage: %prog [options] action [stack_id]",)
   parser.add_option('-d', '--postgredbname', default='ambari',
                       help="Database name in postgresql")
   parser.add_option('-f', '--init-script-file',
@@ -974,6 +993,10 @@ def main():
                               "ambari-server/resources/upgrade/ddl/"
                               "Ambari-DDL-Postgres-UPGRADE-1.2.1.sql",
                       help="File with upgrade script")
+  parser.add_option('-t', '--upgrade-stack-script-file', default="/var/lib/"
+                              "ambari-server/resources/upgrade/dml/"
+                              "Ambari-DML-Postgres-UPGRADE_STACK.sql",
+                      help="File with stack upgrade script")
   parser.add_option('-j', '--java-home', default=None,
                   help="Use specified java_home.  Must be valid on all hosts")
   parser.add_option("-v", "--verbose",
@@ -993,12 +1016,23 @@ def main():
   global SILENT
   SILENT = options.silent
 
-  if not len(args) == 1:
+
+  
+  if len(args) == 0:
     print parser.print_help()
-    parser.error("Invalid number of arguments")
+    parser.error("No action entered")
 	
   action = args[0]
-
+  
+  if action == UPGRADE_STACK_ACTION:
+    args_number_required = 2
+  else:
+    args_number_required = 1
+	
+  if len(args) < args_number_required:
+    print parser.print_help()
+    parser.error("Invalid number of arguments. Entered: " + str(len(args)) + ", required: " + str(args_number_required))
+ 
   if action == SETUP_ACTION:
     setup(options)
   elif action == START_ACTION:
@@ -1009,6 +1043,9 @@ def main():
     reset(options)
   elif action == UPGRADE_ACTION:
     upgrade(options)
+  elif action == UPGRADE_STACK_ACTION:
+    stack_id = args[1]
+    upgrade_stack(options, stack_id)
   else:
     parser.error("Invalid action")
 
@@ -1128,4 +1165,4 @@ class Properties(object):
 
 
 if __name__ == "__main__":
-  main()
\ No newline at end of file
+  main()

Added: incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/dml/Ambari-DML-Postgres-UPGRADE_STACK.sql
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/dml/Ambari-DML-Postgres-UPGRADE_STACK.sql?rev=1447983&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/dml/Ambari-DML-Postgres-UPGRADE_STACK.sql (added)
+++ incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/dml/Ambari-DML-Postgres-UPGRADE_STACK.sql Wed Feb 20 00:54:01 2013
@@ -0,0 +1,44 @@
+--
+-- 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.
+--
+\connect ambari;
+
+PREPARE clusters (text, text) AS
+  UPDATE ambari.clusters
+    SET desired_stack_version = '{"stackName":"' || $1 || '","stackVersion":"' || $2 || '"}';
+
+PREPARE hostcomponentdesiredstate (text, text) AS
+  UPDATE ambari.hostcomponentdesiredstate
+    SET desired_stack_version = '{"stackName":"' || $1 || '","stackVersion":"' || $2 || '"}';
+
+PREPARE hostcomponentstate (text, text) AS
+  UPDATE ambari.hostcomponentstate
+    SET current_stack_version = '{"stackName":"' || $1 || '","stackVersion":"' || $2 || '"}';
+
+PREPARE servicecomponentdesiredstate (text, text) AS
+  UPDATE ambari.servicecomponentdesiredstate
+    SET desired_stack_version = '{"stackName":"' || $1  || '","stackVersion":"' || $2 || '"}';
+
+PREPARE servicedesiredstate (text, text) AS
+  UPDATE ambari.servicedesiredstate
+    SET desired_stack_version = '{"stackName":"' || $1 || '","stackVersion":"' || $2 || '"}';
+
+EXECUTE clusters(:stack_name, :stack_version);
+EXECUTE hostcomponentdesiredstate(:stack_name, :stack_version);
+EXECUTE hostcomponentstate(:stack_name, :stack_version);
+EXECUTE servicecomponentdesiredstate(:stack_name, :stack_version);
+EXECUTE servicedesiredstate(:stack_name, :stack_version);
\ No newline at end of file