From 021aaf0c338d61c6422cdc66c5c7bb88e83000f3 Mon Sep 17 00:00:00 2001 From: Corey Bryant Date: Mon, 14 Nov 2016 20:29:00 +0000 Subject: [PATCH] Breakout baseline from snap-sandbox --- conf/bin/run | 10 + conf/etc/neutron/api-paste.ini | 34 ++++ conf/etc/neutron/fwaas_driver.ini | 14 ++ conf/etc/neutron/neutron.conf | 4 + conf/etc/neutron/plugins/ml2/ml2_conf.ini | 8 + conf/etc/neutron/policy.json | 234 ++++++++++++++++++++++ conf/etc/neutron/rootwrap.conf | 34 ++++ conf/templates/neutron/neutron-snap.conf | 7 + snapcraft.yaml | 36 ++++ 9 files changed, 381 insertions(+) create mode 100755 conf/bin/run create mode 100644 conf/etc/neutron/api-paste.ini create mode 100644 conf/etc/neutron/fwaas_driver.ini create mode 100644 conf/etc/neutron/neutron.conf create mode 100644 conf/etc/neutron/plugins/ml2/ml2_conf.ini create mode 100644 conf/etc/neutron/policy.json create mode 100644 conf/etc/neutron/rootwrap.conf create mode 100644 conf/templates/neutron/neutron-snap.conf create mode 100644 snapcraft.yaml diff --git a/conf/bin/run b/conf/bin/run new file mode 100755 index 0000000..844f144 --- /dev/null +++ b/conf/bin/run @@ -0,0 +1,10 @@ +#!/bin/bash -e + +if [ $(id -u) -eq 0 ]; then + mkdir -p $SNAP_COMMON/etc/neutron.conf.d + sed -e "s|__SNAP_DATA__|$SNAP_COMMON|g" \ + -e "s|__SNAP__|$SNAP|g" \ + $SNAP/templates/neutron/neutron-snap.conf > $SNAP_COMMON/etc/neutron.conf.d/neutron-snap.conf +fi + +exec /usr/bin/env "$1" --config-file=$SNAP/etc/neutron/neutron.conf --config-dir=$SNAP_COMMON/etc/neutron.conf.d "${@:2}" diff --git a/conf/etc/neutron/api-paste.ini b/conf/etc/neutron/api-paste.ini new file mode 100644 index 0000000..5902651 --- /dev/null +++ b/conf/etc/neutron/api-paste.ini @@ -0,0 +1,34 @@ +[composite:neutron] +use = egg:Paste#urlmap +/: neutronversions +/v2.0: neutronapi_v2_0 + +[composite:neutronapi_v2_0] +use = call:neutron.auth:pipeline_factory +noauth = cors request_id catch_errors extensions neutronapiapp_v2_0 +keystone = cors request_id catch_errors authtoken keystonecontext extensions neutronapiapp_v2_0 + +[filter:request_id] +paste.filter_factory = oslo_middleware:RequestId.factory + +[filter:catch_errors] +paste.filter_factory = oslo_middleware:CatchErrors.factory + +[filter:cors] +paste.filter_factory = oslo_middleware.cors:filter_factory +oslo_config_project = neutron + +[filter:keystonecontext] +paste.filter_factory = neutron.auth:NeutronKeystoneContext.factory + +[filter:authtoken] +paste.filter_factory = keystonemiddleware.auth_token:filter_factory + +[filter:extensions] +paste.filter_factory = neutron.api.extensions:plugin_aware_extension_middleware_factory + +[app:neutronversions] +paste.app_factory = neutron.api.versions:Versions.factory + +[app:neutronapiapp_v2_0] +paste.app_factory = neutron.api.v2.router:APIRouter.factory diff --git a/conf/etc/neutron/fwaas_driver.ini b/conf/etc/neutron/fwaas_driver.ini new file mode 100644 index 0000000..0b84df1 --- /dev/null +++ b/conf/etc/neutron/fwaas_driver.ini @@ -0,0 +1,14 @@ +[DEFAULT] + + +[fwaas] + +# +# From firewall.agent +# + +# Name of the FWaaS Driver (string value) +#driver = + +# Enable FWaaS (boolean value) +#enabled = false diff --git a/conf/etc/neutron/neutron.conf b/conf/etc/neutron/neutron.conf new file mode 100644 index 0000000..639495c --- /dev/null +++ b/conf/etc/neutron/neutron.conf @@ -0,0 +1,4 @@ +[DEFAULT] +core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin +service_plugins = router + diff --git a/conf/etc/neutron/plugins/ml2/ml2_conf.ini b/conf/etc/neutron/plugins/ml2/ml2_conf.ini new file mode 100644 index 0000000..1378c38 --- /dev/null +++ b/conf/etc/neutron/plugins/ml2/ml2_conf.ini @@ -0,0 +1,8 @@ +[DEFAULT] +[ml2] +[ml2_type_flat] +[ml2_type_geneve] +[ml2_type_gre] +[ml2_type_vlan] +[ml2_type_vxlan] +[securitygroup] diff --git a/conf/etc/neutron/policy.json b/conf/etc/neutron/policy.json new file mode 100644 index 0000000..44963d6 --- /dev/null +++ b/conf/etc/neutron/policy.json @@ -0,0 +1,234 @@ +{ + "context_is_admin": "role:admin", + "owner": "tenant_id:%(tenant_id)s", + "admin_or_owner": "rule:context_is_admin or rule:owner", + "context_is_advsvc": "role:advsvc", + "admin_or_network_owner": "rule:context_is_admin or tenant_id:%(network:tenant_id)s", + "admin_owner_or_network_owner": "rule:owner or rule:admin_or_network_owner", + "admin_only": "rule:context_is_admin", + "regular_user": "", + "shared": "field:networks:shared=True", + "shared_firewalls": "field:firewalls:shared=True", + "shared_firewall_policies": "field:firewall_policies:shared=True", + "shared_subnetpools": "field:subnetpools:shared=True", + "shared_address_scopes": "field:address_scopes:shared=True", + "external": "field:networks:router:external=True", + "default": "rule:admin_or_owner", + + "create_subnet": "rule:admin_or_network_owner", + "get_subnet": "rule:admin_or_owner or rule:shared", + "update_subnet": "rule:admin_or_network_owner", + "delete_subnet": "rule:admin_or_network_owner", + + "create_subnetpool": "", + "create_subnetpool:shared": "rule:admin_only", + "create_subnetpool:is_default": "rule:admin_only", + "get_subnetpool": "rule:admin_or_owner or rule:shared_subnetpools", + "update_subnetpool": "rule:admin_or_owner", + "update_subnetpool:is_default": "rule:admin_only", + "delete_subnetpool": "rule:admin_or_owner", + + "create_address_scope": "", + "create_address_scope:shared": "rule:admin_only", + "get_address_scope": "rule:admin_or_owner or rule:shared_address_scopes", + "update_address_scope": "rule:admin_or_owner", + "update_address_scope:shared": "rule:admin_only", + "delete_address_scope": "rule:admin_or_owner", + + "create_network": "", + "get_network": "rule:admin_or_owner or rule:shared or rule:external or rule:context_is_advsvc", + "get_network:router:external": "rule:regular_user", + "get_network:segments": "rule:admin_only", + "get_network:provider:network_type": "rule:admin_only", + "get_network:provider:physical_network": "rule:admin_only", + "get_network:provider:segmentation_id": "rule:admin_only", + "get_network:queue_id": "rule:admin_only", + "get_network_ip_availabilities": "rule:admin_only", + "get_network_ip_availability": "rule:admin_only", + "create_network:shared": "rule:admin_only", + "create_network:router:external": "rule:admin_only", + "create_network:is_default": "rule:admin_only", + "create_network:segments": "rule:admin_only", + "create_network:provider:network_type": "rule:admin_only", + "create_network:provider:physical_network": "rule:admin_only", + "create_network:provider:segmentation_id": "rule:admin_only", + "update_network": "rule:admin_or_owner", + "update_network:segments": "rule:admin_only", + "update_network:shared": "rule:admin_only", + "update_network:provider:network_type": "rule:admin_only", + "update_network:provider:physical_network": "rule:admin_only", + "update_network:provider:segmentation_id": "rule:admin_only", + "update_network:router:external": "rule:admin_only", + "delete_network": "rule:admin_or_owner", + + "network_device": "field:port:device_owner=~^network:", + "create_port": "", + "create_port:device_owner": "not rule:network_device or rule:context_is_advsvc or rule:admin_or_network_owner", + "create_port:mac_address": "rule:context_is_advsvc or rule:admin_or_network_owner", + "create_port:fixed_ips": "rule:context_is_advsvc or rule:admin_or_network_owner", + "create_port:port_security_enabled": "rule:context_is_advsvc or rule:admin_or_network_owner", + "create_port:binding:host_id": "rule:admin_only", + "create_port:binding:profile": "rule:admin_only", + "create_port:mac_learning_enabled": "rule:context_is_advsvc or rule:admin_or_network_owner", + "create_port:allowed_address_pairs": "rule:admin_or_network_owner", + "get_port": "rule:context_is_advsvc or rule:admin_owner_or_network_owner", + "get_port:queue_id": "rule:admin_only", + "get_port:binding:vif_type": "rule:admin_only", + "get_port:binding:vif_details": "rule:admin_only", + "get_port:binding:host_id": "rule:admin_only", + "get_port:binding:profile": "rule:admin_only", + "update_port": "rule:admin_or_owner or rule:context_is_advsvc", + "update_port:device_owner": "not rule:network_device or rule:context_is_advsvc or rule:admin_or_network_owner", + "update_port:mac_address": "rule:admin_only or rule:context_is_advsvc", + "update_port:fixed_ips": "rule:context_is_advsvc or rule:admin_or_network_owner", + "update_port:port_security_enabled": "rule:context_is_advsvc or rule:admin_or_network_owner", + "update_port:binding:host_id": "rule:admin_only", + "update_port:binding:profile": "rule:admin_only", + "update_port:mac_learning_enabled": "rule:context_is_advsvc or rule:admin_or_network_owner", + "update_port:allowed_address_pairs": "rule:admin_or_network_owner", + "delete_port": "rule:context_is_advsvc or rule:admin_owner_or_network_owner", + + "get_router:ha": "rule:admin_only", + "create_router": "rule:regular_user", + "create_router:external_gateway_info:enable_snat": "rule:admin_only", + "create_router:distributed": "rule:admin_only", + "create_router:ha": "rule:admin_only", + "get_router": "rule:admin_or_owner", + "get_router:distributed": "rule:admin_only", + "update_router:external_gateway_info:enable_snat": "rule:admin_only", + "update_router:distributed": "rule:admin_only", + "update_router:ha": "rule:admin_only", + "delete_router": "rule:admin_or_owner", + + "add_router_interface": "rule:admin_or_owner", + "remove_router_interface": "rule:admin_or_owner", + + "create_router:external_gateway_info:external_fixed_ips": "rule:admin_only", + "update_router:external_gateway_info:external_fixed_ips": "rule:admin_only", + + "create_firewall": "", + "get_firewall": "rule:admin_or_owner", + "create_firewall:shared": "rule:admin_only", + "get_firewall:shared": "rule:admin_only", + "update_firewall": "rule:admin_or_owner", + "update_firewall:shared": "rule:admin_only", + "delete_firewall": "rule:admin_or_owner", + + "create_firewall_policy": "", + "get_firewall_policy": "rule:admin_or_owner or rule:shared_firewall_policies", + "create_firewall_policy:shared": "rule:admin_or_owner", + "update_firewall_policy": "rule:admin_or_owner", + "delete_firewall_policy": "rule:admin_or_owner", + + "insert_rule": "rule:admin_or_owner", + "remove_rule": "rule:admin_or_owner", + + "create_firewall_rule": "", + "get_firewall_rule": "rule:admin_or_owner or rule:shared_firewalls", + "update_firewall_rule": "rule:admin_or_owner", + "delete_firewall_rule": "rule:admin_or_owner", + + "create_qos_queue": "rule:admin_only", + "get_qos_queue": "rule:admin_only", + + "update_agent": "rule:admin_only", + "delete_agent": "rule:admin_only", + "get_agent": "rule:admin_only", + + "create_dhcp-network": "rule:admin_only", + "delete_dhcp-network": "rule:admin_only", + "get_dhcp-networks": "rule:admin_only", + "create_l3-router": "rule:admin_only", + "delete_l3-router": "rule:admin_only", + "get_l3-routers": "rule:admin_only", + "get_dhcp-agents": "rule:admin_only", + "get_l3-agents": "rule:admin_only", + "get_loadbalancer-agent": "rule:admin_only", + "get_loadbalancer-pools": "rule:admin_only", + "get_agent-loadbalancers": "rule:admin_only", + "get_loadbalancer-hosting-agent": "rule:admin_only", + + "create_floatingip": "rule:regular_user", + "create_floatingip:floating_ip_address": "rule:admin_only", + "update_floatingip": "rule:admin_or_owner", + "delete_floatingip": "rule:admin_or_owner", + "get_floatingip": "rule:admin_or_owner", + + "create_network_profile": "rule:admin_only", + "update_network_profile": "rule:admin_only", + "delete_network_profile": "rule:admin_only", + "get_network_profiles": "", + "get_network_profile": "", + "update_policy_profiles": "rule:admin_only", + "get_policy_profiles": "", + "get_policy_profile": "", + + "create_metering_label": "rule:admin_only", + "delete_metering_label": "rule:admin_only", + "get_metering_label": "rule:admin_only", + + "create_metering_label_rule": "rule:admin_only", + "delete_metering_label_rule": "rule:admin_only", + "get_metering_label_rule": "rule:admin_only", + + "get_service_provider": "rule:regular_user", + "get_lsn": "rule:admin_only", + "create_lsn": "rule:admin_only", + + "create_flavor": "rule:admin_only", + "update_flavor": "rule:admin_only", + "delete_flavor": "rule:admin_only", + "get_flavors": "rule:regular_user", + "get_flavor": "rule:regular_user", + "create_service_profile": "rule:admin_only", + "update_service_profile": "rule:admin_only", + "delete_service_profile": "rule:admin_only", + "get_service_profiles": "rule:admin_only", + "get_service_profile": "rule:admin_only", + + "get_policy": "rule:regular_user", + "create_policy": "rule:admin_only", + "update_policy": "rule:admin_only", + "delete_policy": "rule:admin_only", + "get_policy_bandwidth_limit_rule": "rule:regular_user", + "create_policy_bandwidth_limit_rule": "rule:admin_only", + "delete_policy_bandwidth_limit_rule": "rule:admin_only", + "update_policy_bandwidth_limit_rule": "rule:admin_only", + "get_rule_type": "rule:regular_user", + + "restrict_wildcard": "(not field:rbac_policy:target_tenant=*) or rule:admin_only", + "create_rbac_policy": "", + "create_rbac_policy:target_tenant": "rule:restrict_wildcard", + "update_rbac_policy": "rule:admin_or_owner", + "update_rbac_policy:target_tenant": "rule:restrict_wildcard and rule:admin_or_owner", + "get_rbac_policy": "rule:admin_or_owner", + "delete_rbac_policy": "rule:admin_or_owner", + + "create_flavor_service_profile": "rule:admin_only", + "delete_flavor_service_profile": "rule:admin_only", + "get_flavor_service_profile": "rule:regular_user", + "get_auto_allocated_topology": "rule:admin_or_owner", + + "get_bgp_speaker": "rule:admin_only", + "create_bgp_speaker": "rule:admin_only", + "update_bgp_speaker": "rule:admin_only", + "delete_bgp_speaker": "rule:admin_only", + + "get_bgp_peer": "rule:admin_only", + "create_bgp_peer": "rule:admin_only", + "update_bgp_peer": "rule:admin_only", + "delete_bgp_peer": "rule:admin_only", + + "add_bgp_peer": "rule:admin_only", + "remove_bgp_peer": "rule:admin_only", + + "add_gateway_network": "rule:admin_only", + "remove_gateway_network": "rule:admin_only", + + "get_advertised_routes":"rule:admin_only", + + "add_bgp_speaker_to_dragent": "rule:admin_only", + "remove_bgp_speaker_from_dragent": "rule:admin_only", + "list_bgp_speaker_on_dragent": "rule:admin_only", + "list_dragent_hosting_bgp_speaker": "rule:admin_only" +} diff --git a/conf/etc/neutron/rootwrap.conf b/conf/etc/neutron/rootwrap.conf new file mode 100644 index 0000000..3a6b11f --- /dev/null +++ b/conf/etc/neutron/rootwrap.conf @@ -0,0 +1,34 @@ +# Configuration for neutron-rootwrap +# This file should be owned by (and only-writeable by) the root user + +[DEFAULT] +# List of directories to load filter definitions from (separated by ','). +# These directories MUST all be only writeable by root ! +filters_path=/etc/neutron/rootwrap.d,/usr/share/neutron/rootwrap + +# List of directories to search executables in, in case filters do not +# explicitely specify a full path (separated by ',') +# If not specified, defaults to system PATH environment variable. +# These directories MUST all be only writeable by root ! +exec_dirs=/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin + +# Enable logging to syslog +# Default value is False +use_syslog=False + +# Which syslog facility to use. +# Valid values include auth, authpriv, syslog, local0, local1... +# Default value is 'syslog' +syslog_log_facility=syslog + +# Which messages to log. +# INFO means log all usage +# ERROR means only log unsuccessful attempts +syslog_log_level=ERROR + +[xenapi] +# XenAPI configuration is only required by the L2 agent if it is to +# target a XenServer/XCP compute host's dom0. +xenapi_connection_url= +xenapi_connection_username=root +xenapi_connection_password= diff --git a/conf/templates/neutron/neutron-snap.conf b/conf/templates/neutron/neutron-snap.conf new file mode 100644 index 0000000..edf6bcf --- /dev/null +++ b/conf/templates/neutron/neutron-snap.conf @@ -0,0 +1,7 @@ +[DEFAULT] +# Set state path to writable directory +state_path = __SNAP_COMMON__ + +# Oslo Concurrency lock path +[oslo_concurrency] +lock_path = __SNAP_COMMON__/lock diff --git a/snapcraft.yaml b/snapcraft.yaml new file mode 100644 index 0000000..745ae17 --- /dev/null +++ b/snapcraft.yaml @@ -0,0 +1,36 @@ +name: neutron +version: 8.3.1snapshot +summary: OpenStack Network Service (neutron) +description: OpenStack Network Service (neutron) +confinement: strict +grade: devel + +apps: + api: + command: bin/run neutron-server + daemon: simple + plugs: + - network + - network-bind + manage: + command: bin/run neutron-db-manage + plugs: + - network + +parts: + neutron: + plugin: python + python-version: python2 + source: http://tarballs.openstack.org/neutron/neutron-stable-mitaka.tar.gz + python-packages: + - pymysql + constraints: https://raw.githubusercontent.com/openstack/requirements/stable/mitaka/upper-constraints.txt + build-packages: + - libffi-dev + - libssl-dev + - pkg-config + config: + after: + - neutron + plugin: dump + source: conf