components/openstack/neutron/files/neutron-l3-agent
author Girish Moodalbail <Girish.Moodalbail@oracle.COM>
Wed, 26 Mar 2014 23:18:55 -0700
changeset 1792 5cea652172c6
parent 1760 353323c7bdc1
child 1944 56ac2df1785b
permissions -rw-r--r--
18416129 neutron-l3-agent should include dependency on ipfilter service 18407503 neutron net-delete doesn't delete subnets/ports with no VM associated

#!/usr/bin/python2.6

# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
#
#    Licensed 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.

import os
import sys

import smf_include

from subprocess import Popen, PIPE


def start():
    # verify paths are valid
    for f in sys.argv[2:4]:
        if not os.path.exists(f) or not os.access(f, os.R_OK):
            print '%s does not exist or is not readable' % f
            return smf_include.SMF_EXIT_ERR_CONFIG

    # System-wide forwarding (either ipv4 or ipv6 or both) must be enabled
    # before neutron-l3-agent can be started.
    cmd = ["/usr/sbin/ipadm", "show-prop", "-c", "-p", "forwarding",
           "-o", "current", "ipv4"]
    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
    output, error = p.communicate()
    if p.returncode != 0:
        print "failed to determine if IPv4 forwarding is enabled or not"
        return smf_include.SMF_EXIT_ERR_FATAL
    v4fwding = "on" in output

    cmd = ["/usr/sbin/ipadm", "show-prop", "-c", "-p", "forwarding",
           "-o", "current", "ipv6"]
    p = Popen(cmd, stdout=PIPE, stderr=PIPE)
    output, error = p.communicate()
    if p.returncode != 0:
        print "failed to determine if IPv6 forwarding is enabled or not"
        return smf_include.SMF_EXIT_ERR_FATAL
    v6fwding = "on" in output

    if not any((v4fwding, v6fwding)):
        print "System-wide IPv4 or IPv6 (or both) forwarding must be enabled " \
            "before enabling %s" % os.getenv("SMF_FMRI")
        return smf_include.SMF_EXIT_ERR_CONFIG

    cmd = "/usr/lib/neutron/neutron-l3-agent --config-file %s " \
        "--config-file %s" % tuple(sys.argv[2:4])
    smf_include.smf_subprocess(cmd)

if __name__ == "__main__":
    os.putenv("LC_ALL", "C")
    smf_include.smf_main()