Changes to the Neutron DHCP agent to port it to Solaris. These changes
will eventually be proposed upstream.
*** neutron-8.0.0/neutron/agent/linux/external_process.py 2016-04-07 00:44:25.000000000 -0700
--- new//neutron/agent/linux/external_process.py 2016-05-24 10:42:23.157427654 -0700
***************
*** 15,20 ****
--- 15,21 ----
import abc
import collections
import os.path
+ import platform
import eventlet
from oslo_concurrency import lockutils
***************
*** 87,95 ****
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)
elif reload_cfg:
self.reload_cfg()
--- 88,104 ----
cmd_callback = self.default_cmd_callback
cmd = cmd_callback(self.get_pid_file_name())
! 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()
***************
*** 100,106 ****
pid = self.pid
if self.active:
! if get_stop_command:
cmd = get_stop_command(self.get_pid_file_name())
ip_wrapper = ip_lib.IPWrapper(namespace=self.namespace)
ip_wrapper.netns.execute(cmd, addl_env=self.cmd_addl_env)
--- 109,115 ----
pid = self.pid
if self.active:
! if get_stop_command and self.namespace:
cmd = get_stop_command(self.get_pid_file_name())
ip_wrapper = ip_lib.IPWrapper(namespace=self.namespace)
ip_wrapper.netns.execute(cmd, addl_env=self.cmd_addl_env)
***************
*** 137,142 ****
--- 146,159 ----
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-8.0.0/neutron/agent/linux/utils.py 2016-04-07 00:44:35.000000000 -0700
--- new/neutron/agent/linux/utils.py 2016-05-22 15:59:48.178297663 -0700
***************
*** 17,22 ****
--- 17,23 ----
import glob
import grp
import os
+ import platform
import pwd
import shlex
import socket
***************
*** 30,36 ****
from eventlet import greenthread
from oslo_config import cfg
from oslo_log import log as logging
! from oslo_rootwrap import client
from oslo_utils import excutils
import six
from six.moves import http_client as httplib
--- 31,40 ----
from eventlet import greenthread
from oslo_config import cfg
from oslo_log import log as logging
! try:
! from oslo_rootwrap import client
! except:
! pass
from oslo_utils import excutils
import six
from six.moves import http_client as httplib
***************
*** 184,191 ****
"""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:
--- 188,199 ----
"""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-8.0.0/neutron/agent/dhcp_agent.py 2016-04-07 00:44:25.000000000 -0700
--- new/neutron/agent/dhcp_agent.py 2016-05-24 10:43:14.037828809 -0700
***************
*** 23,28 ****
--- 23,29 ----
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 import service as neutron_service
***************
*** 37,43 ****
conf.register_opts(dhcp_config.DNSMASQ_OPTS)
conf.register_opts(metadata_config.DRIVER_OPTS)
conf.register_opts(metadata_config.SHARED_OPTS)
! conf.register_opts(interface.OPTS)
def main():
--- 38,45 ----
conf.register_opts(dhcp_config.DNSMASQ_OPTS)
conf.register_opts(metadata_config.DRIVER_OPTS)
conf.register_opts(metadata_config.SHARED_OPTS)
! cfg.CONF.register_opts(interface.OPTS)
! cfg.CONF.register_opts(solaris_interface.OPTS)
def main():
*** neutron-8.0.0/neutron/agent/linux/dhcp.py 2016-04-07 00:44:35.000000000 -0700
--- new/neutron/agent/linux/dhcp.py 2016-05-24 10:42:44.985389698 -0700
***************
*** 16,21 ****
--- 16,22 ----
import abc
import collections
import os
+ import platform
import re
import shutil
import time
***************
*** 108,114 ****
def __init__(self, d):
super(NetModel, self).__init__(d)
! self._ns_name = "%s%s" % (NS_PREFIX, self.id)
@property
def namespace(self):
--- 109,118 ----
def __init__(self, d):
super(NetModel, self).__init__(d)
! if platform.system() == "SunOS":
! self._ns_name = None
! else:
! self._ns_name = "%s%s" % (NS_PREFIX, self.id)
@property
def namespace(self):