You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2018/05/30 15:06:44 UTC

[ambari] branch trunk updated: AMBARI-23945. Add upgrade & restart/stop hidden service component commands.

This is an automated email from the ASF dual-hosted git repository.

oleewere pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new d1744d4  AMBARI-23945. Add upgrade & restart/stop hidden service component commands.
d1744d4 is described below

commit d1744d40f40d393d21fb85ceb084c65bff5733c0
Author: Oliver Szabo <ol...@gmail.com>
AuthorDate: Wed May 30 17:06:21 2018 +0200

    AMBARI-23945. Add upgrade & restart/stop hidden service component commands.
---
 .../src/main/python/migrationHelper.py             | 178 ++++++++++++++++++++-
 .../AMBARI_INFRA_SOLR/0.1.0/metainfo.xml           |  20 +++
 .../0.1.0/package/scripts/infra_solr.py            |  13 ++
 .../0.1.0/package/scripts/infra_solr_client.py     |  13 +-
 .../common-services/LOGSEARCH/0.5.0/metainfo.xml   |  23 +++
 .../LOGSEARCH/0.5.0/package/scripts/logfeeder.py   |  13 +-
 .../LOGSEARCH/0.5.0/package/scripts/logsearch.py   |  13 ++
 7 files changed, 266 insertions(+), 7 deletions(-)

diff --git a/ambari-infra/ambari-infra-solr-client/src/main/python/migrationHelper.py b/ambari-infra/ambari-infra-solr-client/src/main/python/migrationHelper.py
index d340cb9..3c811d4 100755
--- a/ambari-infra/ambari-infra-solr-client/src/main/python/migrationHelper.py
+++ b/ambari-infra/ambari-infra-solr-client/src/main/python/migrationHelper.py
@@ -25,6 +25,7 @@ import urllib2
 import json
 import base64
 import optparse
+import socket
 import time
 import traceback
 import ConfigParser
@@ -41,6 +42,12 @@ SOLR_SERVICE_NAME = 'AMBARI_INFRA_SOLR'
 
 SOLR_COMPONENT_NAME ='INFRA_SOLR'
 
+LOGSEARCH_SERVICE_NAME = 'LOGSEARCH'
+
+LOGSEARCH_SERVER_COMPONENT_NAME ='LOGSEARCH_SERVER'
+LOGSEARCH_LOGFEEDER_COMPONENT_NAME ='LOGSEARCH_LOGFEEDER'
+
+
 CLUSTERS_URL = '/api/v1/clusters/{0}'
 
 GET_HOSTS_COMPONENTS_URL = '/services/{0}/components/{1}?fields=host_components'
