~ubuntu-branches/ubuntu/vivid/neutron/vivid-updates

« back to all changes in this revision

Viewing changes to neutron/agent/metadata/agent.py

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-03-30 11:17:19 UTC
  • mfrom: (1.1.21)
  • Revision ID: package-import@ubuntu.com-20150330111719-h0gx7233p4jkkgfh
Tags: 1:2015.1~b3-0ubuntu1
* New upstream milestone release:
  - d/control: Align version requirements with upstream.
  - d/control: Add new dependency on oslo-log.
  - d/p/*: Rebase.
  - d/control,d/neutron-plugin-hyperv*: Dropped, decomposed into
    separate project upstream.
  - d/control,d/neutron-plugin-openflow*: Dropped, decomposed into
    separate project upstream.
  - d/neutron-common.install: Add neutron-rootwrap-daemon and 
    neutron-keepalived-state-change binaries.
  - d/rules: Ignore neutron-hyperv-agent when installing; only for Windows.
  - d/neutron-plugin-cisco.install: Drop neutron-cisco-cfg-agent as
    decomposed into separate project upstream.
  - d/neutron-plugin-vmware.install: Drop neutron-check-nsx-config and
    neutron-nsx-manage as decomposed into separate project upstream.
  - d/control: Add dependency on python-neutron-fwaas to neutron-l3-agent.
* d/pydist-overrides: Add overrides for oslo packages.
* d/control: Fixup type in package description (LP: #1263539).
* d/p/fixup-driver-test-execution.patch: Cherry pick fix from upstream VCS
  to support unit test exection in out-of-tree vendor drivers.
* d/neutron-common.postinst: Allow general access to /etc/neutron but limit
  access to root/neutron to /etc/neutron/neutron.conf to support execution
  of unit tests in decomposed vendor drivers.
* d/control: Add dependency on python-neutron-fwaas to neutron-l3-agent
  package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
 
15
15
import hashlib
16
16
import hmac
17
 
import os
18
 
import socket
19
17
 
20
 
import eventlet
21
18
import httplib2
22
19
from neutronclient.v2_0 import client
23
 
from oslo.config import cfg
24
 
from oslo import messaging
25
 
from oslo.utils import excutils
 
20
from oslo_config import cfg
 
21
from oslo_log import log as logging
 
22
import oslo_messaging
26
23
import six.moves.urllib.parse as urlparse
27
24
import webob
28
25
 
 
26
from neutron.agent.linux import utils as agent_utils
29
27
from neutron.agent import rpc as agent_rpc
30
28
from neutron.common import constants as n_const
31
29
from neutron.common import rpc as n_rpc
34
32
from neutron import context
35
33
from neutron.i18n import _LE, _LW
36
34
from neutron.openstack.common.cache import cache
37
 
from neutron.openstack.common import log as logging
38
35
from neutron.openstack.common import loopingcall
39
 
from neutron import wsgi
40
36
 
41
37
LOG = logging.getLogger(__name__)
42
38
 
56
52
    """
57
53
 
58
54
    def __init__(self, topic):
59
 
        target = messaging.Target(topic=topic,
60
 
                                  namespace=n_const.RPC_NAMESPACE_METADATA,
61
 
                                  version='1.0')
 
55
        target = oslo_messaging.Target(
 
56
            topic=topic,
 
57
            namespace=n_const.RPC_NAMESPACE_METADATA,
 
58
            version='1.0')
62
59
        self.client = n_rpc.get_client(target)
63
60
 
64
61
    def get_ports(self, context, filters):
121
118
        if self.use_rpc:
122
119
            try:
123
120
                return self.plugin_rpc.get_ports(self.context, filters)
124
 
            except (messaging.MessagingException, AttributeError):
 
121
            except (oslo_messaging.MessagingException, AttributeError):
125
122
                # TODO(obondarev): remove fallback once RPC is proven
126
123
                # to work fine with metadata agent (K or L release at most)
127
124
                LOG.warning(_LW('Server does not support metadata RPC, '
263
260
                        hashlib.sha256).hexdigest()
264
261
 
265
262
 
266
 
class UnixDomainHttpProtocol(eventlet.wsgi.HttpProtocol):
267
 
    def __init__(self, request, client_address, server):
268
 
        if client_address == '':
269
 
            client_address = ('<local>', 0)
270
 
        # base class is old-style, so super does not work properly
271
 
        eventlet.wsgi.HttpProtocol.__init__(self, request, client_address,
272
 
                                            server)
273
 
 
274
 
 
275
 
class WorkerService(wsgi.WorkerService):
276
 
    def start(self):
277
 
        self._server = self._service.pool.spawn(self._service._run,
278
 
                                                self._application,
279
 
                                                self._service._socket)
280
 
 
281
 
 
282
 
class UnixDomainWSGIServer(wsgi.Server):
283
 
    def __init__(self, name):
284
 
        self._socket = None
285
 
        self._launcher = None
286
 
        self._server = None
287
 
        super(UnixDomainWSGIServer, self).__init__(name)
288
 
 
289
 
    def start(self, application, file_socket, workers, backlog):
290
 
        self._socket = eventlet.listen(file_socket,
291
 
                                       family=socket.AF_UNIX,
292
 
                                       backlog=backlog)
293
 
 
294
 
        self._launch(application, workers=workers)
295
 
 
296
 
    def _run(self, application, socket):
297
 
        """Start a WSGI service in a new green thread."""
298
 
        logger = logging.getLogger('eventlet.wsgi.server')
299
 
        eventlet.wsgi.server(socket,
300
 
                             application,
301
 
                             custom_pool=self.pool,
302
 
                             protocol=UnixDomainHttpProtocol,
303
 
                             log=logging.WritableLogger(logger))
304
 
 
305
 
 
306
263
class UnixDomainMetadataProxy(object):
307
264
 
308
265
    def __init__(self, conf):
309
266
        self.conf = conf
310
 
 
311
 
        dirname = os.path.dirname(cfg.CONF.metadata_proxy_socket)
312
 
        if os.path.isdir(dirname):
313
 
            try:
314
 
                os.unlink(cfg.CONF.metadata_proxy_socket)
315
 
            except OSError:
316
 
                with excutils.save_and_reraise_exception() as ctxt:
317
 
                    if not os.path.exists(cfg.CONF.metadata_proxy_socket):
318
 
                        ctxt.reraise = False
319
 
        else:
320
 
            os.makedirs(dirname, 0o755)
321
 
 
 
267
        agent_utils.ensure_directory_exists_without_file(
 
268
            cfg.CONF.metadata_proxy_socket)
322
269
        self._init_state_reporting()
323
270
 
324
271
    def _init_state_reporting(self):
359
306
        self.agent_state.pop('start_flag', None)
360
307
 
361
308
    def run(self):
362
 
        server = UnixDomainWSGIServer('neutron-metadata-agent')
 
309
        server = agent_utils.UnixDomainWSGIServer('neutron-metadata-agent')
363
310
        server.start(MetadataProxyHandler(self.conf),
364
311
                     self.conf.metadata_proxy_socket,
365
312
                     workers=self.conf.metadata_workers,