From 5a14ee34314b6d500c63dc19523ee4748734c8c0 Mon Sep 17 00:00:00 2001 From: Guo Ruijing Date: Wed, 10 May 2017 15:05:30 -0700 Subject: setup onap demo by vagrant Change-Id: I7d46f7f6081e7aed0cc2ea2506a47925171f9be2 Co-Authored-By: Chen, Wei Signed-off-by: Guo Ruijing --- vagrant/README.md | 21 +++++++++++++++++++++ vagrant/Vagrantfile | 43 ++++++++++++++++++++++++++++++++++++++++++ vagrant/bootstrap.sh | 14 ++++++++++++++ vagrant/compute.conf | 23 +++++++++++++++++++++++ vagrant/control.conf | 30 +++++++++++++++++++++++++++++ vagrant/create_onap.sh | 40 +++++++++++++++++++++++++++++++++++++++ vagrant/openrc | 4 ++++ vagrant/run_demo.sh | 17 +++++++++++++++++ vagrant/setup_compute.sh | 17 +++++++++++++++++ vagrant/setup_control.sh | 26 +++++++++++++++++++++++++ vagrant/setup_proxy.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 284 insertions(+) create mode 100644 vagrant/README.md create mode 100644 vagrant/Vagrantfile create mode 100644 vagrant/bootstrap.sh create mode 100644 vagrant/compute.conf create mode 100644 vagrant/control.conf create mode 100755 vagrant/create_onap.sh create mode 100644 vagrant/openrc create mode 100755 vagrant/run_demo.sh create mode 100644 vagrant/setup_compute.sh create mode 100644 vagrant/setup_control.sh create mode 100755 vagrant/setup_proxy.sh diff --git a/vagrant/README.md b/vagrant/README.md new file mode 100644 index 00000000..7473beae --- /dev/null +++ b/vagrant/README.md @@ -0,0 +1,21 @@ +Demo +==== + +ONAP demo is created by vagrant. It is verified to work in Ubuntu 16.04 64bit +with 125G memory & 1T disk. + +Setup +----- + +./run_demo.sh + +Cleanup +------- + +vagrant destroy -f + +Proxy +----- + +Proxy setup is optional. If setup is behind sock5 proxy, SOCKS5_IP, SOCKS5_PORT +and DNS_SERVER is updated and ./setup_proxy is run before running demo. diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile new file mode 100644 index 00000000..46e1fc2f --- /dev/null +++ b/vagrant/Vagrantfile @@ -0,0 +1,43 @@ +$num_compute_nodes = 1 + +Vagrant.configure("2") do |config| + + config.vm.box = "bento/ubuntu-16.04" + + config.vm.provider :virtualbox do |vb| + vb.customize ["modifyvm", :id, "--memory", 8192] + vb.customize ["modifyvm", :id, "--cpus", 8] + vb.customize ['modifyvm', :id, '--natnet1', '192.168.240.0/24'] + vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"] + vb.customize "post-boot",["controlvm", :id, "setlinkstate1", "on"] + end + + config.vm.provision "shell", path: "bootstrap.sh", privileged: false + config.vm.synced_folder "..", "/demo" + + config.vm.define "control" do |config| + config.vm.hostname = "control" + config.vm.network "private_network", ip: "192.168.0.10" + config.vm.network "private_network", ip: "192.168.1.10" + config.vm.provision "shell", path: "setup_control.sh", privileged: false + end + + (1 .. $num_compute_nodes).each do |n| + config.vm.define vm_name = "compute-#{n}" do |config| + config.vm.hostname = vm_name + config.vm.network "private_network", ip: "192.168.0.#{n+20}" + config.vm.network "private_network", ip: "192.168.1.#{n+20}" + config.vm.provision "shell", path: "setup_compute.sh", privileged: false + config.vm.provider :virtualbox do |v| + v.customize ["modifyvm", :id, "--memory", 81920] + v.customize ["modifyvm", :id, "--cpus", 8] + file_to_disk1 = "large_disk_file.#{n}.vdi1" + v.customize ['createhd', '--filename', file_to_disk1, '--size', 1000 * 1024] + v.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', file_to_disk1 ] + file_to_disk2 = "large_disk_file.#{n}.vdi2" + v.customize ['createhd', '--filename', file_to_disk2, '--size', 1000 * 1024] + v.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk2 ] + end + end + end +end diff --git a/vagrant/bootstrap.sh b/vagrant/bootstrap.sh new file mode 100644 index 00000000..fea28a5e --- /dev/null +++ b/vagrant/bootstrap.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -ex + +sudo apt-get update -y +sudo apt-get install git -y +git clone https://github.com/openstack-dev/devstack +cd devstack; git checkout stable/newton +sudo apt-get install openvswitch-switch -y +sudo ovs-vsctl add-br br-ex +inet=$(ip a | grep 'inet.*enp0s9' | cut -f6 -d' ') +sudo ip addr flush enp0s9 +sudo ovs-vsctl add-port br-ex enp0s9 +sudo ifconfig br-ex $inet up +echo "source /vagrant/openrc" >> $HOME/.bash_profile diff --git a/vagrant/compute.conf b/vagrant/compute.conf new file mode 100644 index 00000000..e692b82c --- /dev/null +++ b/vagrant/compute.conf @@ -0,0 +1,23 @@ +[[local|localrc]] +SCREEN_LOGDIR=/opt/stack/log +LOGFILE=stack.sh.log +LOG_COLOR=False + +HOST_IP=HOSTIP +HOST_NAME=HOSTNAME +SERVICE_HOST=192.168.0.10 +SERVICE_HOST_NAME=control +DATABASE_HOST=$SERVICE_HOST + +ADMIN_PASSWORD=admin +SERVICE_PASSWORD=admin +DATABASE_PASSWORD=mysql +RABBIT_PASSWORD=rabbit + +ENABLED_SERVICES=n-cpu,n-novnc,rabbit,q-agt,c-vol,mysql +LIBVIRT_TYPE=qemu + +# Open vSwitch provider networking configuration +Q_USE_PROVIDERNET_FOR_PUBLIC=True +OVS_BRIDGE_MAPPINGS=public:br-ex +OVS_PHYSICAL_BRIDGE=br-ex diff --git a/vagrant/control.conf b/vagrant/control.conf new file mode 100644 index 00000000..2e74f6fc --- /dev/null +++ b/vagrant/control.conf @@ -0,0 +1,30 @@ +[[local|localrc]] +SCREEN_LOGDIR=/opt/stack/log +LOGFILE=stack.sh.log +LOG_COLOR=False + +HOST_IP=192.168.0.10 +HOST_NAME=control +SERVICE_HOST=192.168.0.10 +SERVICE_HOST_NAME=control + +ADMIN_PASSWORD=admin +SERVICE_PASSWORD=admin +DATABASE_PASSWORD=mysql +RABBIT_PASSWORD=rabbit + +disable_service n-net +disable_service tempest +disable_service c-vol +ENABLED_SERVICES+=q-svc,q-dhcp,q-meta,q-agt,q-l3 +ENABLED_SERVICES+=,h-eng,h-api,h-api-cfn,h-api-cw + +## Neutron options +Q_L3_ENABLED=True +NEUTRON_CREATE_INITIAL_NETWORKS=False + +# Open vSwitch provider networking configuration +Q_USE_PROVIDERNET_FOR_PUBLIC=True +OVS_BRIDGE_MAPPINGS=public:br-ex +OVS_PHYSICAL_BRIDGE=br-ex + diff --git a/vagrant/create_onap.sh b/vagrant/create_onap.sh new file mode 100755 index 00000000..e201d500 --- /dev/null +++ b/vagrant/create_onap.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +set -ex + +source /vagrant/openrc +cp /demo/heat/OpenECOMP/* . + +# Parameters used across all ONAP components +pub_net=$(openstack network list -f value|grep public | cut -f1 -d' ') +sed -i "s/public_net_id:.*/public_net_id: $pub_net/" onap_openstack.env +sed -i "s/ubuntu_1404_image:.*/ubuntu_1404_image: ubuntu1404/" onap_openstack.env +sed -i "s/ubuntu_1604_image:.*/ubuntu_1604_image: ubuntu1604/" onap_openstack.env +sed -i "s/flavor_small:.*/flavor_small: m1.small/" onap_openstack.env +sed -i "s/flavor_medium:.*/flavor_medium: m1.medium/" onap_openstack.env +sed -i "s/flavor_large:.*/flavor_large: m1.large/" onap_openstack.env +sed -i "s/flavor_xlarge:.*/flavor_xlarge: m1.xlarge/" onap_openstack.env +rm -rf onap onap.pub +ssh-keygen -t rsa -N '' -f onap +cp onap onap.pub /vagrant +pub_key=$(cat onap.pub) +sed -i "s,pub_key:.*,pub_key: $pub_key," onap_openstack.env +tenant=$(openstack project list -f value | grep " admin" | cut -f1 -d' ') +sed -i "s/openstack_tenant_id:.*/openstack_tenant_id: $tenant/" onap_openstack.env +sed -i "s/openstack_username:.*/openstack_username: admin/" onap_openstack.env +sed -i "s/openstack_api_key:.*/openstack_api_key: apikey/" onap_openstack.env +sed -i "s,horizon_url:.*,horizon_url: http://192.168.0.10/dashboard," onap_openstack.env +sed -i "s,keystone_url:.*,keystone_url: http://192.168.0.10/identity/," onap_openstack.env + +# Network parameters +sed -i "s/external_dns:.*/external_dns: 8.8.8.8/" onap_openstack.env + +openstack stack create -t onap_openstack.yaml -e onap_openstack.env ONAP + +sleep 180 +vms=$(grep "_vm:" onap_openstack.yaml | cut -f1 -d"_") +sudo rm -rf /vagrant/hosts +for vm in $vms +do + ip=$(openstack server list --name $vm -f yaml | grep Networks | cut -f2 -d",") + echo "$ip $vm.api.simpledemo.openecomp.org" >> /vagrant/hosts +done diff --git a/vagrant/openrc b/vagrant/openrc new file mode 100644 index 00000000..9ffe018b --- /dev/null +++ b/vagrant/openrc @@ -0,0 +1,4 @@ +export OS_PROJECT_NAME=admin +export OS_USERNAME=admin +export OS_PASSWORD=admin +export OS_AUTH_URL=http://192.168.0.10:5000/v2.0 diff --git a/vagrant/run_demo.sh b/vagrant/run_demo.sh new file mode 100755 index 00000000..e99b28d7 --- /dev/null +++ b/vagrant/run_demo.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -ex + +sudo apt-get install -y virtualbox +ver=$(apt-cache policy vagrant | grep Installed | cut -d ':' -f 3) +if [[ "$ver" != "1.8.7" ]]; then + wget --no-check-certificate https://releases.hashicorp.com/vagrant/1.8.7/vagrant_1.8.7_x86_64.deb + sudo dpkg -i vagrant_1.8.7_x86_64.deb +fi + +vagrant destroy -f +vagrant up +vagrant ssh control -c "/vagrant/create_onap.sh" +sudo sed -i "/.*simpledemo.openecomp.org.*/d" /etc/hosts +cat hosts | sudo tee -a /etc/hosts +sleep 300 +ssh -o StrictHostKeyChecking=no ubuntu@portal.api.simpledemo.openecomp.org -i onap "curl sina.com.cn" diff --git a/vagrant/setup_compute.sh b/vagrant/setup_compute.sh new file mode 100644 index 00000000..0c3eba7b --- /dev/null +++ b/vagrant/setup_compute.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -ex + +cd devstack +cp /vagrant/compute.conf local.conf +host=$(hostname) +ip=$(ifconfig | grep 192.168.0 | cut -f2 -d: | cut -f1 -d' ') +sed -i -e "s/HOSTIP/$ip/" -e "s/HOSTNAME/$host/" local.conf +./stack.sh + +sudo pvcreate /dev/sdb +sudo vgextend vagrant-vg /dev/sdb +sudo lvextend -L +800G /dev/mapper/vagrant--vg-root +sudo resize2fs /dev/mapper/vagrant--vg-root + +sudo pvcreate /dev/sdc +sudo vgextend stack-volumes-lvmdriver-1 /dev/sdc diff --git a/vagrant/setup_control.sh b/vagrant/setup_control.sh new file mode 100644 index 00000000..6ff364f6 --- /dev/null +++ b/vagrant/setup_control.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -ex + +cd devstack +cp /vagrant/control.conf local.conf +./stack.sh + +source /vagrant/openrc + +openstack network create public --external --provider-network-type=flat --provider-physical-network=public +openstack subnet create --network=public --subnet-range=192.168.1.0/24 --allocation-pool start=192.168.1.200,end=192.168.1.250 --gateway 192.168.1.1 public-subnet +openstack security group list -f value | cut -f1 -d" " | xargs -I {} openstack security group rule create --ingress --ethertype=IPv4 --protocol=0 {} + +wget https://cloud-images.ubuntu.com/releases/14.04.1/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img +wget https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img +openstack image create ubuntu1404 --file ubuntu-14.04-server-cloudimg-amd64-disk1.img --disk-format qcow2 +openstack image create ubuntu1604 --file ubuntu-16.04-server-cloudimg-amd64-disk1.img --disk-format qcow2 + +openstack quota set admin --instances 30 +openstack quota set admin --cores 45 +openstack quota set admin --ram 61440 + +openstack flavor delete m1.large +openstack flavor create --public m1.large --id auto --ram 6144 --vcpus 3 --disk 80 +openstack flavor delete m1.xlarge +openstack flavor create --public m1.xlarge --id auto --ram 6144 --vcpus 4 --disk 100 diff --git a/vagrant/setup_proxy.sh b/vagrant/setup_proxy.sh new file mode 100755 index 00000000..2161f295 --- /dev/null +++ b/vagrant/setup_proxy.sh @@ -0,0 +1,49 @@ +#!/bin/sh +set -ex + +SOCKS5_IP=${SOCKS5_IP:-127.0.0.1} +SOCKS5_PORT=${SOCKS5:-1080} +DNS_SERVER=${DNS_SERVER:-10.248.2.5} + +sudo apt-get install -y redsocks iptables + +cat <