@@ -285,7 +292,8 @@ def create_batch_command(command, hosts, cluster, service_name, component_name,
 
   return request_schedules
 
-def create_command_request(command, parameters, hosts, cluster, context):
+
+def create_command_request(command, parameters, hosts, cluster, context, service=SOLR_SERVICE_NAME, component=SOLR_COMPONENT_NAME):
   request = {}
   request_info = {}
   request_info["context"] = context
@@ -300,8 +308,8 @@ def create_command_request(command, parameters, hosts, cluster, context):
   request["RequestInfo"] = request_info
 
   resource_filter = {}
-  resource_filter["service_name"] = SOLR_SERVICE_NAME
-  resource_filter["component_name"] = SOLR_COMPONENT_NAME
+  resource_filter["service_name"] = service
+  resource_filter["component_name"] = component
   resource_filter["hosts"] = ','.join(hosts)
 
   resource_filters = []
@@ -357,9 +365,13 @@ def validte_common_options(options, parser, config):
     print 'collection option is required'
     sys.exit(1)
 
-def get_solr_hosts(options, accessor, cluster):
-  host_components_json = get_json(accessor, CLUSTERS_URL.format(cluster) + GET_HOSTS_COMPONENTS_URL.format(SOLR_SERVICE_NAME, SOLR_COMPONENT_NAME))
+def get_service_components(options, accessor, cluster, service, component):
+  host_components_json = get_json(accessor, CLUSTERS_URL.format(cluster) + GET_HOSTS_COMPONENTS_URL.format(service, component))
   component_hosts = get_component_hosts(host_components_json)
+  return component_hosts
+
+def get_solr_hosts(options, accessor, cluster):
+  component_hosts = get_service_components(options, accessor, cluster, SOLR_SERVICE_NAME, SOLR_COMPONENT_NAME)
 
   if options.include_solr_hosts:
     new_component_hosts = []
@@ -411,6 +423,148 @@ def backup(options, accessor, parser, config, collection, index_location):
   cmd_request = create_command_request("BACKUP", parameters, component_hosts, cluster, 'Backup Solr Collection: ' + collection)
   return post_json(accessor, CLUSTERS_URL.format(cluster) + REQUESTS_API_URL, cmd_request)
 
+
+def upgrade_solr_instances(options, accessor, parser, config):
+  """
+  Upgrade (remove & re-install) infra solr instances
+  """
+  cluster = config.get('ambari_server', 'cluster')
+  solr_instance_hosts = get_service_components(options, accessor, cluster, "AMBARI_INFRA_SOLR", "INFRA_SOLR")
+
+  context = "Upgrade Solr Instances"
+  sys.stdout.write("Sending upgrade request: [{0}] ".format(context))
+  sys.stdout.flush()
+
+  cmd_request = create_command_request("UPGRADE_SOLR_INSTANCE", {}, solr_instance_hosts, cluster, context)
+  response = post_json(accessor, CLUSTERS_URL.format(cluster) + REQUESTS_API_URL, cmd_request)
+  request_id = get_request_id(response)
+  sys.stdout.write(colors.OKGREEN + 'DONE\n' + colors.ENDC)
+  sys.stdout.flush()
+  print 'Upgrade command request id: {0}'.format(request_id)
+  if options.async:
+    print "Upgrade request sent to Ambari server. Check Ambari UI about the results."
+    sys.exit(0)
+  else:
+    sys.stdout.write("Start monitoring Ambari request with id {0} ...".format(request_id))
+    sys.stdout.flush()
+    cluster = config.get('ambari_server', 'cluster')
+    monitor_request(options, accessor, cluster, request_id, context)
+    print "{0}... {1} DONE{2}".format(context, colors.OKGREEN, colors.ENDC)
+
+def upgrade_solr_clients(options, accessor, parser, config):
+  """
+  Upgrade (remove & re-install) infra solr clients
+  """
+  cluster = config.get('ambari_server', 'cluster')
+  solr_client_hosts = get_service_components(options, accessor, cluster, "AMBARI_INFRA_SOLR", "INFRA_SOLR_CLIENT")
+
+  fqdn = socket.getfqdn()
+  if fqdn in solr_client_hosts:
+    solr_client_hosts.remove(fqdn)
+  host = socket.gethostname()
+  if host in solr_client_hosts:
+    solr_client_hosts.remove(host)
+  context = "Upgrade Solr Clients"
+  sys.stdout.write("Sending upgrade request: [{0}] ".format(context))
+  sys.stdout.flush()
+
+  cmd_request = create_command_request("UPGRADE_SOLR_CLIENT", {}, solr_client_hosts, cluster, context, component="INFRA_SOLR_CLIENT")
+  response = post_json(accessor, CLUSTERS_URL.format(cluster) + REQUESTS_API_URL, cmd_request)
+  request_id = get_request_id(response)
+  sys.stdout.write(colors.OKGREEN + 'DONE\n' + colors.ENDC)
+  sys.stdout.flush()
+  print 'Upgrade command request id: {0}'.format(request_id)
+  if options.async:
+    print "Upgrade request sent to Ambari server. Check Ambari UI about the results."
+    sys.exit(0)
+  else:
+    sys.stdout.write("Start monitoring Ambari request with id {0} ...".format(request_id))
+    sys.stdout.flush()
+    cluster = config.get('ambari_server', 'cluster')
+    monitor_request(options, accessor, cluster, request_id, context)
+    print "{0}... {1}DONE{2}".format(context, colors.OKGREEN, colors.ENDC)
+
+def upgrade_logfeeders(options, accessor, parser, config):
+  """
+  Upgrade (remove & re-install) logfeeders
+  """
+  cluster = config.get('ambari_server', 'cluster')
+  logfeeder_hosts = get_service_components(options, accessor, cluster, "LOGSEARCH", "LOGSEARCH_SERVER")
+
+  context = "Upgrade Log Feeders"
+  sys.stdout.write("Sending upgrade request: [{0}] ".format(context))
+  sys.stdout.flush()
+
+  cmd_request = create_command_request("UPGRADE_LOGFEEDER", {}, logfeeder_hosts, cluster, context, service="LOGSEARCH", component="LOGSEARCH_LOGFEEDER")
+  response = post_json(accessor, CLUSTERS_URL.format(cluster) + REQUESTS_API_URL, cmd_request)
+  request_id = get_request_id(response)
+  sys.stdout.write(colors.OKGREEN + 'DONE\n' + colors.ENDC)
+  sys.stdout.flush()
+  print 'Upgrade command request id: {0}'.format(request_id)
+  if options.async:
+    print "Upgrade request sent to Ambari server. Check Ambari UI about the results."
+    sys.exit(0)
+  else:
+    sys.stdout.write("Start monitoring Ambari request with id {0} ...".format(request_id))
+    sys.stdout.flush()
+    cluster = config.get('ambari_server', 'cluster')
+    monitor_request(options, accessor, cluster, request_id, context)
+    print "{0}... {1} DONE{2}".format(context, colors.OKGREEN, colors.ENDC)
+
+def upgrade_logsearch_portal(options, accessor, parser, config):
+  """
+  Upgrade (remove & re-install) logsearch server instances
+  """
+  cluster = config.get('ambari_server', 'cluster')
+  logsearch_portal_hosts = get_service_components(options, accessor, cluster, "LOGSEARCH", "LOGSEARCH_SERVER")
+
+  context = "Upgrade Log Search Portal"
+  sys.stdout.write("Sending upgrade request: [{0}] ".format(context))
+  sys.stdout.flush()
+
+  cmd_request = create_command_request("UPGRADE_LOGSEARCH_PORTAL", {}, logsearch_portal_hosts, cluster, context, service="LOGSEARCH", component="LOGSEARCH_SERVER")
+  response = post_json(accessor, CLUSTERS_URL.format(cluster) + REQUESTS_API_URL, cmd_request)
+  request_id = get_request_id(response)
+  sys.stdout.write(colors.OKGREEN + 'DONE\n' + colors.ENDC)
+  sys.stdout.flush()
+  print 'Upgrade command request id: {0}'.format(request_id)
+  if options.async:
+    print "Upgrade request sent to Ambari server. Check Ambari UI about the results."
+    sys.exit(0)
+  else:
+    sys.stdout.write("Start monitoring Ambari request with id {0} ...".format(request_id))
+    sys.stdout.flush()
+    cluster = config.get('ambari_server', 'cluster')
+    monitor_request(options, accessor, cluster, request_id, context)
+    print "{0}... {1} DONE{2}".format(context, colors.OKGREEN, colors.ENDC)
+
+def service_components_command(options, accessor, parser, config, service, component, command, command_str):
+  """
+  Run command on service components
+  """
+  cluster = config.get('ambari_server', 'cluster')
+  service_components = get_service_components(options, accessor, cluster, service, component)
+
+  context = "{0} {1}".format(command_str, component)
+  sys.stdout.write("Sending '{0}' request: [{1}] ".format(command, context))
+  sys.stdout.flush()
+
+  cmd_request = create_command_request(command, {}, service_components, cluster, context, service=service, component=component)
+  response = post_json(accessor, CLUSTERS_URL.format(cluster) + REQUESTS_API_URL, cmd_request)
+  request_id = get_request_id(response)
+  sys.stdout.write(colors.OKGREEN + 'DONE\n' + colors.ENDC)
+  sys.stdout.flush()
+  print '{0} command request id: {1}'.format(command_str, request_id)
+  if options.async:
+    print "{0} request sent to Ambari server. Check Ambari UI about the results.".format(command_str)
+    sys.exit(0)
+  else:
+    sys.stdout.write("Start monitoring Ambari request with id {0} ...".format(request_id))
+    sys.stdout.flush()
+    cluster = config.get('ambari_server', 'cluster')
+    monitor_request(options, accessor, cluster, request_id, context)
+    print "{0}... {1} DONE{2}".format(context, colors.OKGREEN, colors.ENDC)
+
 def monitor_request(options, accessor, cluster, request_id, context):
   while True:
     request_response=get_json(accessor, "/api/v1/clusters/{0}{1}/{2}".format(cluster, REQUESTS_API_URL, request_id))
@@ -1029,6 +1183,20 @@ if __name__=="__main__":
         reload_collections(options, accessor, parser, config, service_filter)
       elif options.action.lower() == 'migrate':
         migrate_snapshots(options, accessor, parser, config, service_filter)
+      elif options.action.lower() == 'upgrade-solr-clients':
+        upgrade_solr_clients(options, accessor, parser, config)
+      elif options.action.lower() == 'upgrade-solr-instances':
+        upgrade_solr_instances(options, accessor, parser, config)
+      elif options.action.lower() == 'upgrade-logsearch-portal':
+        upgrade_logsearch_portal(options, accessor, parser, config)
+      elif options.action.lower() == 'upgrade-logfeeders':
+        upgrade_logfeeders(options, accessor, parser, config)
+      elif options.action.lower() == 'stop-logsearch':
+        service_components_command(options, accessor, parser, config, LOGSEARCH_SERVICE_NAME, LOGSEARCH_SERVER_COMPONENT_NAME, "STOP", "Stop")
+        service_components_command(options, accessor, parser, config, LOGSEARCH_SERVICE_NAME, LOGSEARCH_LOGFEEDER_COMPONENT_NAME, "STOP", "Stop")
+      elif options.action.lower() == 'restart-logsearch':
+        service_components_command(options, accessor, parser, config, LOGSEARCH_SERVICE_NAME, LOGSEARCH_SERVER_COMPONENT_NAME, "RESTART", "Restart")
+        service_components_command(options, accessor, parser, config, LOGSEARCH_SERVICE_NAME, LOGSEARCH_LOGFEEDER_COMPONENT_NAME, "RESTART", "Restart")
       elif options.action.lower() == 'rolling-restart-solr':
         rolling_restart_solr(options, accessor, parser, config)
       else:
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/metainfo.xml b/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/metainfo.xml
index de75d05..cd22ecc 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/metainfo.xml
@@ -72,6 +72,15 @@
                 <background>true</background>
               </commandScript>
             </customCommand>
+            <customCommand>
+              <name>UPGRADE_SOLR_INSTANCE</name>
+              <hidden>true</hidden>
+              <commandScript>
+                <script>scripts/infra_solr.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>1200</timeout>
+              </commandScript>
+            </customCommand>
           </customCommands>
           <dependencies>
             <dependency>
@@ -109,6 +118,17 @@
             <script>scripts/infra_solr_client.py</script>
             <scriptType>PYTHON</scriptType>
           </commandScript>
+          <customCommands>
+            <customCommand>
+              <name>UPGRADE_SOLR_CLIENT</name>
+              <hidden>true</hidden>
+              <commandScript>
+                <script>scripts/infra_solr_client.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>3600</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
           <configFiles>
             <configFile>
               <type>env</type>
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr.py b/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr.py
index da1eaa8..502943e 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr.py
@@ -18,6 +18,9 @@ limitations under the License.
 """
 
 import sys
+from ambari_commons.repo_manager import ManagerFactory
+from ambari_commons.shell import RepoCallContext
+from ambari_commons.os_utils import get_ambari_repo_file_full_name
 from resource_management.core.logger import Logger
 from resource_management.core.source import Template
 from resource_management.core.resources.system import Execute, File
@@ -143,5 +146,15 @@ class InfraSolr(Script):
   def migrate(self, env):
     migrate_index(env)
 
+  def upgrade_solr_instance(self, env):
+    pkg_provider = ManagerFactory.get()
+    context = RepoCallContext()
+    context.is_upgrade=True
+    context.log_output = True
+    context.use_repos = {}
+    context.use_repos['ambari']=get_ambari_repo_file_full_name()
+    pkg_provider.remove_package('ambari-infra-solr', context, ignore_dependencies=True)
+    pkg_provider.upgrade_package('ambari-infra-solr', context)
+
 if __name__ == "__main__":
   InfraSolr().execute()
\ No newline at end of file
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr_client.py b/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr_client.py
index 3b72d8c..5fd412b 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr_client.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_INFRA_SOLR/0.1.0/package/scripts/infra_solr_client.py
@@ -17,12 +17,14 @@ limitations under the License.
 
 """
 
+from ambari_commons.repo_manager import ManagerFactory
+from ambari_commons.shell import RepoCallContext
+from ambari_commons.os_utils import get_ambari_repo_file_full_name
 from resource_management.core.exceptions import ClientComponentHasNoStatus
 from resource_management.libraries.script.script import Script
 
 from setup_infra_solr import setup_infra_solr
 
-
 class InfraSolrClient(Script):
 
   def install(self, env):
@@ -48,6 +50,15 @@ class InfraSolrClient(Script):
   def status(self, env):
     raise ClientComponentHasNoStatus()
 
+  def upgrade_solr_client(self, env):
+    pkg_provider = ManagerFactory.get()
+    context = RepoCallContext()
+    context.is_upgrade=True
+    context.log_output = True
+    context.use_repos = {}
+    context.use_repos['ambari']=get_ambari_repo_file_full_name()
+    pkg_provider.remove_package('ambari-infra-solr-client', context, ignore_dependencies=True)
+    pkg_provider.upgrade_package('ambari-infra-solr-client', context)
 
 if __name__ == "__main__":
   InfraSolrClient().execute()
\ No newline at end of file
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
index 4c99830..54a4ab8 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/metainfo.xml
@@ -54,6 +54,17 @@
               <logId>logsearch_perf</logId>
             </log>
           </logs>
+          <customCommands>
+            <customCommand>
+              <name>UPGRADE_LOGSEARCH_PORTAL</name>
+              <hidden>true</hidden>
+              <commandScript>
+                <script>scripts/logsearch.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>1200</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
           <dependencies>
             <dependency>
               <name>AMBARI_INFRA_SOLR/INFRA_SOLR_CLIENT</name>
@@ -93,6 +104,18 @@
             </log>
           </logs>
 
+          <customCommands>
+            <customCommand>
+              <name>UPGRADE_LOGFEEDER</name>
+              <hidden>true</hidden>
+              <commandScript>
+                <script>scripts/logfeeder.py</script>
+                <scriptType>PYTHON</scriptType>
+                <timeout>1200</timeout>
+              </commandScript>
+            </customCommand>
+          </customCommands>
+
           <configuration-dependencies>
             <config-type>infra-solr-env</config-type>
             <config-type>logsearch-common-env</config-type>
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logfeeder.py b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logfeeder.py
index 2aa8b66..375cf55 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logfeeder.py
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logfeeder.py
@@ -17,7 +17,9 @@ limitations under the License.
 
 """
 
-import getpass
+from ambari_commons.repo_manager import ManagerFactory
+from ambari_commons.shell import RepoCallContext
+from ambari_commons.os_utils import get_ambari_repo_file_full_name
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.check_process_status import check_process_status
@@ -58,6 +60,15 @@ class LogFeeder(Script):
 
     check_process_status(status_params.logfeeder_pid_file)
 
+  def upgrade_logfeeder(self, env):
+    pkg_provider = ManagerFactory.get()
+    context = RepoCallContext()
+    context.is_upgrade=True
+    context.log_output = True
+    context.use_repos = {}
+    context.use_repos['ambari']=get_ambari_repo_file_full_name()
+    pkg_provider.remove_package('ambari-logsearch-logfeeder', context, ignore_dependencies=True)
+    pkg_provider.upgrade_package('ambari-logsearch-logfeeder', context)
 
 if __name__ == "__main__":
   LogFeeder().execute()
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logsearch.py b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logsearch.py
index a276357..1dd5d8d 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logsearch.py
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/logsearch.py
@@ -17,6 +17,9 @@ limitations under the License.
 
 """
 
+from ambari_commons.repo_manager import ManagerFactory
+from ambari_commons.shell import RepoCallContext
+from ambari_commons.os_utils import get_ambari_repo_file_full_name
 from resource_management.core.resources.system import Execute, File
 from resource_management.libraries.functions.check_process_status import check_process_status
 from resource_management.libraries.functions.format import format
@@ -58,5 +61,15 @@ class LogSearch(Script):
 
     check_process_status(status_params.logsearch_pid_file)
 
+  def upgrade_logsearch_portal(self, env):
+    pkg_provider = ManagerFactory.get()
+    context = RepoCallContext()
+    context.is_upgrade=True
+    context.log_output = True
+    context.use_repos = {}
+    context.use_repos['ambari']=get_ambari_repo_file_full_name()
+    pkg_provider.remove_package('ambari-logsearch-portal', context, ignore_dependencies=True)
+    pkg_provider.upgrade_package('ambari-logsearch-portal', context)
+
 if __name__ == "__main__":
   LogSearch().execute()

-- 
To stop receiving notification emails like this one, please contact
oleewere@apache.org.