components/openstack/neutron/patches/01-dhcp-agent-add-solaris.patch
author Vardhnee Ramanujam Ravi <vardhnee.ramanujam.ravi@oracle.com>
Tue, 12 Jul 2016 17:56:18 -0700
changeset 6402 498ec92d1f73
parent 6031 1aaf20a19738
child 6848 8e252a37ed0d
permissions -rw-r--r--
23756654 Missing '-l' option when using pargs command in Neutron

Changes to the Neutron DHCP agent to port it to Solaris. These changes
will eventually be proposed upstream.

--- neutron-2015.1.2/neutron/agent/linux/external_process.py.~1~	2015-10-13 10:35:16.000000000 -0700
+++ neutron-2015.1.2/neutron/agent/linux/external_process.py	2016-01-28 23:07:42.221029379 -0800
@@ -15,6 +15,7 @@
 import abc
 import collections
 import os.path
+import platform
 import six
 
 import eventlet
@@ -86,9 +87,17 @@ class ProcessManager(MonitoredProcess):
                 cmd_callback = self.default_cmd_callback
             cmd = cmd_callback(self.get_pid_file_name())
 
-            ip_wrapper = ip_lib.IPWrapper(namespace=self.namespace)
-            ip_wrapper.netns.execute(cmd, addl_env=self.cmd_addl_env,
-                                     run_as_root=self.run_as_root)
+            if self.namespace:
+                ip_wrapper = ip_lib.IPWrapper(namespace=self.namespace)
+                ip_wrapper.netns.execute(cmd, addl_env=self.cmd_addl_env,
+                                         run_as_root=self.run_as_root)
+            else:
+                env_params = []
+                if self.cmd_addl_env:
+                    env_params = (['/usr/bin/env'] +
+                                  ['%s=%s' % pair for pair in
+                                   self.cmd_addl_env.items()])
+                utils.execute(env_params + list(cmd))
         elif reload_cfg:
             self.reload_cfg()
 
@@ -131,6 +140,14 @@ class ProcessManager(MonitoredProcess):
         if pid is None:
             return False
 
+        if platform.system() == "SunOS":
+            cmd = ['/usr/bin/pargs', '-l', pid]
+            try:
+                exec_out = utils.execute(cmd)
+            except RuntimeError:
+                return False
+            return self.uuid in exec_out
+
         cmdline = '/proc/%s/cmdline' % pid
         try:
             with open(cmdline, "r") as f:
--- neutron-2015.1.2/neutron/api/rpc/handlers/dhcp_rpc.py.~1~	2015-10-13 10:35:16.000000000 -0700
+++ neutron-2015.1.2/neutron/api/rpc/handlers/dhcp_rpc.py	2016-01-28 23:07:42.219930998 -0800
@@ -188,11 +188,13 @@ class DhcpRpcCallback(object):
                 for fixed_ip in port['fixed_ips']:
                     if fixed_ip['subnet_id'] in dhcp_enabled_subnet_ids:
                         dhcp_enabled_subnet_ids.remove(fixed_ip['subnet_id'])
-                port['fixed_ips'].extend(
-                    [dict(subnet_id=s) for s in dhcp_enabled_subnet_ids])
-
-                retval = plugin.update_port(context, port['id'],
-                                            dict(port=port))
+                if dhcp_enabled_subnet_ids:
+                    port['fixed_ips'].extend(
+                        [dict(subnet_id=s) for s in dhcp_enabled_subnet_ids])
+                    retval = plugin.update_port(context, port['id'],
+                                                dict(port=port))
+                else:
+                    retval = port
 
         except n_exc.NotFound as e:
             LOG.warning(e)
*** neutron-2015.1.2/neutron/agent/linux/utils.py	2015-10-13 10:35:16.000000000 -0700
--- new/neutron/agent/linux/utils.py	2016-05-14 07:44:40.976050014 -0700
***************
*** 18,23 ****
--- 18,24 ----
  import grp
  import httplib
  import os
+ import platform
  import pwd
  import shlex
  import socket
***************
*** 31,37 ****
  from oslo_config import cfg
  from oslo_log import log as logging
  from oslo_log import loggers
! from oslo_rootwrap import client
  from oslo_utils import excutils
  
  from neutron.agent.common import config
--- 32,41 ----
  from oslo_config import cfg
  from oslo_log import log as logging
  from oslo_log import loggers
! try:
!     from oslo_rootwrap import client
! except:
!     pass
  from oslo_utils import excutils
  
  from neutron.agent.common import config
***************
*** 175,182 ****
      """Retrieve a list of the pids of child processes of the given pid."""
  
      try:
!         raw_pids = execute(['ps', '--ppid', pid, '-o', 'pid='],
!                            log_fail_as_error=False)
      except RuntimeError as e:
          # Unexpected errors are the responsibility of the caller
          with excutils.save_and_reraise_exception() as ctxt:
--- 179,190 ----
      """Retrieve a list of the pids of child processes of the given pid."""
  
      try:
!         if platform.system() == "SunOS":
!             raw_pids = execute(['/usr/bin/pgrep', '-P', pid],
!                                log_fail_as_error=False)
!         else:
!             raw_pids = execute(['ps', '--ppid', pid, '-o', 'pid='],
!                                log_fail_as_error=False)
      except RuntimeError as e:
          # Unexpected errors are the responsibility of the caller
          with excutils.save_and_reraise_exception() as ctxt:
*** neutron-2015.1.2/neutron/agent/dhcp_agent.py	2015-10-13 10:35:16.000000000 -0700
--- new/neutron/agent/dhcp_agent.py	2016-05-14 07:45:04.012214835 -0700
***************
*** 17,27 ****
--- 17,29 ----
  import sys
  
  from oslo_config import cfg
+ from oslo_utils import importutils
  
  from neutron.agent.common import config
  from neutron.agent.dhcp import config as dhcp_config
  from neutron.agent.linux import interface
  from neutron.agent.metadata import config as metadata_config
+ from neutron.agent.solaris import interface as solaris_interface
  from neutron.common import config as common_config
  from neutron.common import topics
  from neutron.openstack.common import service
***************
*** 38,43 ****
--- 40,46 ----
      cfg.CONF.register_opts(metadata_config.DRIVER_OPTS)
      cfg.CONF.register_opts(metadata_config.SHARED_OPTS)
      cfg.CONF.register_opts(interface.OPTS)
+     cfg.CONF.register_opts(solaris_interface.OPTS)
  
  
  def main():