From ba31915a50c3d9938273bfee0bc3b2595f85b869 Mon Sep 17 00:00:00 2001 From: Brian Stajkowski Date: Thu, 23 Jun 2016 21:20:32 -0700 Subject: [PATCH] Docker Development Adding docker integration for easy development of quark. This will be closely tied to the current software revision on any given patch. This allows you to vagrant up any current code revision as it will copy over the current working codebase to the docker image for installation into a virtualenv. This also employs several docker containers to make it easier to manage. It contains Redis, RabbitMQ, MySQL, PHPMySQLAdmin, and Kabana with Elasticsearch for log analysis. If your code changes and you need to test again after you docker_up.sh, you can easily docker_reload.sh and it will only update quark and start the process. In addition, this will insert a set number of networks and subnets for easy starting. Change-Id: I70d0ec9aed1548796bd8d4a9c1a94506234378f9 JIRA:NCP-1692 Implements: blueprint vagrant-quark --- .gitignore | 3 + CONTRIBUTING.rst | 54 +++++++++++ Dockerfile | 56 +++++++++++ docker.apipaste.ini | 34 +++++++ docker.neutron.conf | 34 +++++++ docker.policy.json | 222 ++++++++++++++++++++++++++++++++++++++++++++ docker_down.sh | 50 ++++++++++ docker_reload.sh | 12 +++ docker_up.sh | 85 +++++++++++++++++ 9 files changed, 550 insertions(+) create mode 100644 Dockerfile create mode 100644 docker.apipaste.ini create mode 100644 docker.neutron.conf create mode 100644 docker.policy.json create mode 100755 docker_down.sh create mode 100755 docker_reload.sh create mode 100755 docker_up.sh diff --git a/.gitignore b/.gitignore index c3d0842..ed7985a 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,6 @@ ChangeLog # Docs docs/build + +# Vagrant +.vagrant/ diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index c70bf94..5e70c1c 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -101,3 +101,57 @@ and detail as much of the requirement as possible. We will review and determine if it is possible and when a developer can be assigned to the request. + + +DOCKER DEVELOPMENT ENVIRONMENT +============================== + +Quick Start +----------- + +1. Install Docker: https://docs.docker.com/engine/installation/ + +2. cd + +3. ./docker_up.sh + +4. First time? Please wait to download the containers. + +5. This will install the code currently in the directory. + +6. If you need to update the development environment with code you have changed, +just ./docker_reload.sh once you have the environment up. This will reload the +quark container with your new code. + +7. Have your own configs? Not a problem, just create a ~/neutron directory local +on your laptop or working environment. The default configs will be overwritten +by your configuration files. They will also be loaded fresh everytime with +./docker_reload.sh. + +8. By default if a configuration file is not in ~/netron directory, it will load +docker.neutron.conf, docker.apipaste.ini, and docker.policy.json in this repo. + +9. Once you are done with the evironment, just ./docker_down.sh + +10. What's in the Dev Environment? + +- ELK Stack(logging): http://localhost:8083 +- PHPMyAdmin: http://localhost:8081 +- Neutron/Quark: http://localhost:9696 +- RabbitMQ: http://localhost:8080 +- Redis-Master: 80 +- Redis-Sentinel: 6380 +- MySQL: 3306 + +For addiitonal ports, please see the docker_up.sh script. + +11. Need to reference the IP of one of the containers? No need, the quark +container handles the linking and generating /etc/hosts with the correct +IPs. To access any of the containers in your configurations files, use the +following hostnames: + +- ELK: docker-kibana +- MySQL: docker-mysql +- RabbitMQ: docker-rabbitmq +- Redis: docker-redis +- Redis-Sentinel: docker-redis-sentinel diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7626631 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,56 @@ +FROM ubuntu:14.04 + +# General Installation +RUN apt-get update && apt-get install -y python-pip python-dev git wget libmysqlclient-dev build-essential libssl-dev libffi-dev python-dev rsyslog mysql-client +RUN pip install virtualenv + +# Configure Rsyslog and Provision DB +RUN echo 'local0.* @@docker-kibana:514' > /etc/rsyslog.d/60-neutron.conf +RUN echo "service rsyslog restart" > ~/entrypoint.sh +RUN echo 'mysql -h docker-mysql -u root -ppassword -e "CREATE DATABASE neutron"' >> ~/entrypoint.sh + +# Update setuptools +RUN wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python + +# Make our directories +RUN mkdir /opt/configs /opt/neutron /opt/quark /opt/venv /opt/wafflehaus /opt/wafflehaus.neutron /var/log/neutron +RUN cd /opt/venv && virtualenv . --distribute + +# Clone Neutron & Wafflehaus +RUN git clone https://github.com/openstack/neutron /opt/neutron +RUN git clone https://github.com/roaet/wafflehaus.git /opt/wafflehaus +RUN git clone https://github.com/roaet/wafflehaus.neutron /opt/wafflehaus.neutron + +# Pull Neutron and Install +RUN echo "cd /opt/neutron && git pull" >> ~/entrypoint.sh +RUN echo "source /opt/venv/bin/activate && pip install -U -r /opt/neutron/requirements.txt" >> ~/entrypoint.sh +RUN echo "cd /opt/neutron && source /opt/venv/bin/activate && python setup.py develop" >> ~/entrypoint.sh + +# Install Quark +RUN echo "source /opt/venv/bin/activate && pip install -U -r /opt/quark/requirements.txt" >> ~/entrypoint.sh +RUN echo "cd /opt/quark && source /opt/venv/bin/activate && python setup.py develop" >> ~/entrypoint.sh + +# Install Wafflehaus +RUN echo "cd /opt/wafflehaus && git pull" >> ~/entrypoint.sh +RUN echo "source /opt/venv/bin/activate && pip install -U -r /opt/wafflehaus/requirements.txt" >> ~/entrypoint.sh +RUN echo "cd /opt/wafflehaus && source /opt/venv/bin/activate && python setup.py develop" >> ~/entrypoint.sh + +# Install Wafflehaus.Neutron +RUN echo "cd /opt/wafflehaus.neutron && git pull" >> ~/entrypoint.sh +RUN echo "source /opt/venv/bin/activate && pip install -U -r /opt/wafflehaus.neutron/requirements.txt" >> ~/entrypoint.sh +RUN echo "cd /opt/wafflehaus.neutron && source /opt/venv/bin/activate && python setup.py develop" >> ~/entrypoint.sh + +# Put configuration files in place and start Neutron +RUN echo "cp /opt/quark/docker.neutron.conf ~/neutron.conf" >> ~/entrypoint.sh +RUN echo "cp /opt/quark/docker.apipaste.ini ~/api-paste.ini" >> ~/entrypoint.sh +RUN echo "cp /opt/quark/docker.policy.json ~/policy.json" >> ~/entrypoint.sh +RUN echo "cp /opt/configs/* ~/" >> ~/entrypoint.sh + +RUN echo "source /opt/venv/bin/activate && quark-db-manage --config-file ~/neutron.conf upgrade head" >> ~/entrypoint.sh +RUN echo "source /opt/venv/bin/activate && neutron-server --config-file ~/neutron.conf" >> ~/entrypoint.sh + +RUN chmod +x ~/entrypoint.sh + +EXPOSE 9696 + +ENTRYPOINT ["/bin/bash", "-c", "~/entrypoint.sh"] \ No newline at end of file diff --git a/docker.apipaste.ini b/docker.apipaste.ini new file mode 100644 index 0000000..bdadb27 --- /dev/null +++ b/docker.apipaste.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 \ No newline at end of file diff --git a/docker.neutron.conf b/docker.neutron.conf new file mode 100644 index 0000000..c2aedf7 --- /dev/null +++ b/docker.neutron.conf @@ -0,0 +1,34 @@ +[DEFAULT] +lock_path = $state_path/lock +core_plugin = quark.plugin.Plugin +auth_strategy = noauth +fake_rabbit = false +rpc_backend = rabbit +log_dir: "/var/log/neutron" +use_syslog: "True" +syslog_log_facility: "LOG_LOCAL0" + +[DATABASE] +connection = mysql://root:password@docker-mysql/neutron?charset=utf8 +reconnect_interval = 5 +auto_create_schema = False +min_pool_size = 100 +max_pool_size = 500 +max_overflow = 500 + +[QUARK] +public_net_id=00000000-0000-0000-0000-000000000000 +net_driver=quark.drivers.unmanaged.UnmanagedDriver +default_net_strategy='{"00000000-0000-0000-0000-000000000000": {"bridge": "publicnet"}, "11111111-1111-1111-1111-111111111111": {"bridge": "servicenet"}}' +default_network_type=UNMANAGED +# IPAM recycling interval, in seconds +ipam_reuse_after= 300 +ipam_retry=1 +show_subnet_ip_policy_id = False +show_allocation_pools = True +pessimistic_connection_pooling = True +environment_capabilities = "" + +[oslo_messaging_notifications] +driver = messaging +transport_url = 'rabbit://admin:password@docker-rabbitmq:5672/' \ No newline at end of file diff --git a/docker.policy.json b/docker.policy.json new file mode 100644 index 0000000..b12ae6d --- /dev/null +++ b/docker.policy.json @@ -0,0 +1,222 @@ +{ + "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", + "create_subnet:segment_id": "rule:admin_only", + "get_subnet": "rule:admin_or_owner or rule:shared", + "get_subnet:segment_id": "rule:admin_only", + "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", + + "create_segment": "rule:admin_only", + "get_segment": "rule:admin_only", + "update_segment": "rule:admin_only", + "delete_segment": "rule:admin_only", + + "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_policy_dscp_marking_rule": "rule:regular_user", + "create_policy_dscp_marking_rule": "rule:admin_only", + "delete_policy_dscp_marking_rule": "rule:admin_only", + "update_policy_dscp_marking_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" +} \ No newline at end of file diff --git a/docker_down.sh b/docker_down.sh new file mode 100755 index 0000000..0a2d61d --- /dev/null +++ b/docker_down.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +echo "Mysql: Stopping & Deleting Container..." +docker stop mysql +docker rm mysql +echo "Mysql: Complete" +echo "-----------------------" +echo " " + +echo "PHPMyAdmin: Stopping & Deleting Container..." +docker stop phpmyadmin +docker rm phpmyadmin +echo "PHPMyAdmin: Complete" +echo "-----------------------" +echo " " + +echo "ELK: Stopping & Deleting Container..." +docker stop kibana +docker rm kibana +echo "ELK: Complete" +echo "-----------------------" +echo " " + +echo "RabbitMQ: Stopping & Deleting Container..." +docker stop rabbitmq +docker rm rabbitmq +echo "RabbitMQ: Complete" +echo "-----------------------" +echo " " + +echo "Redis: Stopping & Deleting Container..." +docker stop redis +docker rm redis +echo "Redis: Complete" +echo "-----------------------" +echo " " + +echo "Redis Sentinel: Stopping & Deleting Container..." +docker stop redis-sentinel +docker rm redis-sentinel +echo "Redis Sentinel: Complete" +echo "-----------------------" +echo " " + +echo "Neutron/Quark: Stopping & Deleting Container..." +docker stop quark +docker rm quark +echo "Neutron/Quark: Complete" +echo "-----------------------" +echo " " \ No newline at end of file diff --git a/docker_reload.sh b/docker_reload.sh new file mode 100755 index 0000000..9b1219b --- /dev/null +++ b/docker_reload.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +echo "Neutron/Quark: Stopping & Deleting Container..." +docker stop quark +docker rm quark +echo "Neutron/Quark: Complete" +echo "-----------------------" +echo " " + +echo "Neutron/Quark: Starting Container..." +docker run -d -v $(pwd):/opt/quark -v ~/neutron:/opt/configs -p 9696:9696 --link mysql:docker-mysql --link kibana:docker-kibana --link rabbitmq:docker-rabbitmq --link redis-sentinel:docker-redis-sentinel --name quark stajkowski/quark +echo "Neutron/Quark - Complete - http://localhost:9696" \ No newline at end of file diff --git a/docker_up.sh b/docker_up.sh new file mode 100755 index 0000000..257ccb5 --- /dev/null +++ b/docker_up.sh @@ -0,0 +1,85 @@ +#!/bin/bash +# To build a new container +# docker build -t quark . + +echo "Mysql: Starting Container..." +docker run -d --restart=always -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql + +echo "Mysql: Waiting for Mysql to Start..." +# Need to wait for DB to standup +sleep 30 +echo "Mysql: Complete - PORT 3306" +echo "------------------------------------------" +echo " " + +echo "PHPMyAdmin: Starting Container..." +docker run -d --restart=always --name phpmyadmin --link mysql:mysql -p 8081:80 nazarpc/phpmyadmin +echo "PHPMyAdmin: Complete - http://localhost:8081" +echo "------------------------------------------" +echo " " + +echo "ELK: Starting Container..." +docker run --restart=always --name kibana -d -p 514:514 -p 514:514/udp -p 8083:5601 -v /etc/localtime:/etc/localtime:ro pschiffe/rsyslog-elasticsearch-kibana +echo "ELK: Complete - http://localhost:8083" +echo "------------------------------------------" +echo " " + +echo "RabbitMQ: Starting Container..." +docker run -d --restart=always --hostname baserabbitmq -p 8080:15672 -p 5671-5672:5671-5672 -p 15671:15671 -p 4369:4369 -p 25672:25672 --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_ERLANG_COOKIE='w9efn934ht34t3' rabbitmq:3-management +echo "RabbitMQ: Complete - http://localhost:8080" +echo "------------------------------------------" +echo " " + +echo "Redis: Starting Master Container..." +docker run -d --restart=always -p 80:80 -v ~/data/redis0:/data --name=redis stajkowski/redis-master +echo "Redis: Complete - PORT 80" +echo "------------------------------------------" +echo " " + +echo "Redis Sentinel: Starting Sentinel Container..." +docker run -d --restart=always -p 6380:6380 -v ~/data/redis0:/data --link redis:docker-redis --name=redis-sentinel stajkowski/redis-sentinel +echo "Redis Sentinel: Complete - PORT 6380" +echo "------------------------------------------" +echo " " + +echo "Neutron/Quark: Starting Container..." +docker run -d -v $(pwd):/opt/quark -v ~/neutron:/opt/configs -p 9696:9696 --link mysql:docker-mysql --link kibana:docker-kibana --link rabbitmq:docker-rabbitmq --link redis-sentinel:docker-redis-sentinel --name quark stajkowski/quark +# docker run --entrypoint /bin/bash -v $(pwd):/opt/quark -v ~/neutron:/opt/configs -p 9696:9696 --link mysql:docker-mysql --link kibana:docker-kibana --link rabbitmq:docker-rabbitmq --link redis-sentinel:docker-redis-sentinel --name quark stajkowski/quark +echo "Neutron/Quark: Waiting for Neutron to Start..." +# Need to wait for DB to standup +sleep 180 +echo "Neutron/Quark: Complete - http://localhost:9696" +echo "------------------------------------------" +echo " " + +echo "Creating Networks..." +echo "------------------------------------------" +echo "Creating Mac Range..." +echo " " +curl -X POST -H "Content-Type: application/json" -d '{"mac_address_range": {"cidr" : "AA:BB:CC", "tenant_id": "provider"}}' http://localhost:9696/v2.0/mac_address_ranges.json +echo " " +echo "Creating Network..." +echo " " +curl -X POST -H "Content-Type: application/json" -d '{"network": {"id": "00000000-0000-0000-0000-000000000000", "tenant_id": "provider", "name": "public"}}' http://localhost:9696/v2.0/networks +echo " " +echo "Creating Subnets..." +echo " " +curl -X POST -H "Content-Type: application/json" -d '{"subnet": {"network_id": "00000000-0000-0000-0000-000000000000", "segment_id": "blah", "cidr": "10.1.0.0/16", "tenant_id": "derp", "ip_version": "4"}}' http://localhost:9696/v2.0/subnets +echo " " +curl -X POST -H "Content-Type: application/json" -d '{"subnet": {"network_id": "00000000-0000-0000-0000-000000000000", "segment_id": "blah", "cidr": "10.2.0.0/16", "tenant_id": "derp", "ip_version": "4"}}' http://localhost:9696/v2.0/subnets +echo " " +curl -X POST -H "Content-Type: application/json" -d '{"subnet": {"network_id": "00000000-0000-0000-0000-000000000000", "segment_id": "blah", "cidr": "10.3.0.0/16", "tenant_id": "derp", "ip_version": "4"}}' http://localhost:9696/v2.0/subnets +echo " " +curl -X POST -H "Content-Type: application/json" -d '{"subnet": {"network_id": "00000000-0000-0000-0000-000000000000", "segment_id": "blah", "cidr": "10.4.0.0/16", "tenant_id": "derp", "ip_version": "4"}}' http://localhost:9696/v2.0/subnets +echo " " +echo "Create Networks: Complete - http://localhost:9696" +echo "------------------------------------------" +echo " MAC Range: AA:BB:CC" +echo " NETWORK: 00000000-0000-0000-0000-000000000000" +echo " CIDR: 10.1.0.0/16 SEGMENT_ID: blah TENANT_ID: derp" +echo " CIDR: 10.2.0.0/16 SEGMENT_ID: blah TENANT_ID: derp" +echo " CIDR: 10.3.0.0/16 SEGMENT_ID: blah TENANT_ID: derp" +echo " CIDR: 10.4.0.0/16 SEGMENT_ID: blah TENANT_ID: derp" +echo "------------------------------------------" +echo " COMPLETE!!" +echo "------------------------------------------" \ No newline at end of file