diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 4c542b7..0000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,271 +0,0 @@
-def filename = 'manifest-${branch}.xml'
-def manifestUrl = 'https://gerrit.opencord.org/manifest'
-def config = null;
-
-node ('master') {
-    checkout changelog: false, poll: false, scm: [$class: 'RepoScm', currentBranch: true, manifestBranch: params.branch, manifestRepositoryUrl: "${manifestUrl}", quiet: true]
-
-    stage ("Generate and Copy Manifest file") {
-        sh returnStdout: true, script: 'repo manifest -r -o ' + filename
-        sh returnStdout: true, script: 'cp ' + filename + ' ' + env.JENKINS_HOME + '/tmp'
-    }
-
-    stage ("Parse deployment configuration file") {
-        sh returnStdout: true, script: 'rm -rf ${configRepoBaseDir}'
-        sh returnStdout: true, script: 'git clone -b ${branch} ${configRepoUrl}'
-        config = readYaml file: "${configRepoBaseDir}${configRepoFile}"
-    }
-}
-
-node ("${config.dev_node.name}") {
-    timeout (time: 240) {
-        stage ('Checkout cord repo') {
-            checkout changelog: false, poll: false, scm: [$class: 'RepoScm', currentBranch: true, manifestBranch: params.branch, manifestRepositoryUrl: "${manifestUrl}", quiet: true]
-        }
-
-        dir('build') {
-            try {
-                stage ("Re-deploy head node and Build Vagrant box") {
-                    parallel(
-                        maasOps: {
-                            sh "maas login maas http://${config.maas.ip}/MAAS/api/2.0 ${config.maas.api_key}"
-                            sh "maas maas machine release ${config.maas.head_system_id}"
-
-                            timeout(time: 15) {
-                                waitUntil {
-                                   try {
-                                        sh "maas maas machine read ${config.maas.head_system_id} | grep Ready"
-                                        return true
-                                    } catch (exception) {
-                                        return false
-                                    }
-                                }
-                            }
-
-                            sh 'maas maas machines allocate'
-                            sh "maas maas machine deploy ${config.maas.head_system_id}"
-
-                            timeout(time: 30) {
-                                waitUntil {
-                                   try {
-                                        sh "maas maas machine read ${config.maas.head_system_id} | grep Deployed"
-                                        return true
-                                    } catch (exception) {
-                                        return false
-                                    }
-                                }
-                            }
-
-                        }, vagrantOps: {
-                            sh 'vagrant up corddev'
-                        }, failFast : true
-                    )
-                }
-
-                stage ("Fetch CORD packages") {
-                    sh "vagrant ssh -c \"cd /opt/cord/build; ./gradlew fetch\" corddev"
-                }
-
-                stage ("Build CORD Images") {
-                    sh "vagrant ssh -c \"cd /opt/cord/build; ./gradlew buildImages\" corddev"
-                }
-
-                stage ("Downloading CORD POD configuration") {
-                    sh "vagrant ssh -c \"cd /opt/cord/build/config; git clone -b ${branch} ${config.pod_config.repo_url}\" corddev"
-                }
-
-                stage ("Publish to headnode") {
-                    sh "vagrant ssh -c \"cd /opt/cord/build; ./gradlew -PtargetReg=${config.head.ip}:5000 -PdeployConfig=config/pod-configs/${config.pod_config.file_name} publish\" corddev"
-                }
-
-                stage ("Deploy") {
-                    sh "vagrant ssh -c \"cd /opt/cord/build; ./gradlew -PtargetReg=${config.head.ip}:5000 -PdeployConfig=config/pod-configs/${config.pod_config.file_name} deploy\" corddev"
-                }
-
-                stage ("Power cycle compute nodes") {
-                    for(int i=0; i < config.compute_nodes.size(); i++) {
-                        sh "ipmitool -U ${config.compute_nodes[i].ipmi.user} -P ${config.compute_nodes[i].ipmi.pass} -H ${config.compute_nodes[i].ipmi.ip} power cycle"
-                    }
-                }
-
-                stage ("Wait for compute nodes to get deployed") {
-                    sh "ssh-keygen -f /home/${config.dev_node.user}/.ssh/known_hosts -R ${config.head.ip}"
-                    def cordApiKey = runCmd("${config.head.ip}",
-                                            "${config.head.user}",
-                                            "${config.head.pass}",
-                                            "sudo maas-region-admin apikey --username ${config.head.user}")
-                    runCmd("${config.head.ip}",
-                           "${config.head.user}",
-                           "${config.head.pass}",
-                           "maas login pod-maas http://${config.head.ip}/MAAS/api/1.0 ${cordApiKey}")
-                    timeout(time: 45) {
-                        waitUntil {
-                            try {
-                                num = runCmd("${config.head.ip}",
-                                             "${config.head.user}",
-                                             "${config.head.pass}",
-                                             "maas pod-maas nodes list | grep -i deployed | wc -l").trim()
-                                return num.toInteger() == config.compute_nodes.size()
-                            } catch (exception) {
-                                return false
-                            }
-                        }
-                    }
-                }
-
-                stage ("Wait for compute nodes to be provisioned") {
-                    timeout(time:45) {
-                        waitUntil {
-                            try {
-                                num = runCmd("${config.head.ip}",
-                                             "${config.head.user}",
-                                             "${config.head.pass}",
-                                             "cord prov list '|' grep -i node '|' grep -i complete '|' wc -l").trim()
-                                return num.toInteger() == config.compute_nodes.size()
-                            } catch (exception) {
-                                return false
-                            }
-                        }
-                    }
-                }
-
-                if (config.fabric_switches != null) {
-                    stage("Reserve IPs for fabric switches and restart maas-dhcp service") {
-                        for(int i=0; i < config.fabric_switches.size(); i++) {
-                            def append = "";
-                            if (i!=0) {
-                                append = "-a";
-                            }
-                            def str = createMACIPbindingStr(i+1,
-                                                           "${config.fabric_switches[i].mac}",
-                                                           "${config.fabric_switches[i].ip}")
-                            runCmd("${config.head.ip}",
-                                    "${config.head.user}",
-                                    "${config.head.pass}",
-                                    "echo -e $str '|' sudo tee $append /etc/dhcp/dhcpd.reservations > /dev/null")
-                        }
-                        runCmd("${config.head.ip}",
-                               "${config.head.user}",
-                               "${config.head.pass}",
-                               "sudo restart maas-dhcpd")
-
-                        runCmd("${config.head.ip}",
-                               "${config.head.user}",
-                               "${config.head.pass}",
-                               "cord harvest go")
-                    }
-
-                    stage ("Wait for fabric switches to get deployed") {
-                        for(int i=0; i < config.fabric_switches.size(); i++) {
-                            runFabricCmd("${config.head.ip}",
-                                         "${config.head.user}",
-                                         "${config.head.pass}",
-                                         "${config.fabric_switches[i].ip}",
-                                         "${config.fabric_switches[i].user}",
-                                         "${config.fabric_switches[i].pass}",
-                                         "sudo onl-onie-boot-mode install")
-
-                            runFabricCmd("${config.head.ip}",
-                                         "${config.head.user}",
-                                         "${config.head.pass}",
-                                         "${config.fabric_switches[i].ip}",
-                                         "${config.fabric_switches[i].user}",
-                                         "${config.fabric_switches[i].pass}",
-                                         "sudo reboot")
-                        }
-                        timeout(time: 45) {
-                            waitUntil {
-                                try {
-                                    def harvestCompleted = runCmd("${config.head.ip}",
-                                                                  "${config.head.user}",
-                                                                  "${config.head.pass}",
-                                                                  "cord harvest list '|' grep -i fabric '|' wc -l").trim()
-                                    return harvestCompleted.toInteger() == config.fabric_switches.size()
-                                } catch (exception) {
-                                    return false
-                                }
-                            }
-                        }
-                    }
-
-                    stage ("Wait for fabric switches to be provisioned") {
-                        timeout(time:45) {
-                            waitUntil {
-                                try {
-                                    def provCompleted = 0
-                                    for(int i=0; i < config.fabric_switches.size(); i++) {
-                                        def count = runCmd("${config.head.ip}",
-                                                           "${config.head.user}",
-                                                           "${config.head.pass}",
-                                                           "cord prov list '|' grep -i ${config.fabric_switches[i].ip} '|' grep -i complete '|' wc -l").trim()
-                                        provCompleted = provCompleted + count.toInteger()
-                                    }
-                                    return provCompleted == config.fabric_switches.size()
-                                } catch (exception) {
-                                    return false
-                                }
-                            }
-                        }
-                    }
-                }
-
-                if (config.make_release == true) {
-                    stage ("Trigger Build") {
-                        url = 'https://jenkins.opencord.org/job/release-build/job/' + params.branch + '/build'
-                        httpRequest authentication: 'auto-release', httpMode: 'POST', url: url, validResponseCodes: '201'
-                    }
-                }
-
-                currentBuild.result = 'SUCCESS'
-            } catch (err) {
-                currentBuild.result = 'FAILURE'
-                step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "${notificationEmail}", sendToIndividuals: false])
-            } finally {
-                sh 'vagrant destroy -f corddev'
-                sh 'rm -rf config/pod-configs'
-            }
-            echo "RESULT: ${currentBuild.result}"
-       }
-    }
-}
-
-/**
- * Returns a string used to bind IPs and MAC addresses, substituting the values
- * given.
- *
- * @param counter the counter used to generate the host name
- * @param mac     the MAC address to substitute
- * @param ip      the IP address to substitute
- */
-def createMACIPbindingStr(counter, mac, ip) {
-    return """\\'host fabric${counter} {'\n'hardware ethernet ${mac}';''\n'fixed-address ${ip}';''\n'}\\'"""
-}
-
-/**
- * Runs a command on a remote host using sshpass.
- *
- * @param ip      the node IP address
- * @param user    the node user name
- * @param pass    the node password
- * @param command the command to run
- * @return the output of the command
- */
-def runCmd(ip, user, pass, command) {
-    return sh(returnStdout: true, script: "sshpass -p ${pass} ssh -oStrictHostKeyChecking=no -l ${user} ${ip} ${command}")
-}
-
-/**
- * Runs a command on a fabric switch.
- *
- * @param headIp         the head node IP address
- * @param headUser       the head node user name
- * @param headPass       the head node password
- * @param ip             the mgmt IP of the fabric switch, reachable from the head node
- * @param user           the mgmt user name of the fabric switch
- * @param pass           the mgmt password of the fabric switch
- * @param command        the command to run on the fabric switch
- * @return the output of the command
- */
-def runFabricCmd(headIp, headUser, headPass, ip, user, pass, command) {
-    return sh(returnStdout: true, script: "sshpass -p ${headPass} ssh -oStrictHostKeyChecking=no -l ${headUser} ${headIp} \"sshpass -p ${pass} ssh -oStrictHostKeyChecking=no -l ${user} ${ip} ${command}\"")
-}
diff --git a/Vagrantfile b/Vagrantfile
deleted file mode 100644
index d039c3b..0000000
--- a/Vagrantfile
+++ /dev/null
@@ -1,366 +0,0 @@
-# -*- mode: ruby -*-
-# vi: set ft=ruby :
-
-$cordpath = ".."
-
-Vagrant.configure(2) do |config|
-
-  config.vm.synced_folder '.', '/vagrant', disabled: true
-
-  config.vm.define "corddev" do |d|
-    d.ssh.forward_agent = true
-    d.vm.box = "ubuntu/trusty64"
-    d.vm.hostname = "corddev"
-    d.vm.network "private_network", ip: "10.100.198.200"
-    d.vm.provision :shell, path: $cordpath + "/build/scripts/bootstrap_ansible.sh"
-    d.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/cord/build/ansible/corddev.yml -c local"
-    d.vm.synced_folder $cordpath, "/opt/cord"
-    d.vm.provider "virtualbox" do |v|
-      v.memory = 2048
-    end
-    d.vm.provider :libvirt do |v, override|
-      v.memory = 2048
-      override.vm.synced_folder $cordpath, "/opt/cord", type: "nfs"
-    end
-  end
-
-  config.vm.define "prod" do |d|
-    d.vm.box = "ubuntu/trusty64"
-    d.vm.hostname = "prod"
-    d.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: '*'
-    d.vm.network "private_network", ip: "10.100.198.201"
-    d.vm.synced_folder $cordpath, "/opt/ciab"
-    d.vm.network "private_network",
-        ip: "0.0.0.0",
-        auto_config: false,
-        virtualbox__intnet: "cord-mgmt-network",
-        libvirt__network_name: "cord-mgmt-network",
-        libvirt__forward_mode: "none",
-        libvirt__dhcp_enabled: false
-    d.vm.network "private_network",
-        ip: "0.1.0.0",
-        mac: "02420a060101",
-        auto_config: false,
-        virtualbox__intnet: "head-node-leaf-1",
-        libvirt__network_name: "head-node-leaf-1",
-        libvirt__forward_mode: "none",
-        libvirt__dhcp_enabled: false
-    d.vm.provision :shell, path: $cordpath + "/build/scripts/bootstrap_ansible.sh"
-    d.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/prod.yml -c local"
-    d.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 cd /opt/ciab/build/platform-install; ansible-playbook -i inventory/head-localhost deploy-elasticstack-playbook.yml"
-    d.vm.provider "virtualbox" do |v|
-      v.memory = 2048
-    end
-    d.vm.provider :libvirt do |v, override|
-      v.memory = 24576
-      v.cpus = 8
-      v.storage :file, :size => '100G', :type => 'qcow2'
-      override.vm.synced_folder $cordpath, "/opt/ciab", type: "nfs"
-      override.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/add-extra-drive.yml -c local -i localhost,"
-    end
-  end
-
-  config.vm.define "leaf-1" do |s|
-    s.vm.box = "ubuntu/trusty64"
-    s.vm.hostname = "leaf-1"
-    s.vm.synced_folder $cordpath, "/opt/ciab"
-    s.vm.network "private_network",
-      #type: "dhcp",
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network",
-      mac: "cc37ab000011"
-    s.vm.network "private_network",
-      ip: "0.1.0.0",
-      auto_config: false,
-      virtualbox__intnet: "head-node-leaf-1",
-      libvirt__network_name: "head-node-leaf-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.2.0.0",
-      auto_config: false,
-      virtualbox__intnet: "compute-node-1-leaf-1",
-      libvirt__network_name: "compute-node-1-leaf-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.5.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-1-spine-1",
-      libvirt__network_name: "leaf-1-spine-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.6.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-1-spine-2",
-      libvirt__network_name: "leaf-1-spine-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.provision :shell, path: $cordpath + "/build/scripts/bootstrap_ansible.sh"
-    if (ENV['FABRIC'] == "1")
-      s.vm.provision :shell, path: $cordpath + "/build/scripts/install.sh", args: "-3f"
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/leafswitch.yml -c local -e 'fabric=true net_prefix=10.6.1' -i localhost,"
-    else
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/leafswitch.yml -c local -e 'net_prefix=10.6.1' -i localhost,"
-    end
-    s.vm.provider :libvirt do |v, override|
-        v.memory = 512
-        v.cpus = 1
-        override.vm.synced_folder $cordpath, "/opt/ciab", type: "nfs"
-    end
-    s.vm.provider "virtualbox" do |v, override|
-        v.memory = 512
-        v.cpus = 1
-    end
-  end
-
-  config.vm.define "leaf-2" do |s|
-    s.vm.box = "ubuntu/trusty64"
-    s.vm.hostname = "leaf-2"
-    s.vm.synced_folder $cordpath, "/opt/ciab"
-    s.vm.network "private_network",
-      #type: "dhcp",
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network",
-      mac: "cc37ab000012"
-    s.vm.network "private_network",
-      ip: "0.3.0.0",
-      auto_config: false,
-      virtualbox__intnet: "compute-node-2-leaf-2",
-      libvirt__network_name: "compute-node-2-leaf-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.4.0.0",
-      auto_config: false,
-      virtualbox__intnet: "compute-node-3-leaf-2",
-      libvirt__network_name: "compute-node-3-leaf-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.7.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-2-spine-1",
-      libvirt__network_name: "leaf-2-spine-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.8.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-2-spine-2",
-      libvirt__network_name: "leaf-2-spine-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.provision :shell, path: $cordpath + "/build/scripts/bootstrap_ansible.sh"
-    if (ENV['FABRIC'] == "1")
-      s.vm.provision :shell, path: $cordpath + "/build/scripts/install.sh", args: "-3f"
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/leafswitch.yml -c local -e 'fabric=true net_prefix=10.6.1' -i localhost,"
-    else
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/leafswitch.yml -c local -e 'net_prefix=10.6.1' -i localhost,"
-    end
-    s.vm.provider :libvirt do |v, override|
-        v.memory = 512
-        v.cpus = 1
-        override.vm.synced_folder $cordpath, "/opt/ciab", type: "nfs"
-    end
-    s.vm.provider "virtualbox" do |v, override|
-        v.memory = 512
-        v.cpus = 1
-    end
-  end
-
-  config.vm.define "spine-1" do |s|
-    s.vm.box = "ubuntu/trusty64"
-    s.vm.hostname = "spine-1"
-    s.vm.synced_folder $cordpath, "/opt/ciab"
-    s.vm.network "private_network",
-      #type: "dhcp",
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network",
-      mac: "cc37ab000021"
-    s.vm.network "private_network",
-      ip: "0.5.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-1-spine-1",
-      libvirt__network_name: "leaf-1-spine-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.7.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-2-spine-1",
-      libvirt__network_name: "leaf-2-spine-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.provision :shell, path: $cordpath + "/build/scripts/bootstrap_ansible.sh"
-    if (ENV['FABRIC'] == "1")
-      s.vm.provision :shell, path: $cordpath + "/build/scripts/install.sh", args: "-3f"
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/spineswitch.yml -c local -e 'fabric=true net_prefix=10.6.1' -i localhost,"
-    else
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/spineswitch.yml -c local -e 'net_prefix=10.6.1' -i localhost,"
-    end
-    s.vm.provider :libvirt do |v, override|
-        v.memory = 512
-        v.cpus = 1
-        override.vm.synced_folder $cordpath, "/opt/ciab", type: "nfs"
-    end
-    s.vm.provider "virtualbox" do |v, override|
-        v.memory = 512
-        v.cpus = 1
-    end
-  end
-
-  config.vm.define "spine-2" do |s|
-    s.vm.box = "ubuntu/trusty64"
-    s.vm.hostname = "spine-2"
-    s.vm.synced_folder $cordpath, "/opt/ciab"
-    s.vm.network "private_network",
-      #type: "dhcp",
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network",
-      mac: "cc37ab000022"
-    s.vm.network "private_network",
-      ip: "0.6.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-1-spine-2",
-      libvirt__network_name: "leaf-1-spine-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.network "private_network",
-      ip: "0.8.0.0",
-      auto_config: false,
-      virtualbox__intnet: "leaf-2-spine-2",
-      libvirt__network_name: "leaf-2-spine-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    s.vm.provision :shell, path: $cordpath + "/build/scripts/bootstrap_ansible.sh"
-    if (ENV['FABRIC'] == "1")
-      s.vm.provision :shell, path: $cordpath + "/build/scripts/install.sh", args: "-3f"
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/spineswitch.yml -c local -e 'fabric=true net_prefix=10.6.1' -i localhost,"
-    else
-      s.vm.provision :shell, inline: "PYTHONUNBUFFERED=1 ansible-playbook /opt/ciab/build/ansible/spineswitch.yml -c local -e 'net_prefix=10.6.1' -i localhost,"
-    end
-    s.vm.provider :libvirt do |v, override|
-        v.memory = 512
-        v.cpus = 1
-        override.vm.synced_folder $cordpath, "/opt/ciab", type: "nfs"
-    end
-    s.vm.provider "virtualbox" do |v, override|
-        v.memory = 512
-        v.cpus = 1
-    end
-  end
-
-  config.vm.define "compute-node-1" do |c|
-    c.vm.communicator = "none"
-    c.vm.hostname = "compute-node-1"
-    c.vm.network "private_network",
-      adapter: 1,
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network"
-    c.vm.network "private_network",
-      adapter: 2,         # The fabric interface for each node
-      ip: "0.2.0.0",
-      auto_config: false,
-      virtualbox__intnet: "compute-node-1-leaf-1",
-      libvirt__network_name: "compute-node-1-leaf-1",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    c.vm.provider :libvirt do |v|
-      v.memory = 8192
-      v.cpus = 4
-      v.machine_virtual_size = 100
-      v.storage :file, :size => '100G', :type => 'qcow2'
-      v.boot 'network'
-      v.boot 'hd'
-      v.nested = true
-    end
-    c.vm.provider "virtualbox" do |v, override|
-      override.vm.box = "clink15/pxe"
-      v.memory = 1048
-      v.gui = "true"
-    end
-  end
-
-  config.vm.define "compute-node-2" do |c|
-    c.vm.communicator = "none"
-    c.vm.hostname = "compute-node-2"
-    c.vm.network "private_network",
-      adapter: 1,
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network"
-    c.vm.network "private_network",
-      adapter: 2,         # The fabric interface for each node
-      ip: "0.3.0.0",
-      auto_config: false,
-      virtualbox__intnet: "compute-node-2-leaf-2",
-      libvirt__network_name: "compute-node-2-leaf-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    c.vm.provider :libvirt do |v|
-      v.memory = 8192
-      v.cpus = 4
-      v.machine_virtual_size = 100
-      v.storage :file, :size => '100G', :type => 'qcow2'
-      v.boot 'network'
-      v.boot 'hd'
-      v.nested = true
-    end
-    c.vm.provider "virtualbox" do |v, override|
-      override.vm.box = "clink15/pxe"
-      v.memory = 1048
-      v.gui = "true"
-    end
-  end
-
-  config.vm.define "compute-node-3" do |c|
-    c.vm.communicator = "none"
-    c.vm.hostname = "compute-node-3"
-    c.vm.network "private_network",
-      adapter: 1,
-      ip: "0.0.0.0",
-      auto_config: false,
-      virtualbox__intnet: "cord-mgmt-network",
-      libvirt__network_name: "cord-mgmt-network"
-    c.vm.network "private_network",
-      adapter: 2,         # The fabric interface for each node
-      ip: "0.4.0.0",
-      auto_config: false,
-      virtualbox__intnet: "compute-node-3-leaf-2",
-      libvirt__network_name: "compute-node-3-leaf-2",
-      libvirt__forward_mode: "none",
-      libvirt__dhcp_enabled: false
-    c.vm.provider :libvirt do |v|
-      v.memory = 8192
-      v.cpus = 4
-      v.machine_virtual_size = 100
-      v.storage :file, :size => '100G', :type => 'qcow2'
-      v.boot 'network'
-      v.boot 'hd'
-      v.nested = true
-    end
-    c.vm.provider "virtualbox" do |v, override|
-      override.vm.box = "clink15/pxe"
-      v.memory = 1048
-      v.gui = "true"
-    end
-  end
-
-  if Vagrant.has_plugin?("vagrant-cachier")
-    config.cache.scope = :box
-  end
-
-end
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index 885547e..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,355 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * 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.
- */
-
-
-/*
- * Copyright 2012 the original author or authors.
- *
- * 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 org.opencord.gradle.rules.*
-import org.yaml.snakeyaml.Yaml
-import org.yaml.snakeyaml.DumperOptions
-
-buildscript {
-  repositories {
-    maven {
-      url "https://plugins.gradle.org/m2/"
-    }
-  }
-  dependencies {
-    classpath "gradle.plugin.com.dorongold.plugins:task-tree:1.2.1"
-  }
-}
-
-apply plugin: "com.dorongold.task-tree"
-
-evaluationDependsOn(':maas')
-evaluationDependsOn(':onos-apps')
-evaluationDependsOn(':orchestration:xos')
-evaluationDependsOn(':platform-install')
-
-allprojects {
-    apply plugin: 'base'
-    apply plugin: 'de.gesellix.docker'
-    //apply plugin: 'com.tmiyamon.config'
-
-    docker {
-        // dockerHost = System.env.DOCKER_HOST ?: 'unix:///var/run/docker.sock'
-        // dockerHost = System.env.DOCKER_HOST ?: 'https://192.168.99.100:2376'
-        // certPath = System.getProperty('docker.cert.path') ?: "${System.getProperty('user.home')}/.docker/machine/machines/default"
-        // authConfigPlain = [
-        //   "username"       : "joe",
-        //   "password"       : "some-pw-as-needed",
-        //   "email"          : "joe@acme.com",
-        //   "serveraddress"  : "https://index.docker.io/v1/"
-        //  ]
-    }
-}
-
-ext {
-
-    // Deployment target config file (yaml format); this can be overwritten from the command line
-    // using the -PdeployConfig=<file-path> syntax.
-    deployConfig = project.hasProperty('deployConfig') ? project.getProperty('deployConfig') : './config/default.yml'
-
-    println "Using deployment config: $deployConfig"
-    File configFile = new File(deployConfig)
-    def yaml = new Yaml()
-    config = yaml.load(configFile.newReader())
-
-    // Upstream registry to simplify filling out the comps table below
-    upstreamReg = project.hasProperty('upstreamReg') ? project.getProperty('upstreamReg') : 'docker.io'
-
-    // Target registry to be used to publish docker images needed for deployment
-    targetReg = project.hasProperty('targetReg')
-        ? project.getProperty('targetReg')
-        : config.docker && config.docker.registry
-            ? config.docker.registry
-            : config.headnode.ip
-                ? config.headnode.ip + ":5000"
-                : 'localhost:5000'
-
-    // The tag used to tag the docker images push to the target registry
-    targetTag = project.hasProperty('targetTag')
-        ? project.getProperty('targetTag')
-        : config.docker && config.docker.imageVersion
-            ? config.docker.imageVersion
-            : 'candidate'
-
-    // Component table
-    comps = [
-            // ONOS 1.10.6
-            'onosproject/onos': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'onosproject/onos',
-                    'digest':   'sha256:b239993ad921f41ca9ab5dce21d7f6f0f8a74fdb888fe14c0da337202f9dced7'
-            ],
-            'nginx': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'nginx',
-                    'digest':   'sha256:b555f8c64ab4e85405e0d8b03f759b73ce88deb802892a3b155ef55e3e832806'
-            ],
-            'swarm': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'swarm',
-                    'digest':   'sha256:6ca9b40980e2fcdcd229900ec8933f3e92c14ead22c9404cb09736cb4f3a9248'
-            ],
-            'xosproject/vsg': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'xosproject/vsg',
-                    'digest':   'sha256:18d1c6ef9767d8a41c9b51948776052d024d4e3294e5d1d6dde1a49112175d91'
-            ],
-            'redis': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'redis',
-                    'digest':   'sha256:0fe5a7afa2c2154f37c8ab56a9a6c5023cb0405cc0e85b34d8dcc1de6c3f143e'
-            ],
-            // Node 7.9.0
-            'node': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'node',
-                    'digest':   'sha256:e64b0d7eeb44034d3f2c301d3050b72c1639e683d5a0fd3b8aae3d6ac4789c7a'
-            ],
-            'gliderlabs/consul-server': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'gliderlabs/consul-server',
-                    'digest':   'sha256:37e194c7c941e37cf20b0cc5080541cfde9d31bf62a874905d0d51b3945f88c9'
-            ],
-            'gliderlabs/registrator': [
-                    'type':     'image',
-                    'upstream': upstreamReg,
-                    'name':     'gliderlabs/registrator',
-                    'digest':   'sha256:6e708681dd52e28f4f39d048ac75376c9a762c44b3d75b2824173f8364e52c10'
-            ]
-    ]
-}
-
-// ---------------- Useful tasks ----------------
-
-task writeInventory(type: Copy) {
-  from 'ansible/cord-inv'
-    into 'genconfig'
-    expand([
-        headnode_ip: config.headnode.ip,
-        headnode_user: config.headnode.ansible_user,
-        headnode_pass: config.headnode.ansible_ssh_pass,
-        headnode_port: config.headnode.ansible_ssh_port,
-    ])
-}
-
-task writeYamlConfig {
-  def outvar = config.common
-  def outfilename = "genconfig/config.yml"
-
-  DumperOptions options = new DumperOptions()
-
-  options.setExplicitStart(true);
-  options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK)
-  options.setPrettyFlow(true);
-  options.setIndent(2);
-
-  def yaml = new Yaml(options)
-  Writer outfile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfilename), "utf-8"))
-
-  yaml.dump(outvar, outfile)
-  outfile.close()
-}
-
-
-task fetchUpstreamImages {
-    comps.each { name, spec -> if (spec.type == 'image') { dependsOn "fetch" + name } }
-}
-
-task fetch  {
-    dependsOn fetchUpstreamImages
-}
-
-task buildImages  {
-    logger.info "Root project has nothing to build"
-}
-
-task publishImages {
-    comps.each { name, spec -> if (spec.type == 'image') {
-            dependsOn "publish" + name
-          }
-    }
-}
-
-task publish {
-    dependsOn publishImages
-}
-
-tasks.addRule(new DockerFetchRule(project))
-tasks.addRule(new DockerPublishRule(project, project(':maas').prime))
-tasks.addRule(new DockerTagRule(project))
-
-task PIcreateConfig(type: Exec) {
-  dependsOn writeYamlConfig
-  dependsOn writeInventory
-
-  workingDir "platform-install"
-  executable = "ansible-playbook"
-  args = [ "-i", "../genconfig/cord-inv",
-    "--extra-vars", "@../genconfig/config.yml",
-    "--extra-vars", "pull_docker_tag="+targetTag,
-    "--extra-vars", "pull_docker_registry=docker-registry:5000/",
-    "cord-config-playbook.yml" ]
-}
-
-task PIcopyCord(type: Exec) {
-  dependsOn PIcreateConfig
-
-  workingDir "platform-install"
-  executable = "ansible-playbook"
-  args = [ "-i", "../genconfig/cord-inv",
-    "--extra-vars", "@../genconfig/config.yml",
-    "copy-cord-playbook.yml" ]
-}
-
-task PIcopyProfile(type: Exec) {
-  dependsOn PIcreateConfig
-
-  workingDir "platform-install"
-  executable = "ansible-playbook"
-  args = [ "-i", "../genconfig/cord-inv",
-    "--extra-vars", "@../genconfig/config.yml",
-    "copy-profile-playbook.yml" ]
-}
-
-task PIprepPlatform(type: Exec) {
-  dependsOn PIcreateConfig
-  dependsOn PIcopyCord
-  dependsOn PIcopyProfile
-
-  workingDir "platform-install"
-  executable = "ansible-playbook"
-  args = [ "-i", "../genconfig/cord-inv",
-    "--extra-vars", "@../genconfig/config.yml",
-    "prep-platform-playbook.yml" ]
-}
-
-task PIdeployOpenStack (type: Exec) {
-
-  workingDir "platform-install"
-  executable = "ansible-playbook"
-  args = [ "-i", "../genconfig/cord-inv",
-    "--extra-vars", "@../genconfig/config.yml",
-    "--extra-vars", "pull_docker_tag="+targetTag,
-    "--extra-vars", "pull_docker_registry=docker-registry:5000/",
-    "deploy-openstack-playbook.yml" ]
-}
-
-task PIdeployONOS (type: Exec) {
-
-  workingDir "platform-install"
-  executable = "ansible-playbook"
-  args = [ "-i", "../genconfig/cord-inv",
-    "--extra-vars", "@../genconfig/config.yml",
-    "--extra-vars", "pull_docker_tag="+targetTag,
-    "--extra-vars", "pull_docker_registry=docker-registry:5000/",
-    "deploy-onos-playbook.yml" ]
-}
-
-task PIdeployXOS (type: Exec) {
-  def extra_vars = "--extra-vars pull_docker_tag="+targetTag+" --extra-vars pull_docker_registry=docker-registry:5000/"
-  def ansible_cmd = "cd /opt/cord/build/platform-install; ansible-playbook -i inventory/head-localhost --extra-vars @/opt/cord/build/genconfig/config.yml "+extra_vars+" launch-xos-playbook.yml"
-
-  executable = "ssh"
-  args = ["-p", "$config.headnode.ansible_ssh_port", "$config.headnode.ansible_user@$config.headnode.ip", ansible_cmd ]
-}
-
-task PIsetupAutomation (type: Exec) {
-  def ansible_cmd = "cd /opt/cord/build/platform-install; ansible-playbook -i inventory/head-localhost --extra-vars @/opt/cord/build/genconfig/config.yml cord-automation-playbook.yml"
-
-  executable = "ssh"
-  args = ["-p", "$config.headnode.ansible_ssh_port", "$config.headnode.ansible_user@$config.headnode.ip", ansible_cmd ]
-}
-
-task PIrunDiag (type: Exec) {
-  def ansible_cmd = "cd /opt/cord/build/platform-install; ansible-playbook -i inventory/head-localhost --extra-vars @/opt/cord/build/genconfig/config.yml collect-diag-playbook.yml"
-
-  executable = "ssh"
-  args = ["-p", "$config.headnode.ansible_ssh_port", "$config.headnode.ansible_user@$config.headnode.ip", ansible_cmd ]
-}
-
-task postDeployTests (type: Exec) {
-
-  def ansible_cmd = "cd /opt/cord/build/platform-install; ansible-playbook -i inventory/head-localhost --extra-vars @/opt/cord/build/genconfig/config.yml pod-test-playbook.yml"
-
-  executable = "ssh"
-  args = ["-p", "$config.headnode.ansible_ssh_port", "$config.headnode.ansible_user@$config.headnode.ip", ansible_cmd ]
-}
-
-project(':maas').prime.dependsOn writeYamlConfig
-project(':maas').prime.dependsOn writeInventory
-
-project('onos-apps').publishMavenRepoImage.dependsOn project(':maas').prime
-project(':onos-apps').deploy.dependsOn project(':maas').deployBase
-
-project('onos-apps').publishMavenRepoImage.dependsOn project(':maas').prime
-project(':onos-apps').deploy.dependsOn project(':maas').deployBase
-
-// Ensure nginx:candidate exists
-project(':orchestration:xos').buildImages.dependsOn rootProject."tagnginx"
-
-// make PI config tasks run before maas deploy
-project(':maas').deployBase.dependsOn PIcopyProfile
-
-// For corebuilder
-project(':platform-install').buildImages.dependsOn project(':orchestration:xos').buildImages
-
-task PIdeployPlatform {
-     dependsOn PIcopyCord
-     dependsOn project(':onos-apps').deploy
-     dependsOn project(':maas').deployBase
-     dependsOn PIprepPlatform
-     dependsOn PIdeployOpenStack
-     dependsOn PIdeployONOS
-     dependsOn PIdeployXOS
-     dependsOn PIsetupAutomation
-}
-
-PIprepPlatform.mustRunAfter PIcopyCord
-PIdeployOpenStack.mustRunAfter PIprepPlatform
-PIdeployONOS.mustRunAfter PIdeployOpenStack
-PIdeployXOS.mustRunAfter PIdeployONOS
-PIsetupAutomation.mustRunAfter PIdeployXOS
-PIdeployPlatform.mustRunAfter project(':onos-apps').deploy
-PIdeployPlatform.mustRunAfter project(':maas').deployBase
-
-task deploy  {
-    dependsOn PIdeployPlatform
-}
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
deleted file mode 100644
index e9313e8..0000000
--- a/buildSrc/build.gradle
+++ /dev/null
@@ -1,49 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * 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.
- */
-
-
-/*
- * Copyright 2012 the original author or authors.
- *
- * 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.
- */
-
-apply plugin: 'groovy'
-
-repositories {
-    // maven { url 'https://repo.gradle.org/gradle/libs' }
-    maven { url 'https://plugins.gradle.org/m2/' }
-    // mavenCentral()
-}
-
-dependencies {
-    compile gradleApi()
-    compile localGroovy()
-    compile 'de.gesellix:gradle-docker-plugin:2016-05-05T13-15-11'
-    compile 'org.yaml:snakeyaml:1.10'
-    //compile 'gradle.plugin.com.tmiyamon:gradle-config:0.2.1'
-}
diff --git a/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerFetchRule.groovy b/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerFetchRule.groovy
deleted file mode 100644
index a9bb91b..0000000
--- a/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerFetchRule.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012 the original author or authors.
- *
- * 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.
- */
-
-package org.opencord.gradle.rules
-
-import org.gradle.api.Rule
-import de.gesellix.gradle.docker.tasks.DockerPullTask
-
-
-/**
- * Gradle Rule class to fetch a docker image
- */
-class DockerFetchRule implements Rule {
-
-    def project
-
-    DockerFetchRule(project) {
-        this.project = project
-    }
-
-    String getDescription() {
-        'Rule Usage: fetch<component-name>'
-    }
-
-    void apply(String taskName) {
-        if (taskName.startsWith('fetch')) {
-            project.task(taskName, type: DockerPullTask) {
-                ext.compName = taskName - 'fetch'
-                def spec = project.comps[ext.compName]
-                imageName = spec.name + '@' + spec.digest
-            }
-        }
-    }
-}
diff --git a/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerPublishRule.groovy b/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerPublishRule.groovy
deleted file mode 100644
index 39b6bba..0000000
--- a/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerPublishRule.groovy
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2012 the original author or authors.
- *
- * 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.
- */
-
-package org.opencord.gradle.rules
-
-import org.gradle.api.Rule
-import de.gesellix.gradle.docker.tasks.DockerPushTask
-
-
-/**
- * Gradle Rule class to publish (push) a docker image to a private repo
- */
-class DockerPublishRule implements Rule {
-
-    def project
-    def dependency
-
-    DockerPublishRule(project) {
-        this.project = project
-    }
-
-    DockerPublishRule(project, dependency) {
-        this.project = project
-        this.dependency = dependency
-    }
-
-    String getDescription() {
-        'Rule Usage: publish<component-name>'
-    }
-
-    void apply(String taskName) {
-        if (taskName.startsWith('publish')) {
-            project.task(taskName, type: DockerPushTask) {
-                ext.compName = taskName - 'publish'
-                println "Publish rule: $taskName + $compName"
-                def tagTask = "tag$compName"
-                println "Tagtask: $tagTask"
-                if (dependency) {
-                    dependsOn dependency
-                }
-                dependsOn tagTask
-                def spec = project.comps[ext.compName]
-                repositoryName = spec.name + ':' + project.targetTag
-                registry = project.targetReg
-            }
-        }
-    }
-}
diff --git a/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerTagRule.groovy b/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerTagRule.groovy
deleted file mode 100644
index 474e16d..0000000
--- a/buildSrc/src/main/groovy/org/opencord/gradle/rules/DockerTagRule.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2012 the original author or authors.
- *
- * 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.
- */
-
-package org.opencord.gradle.rules
-
-import org.gradle.api.Rule
-import de.gesellix.gradle.docker.tasks.DockerTagTask
-
-
-/**
- * Gradle Rule class to tag a docker image
- */
-class DockerTagRule implements Rule {
-
-    def project
-
-    DockerTagRule(project) {
-        this.project = project
-    }
-
-    String getDescription() {
-        'Rule Usage: tag<component-name>'
-    }
-
-    void apply(String taskName) {
-        if (taskName.startsWith('tag') && !taskName.equals('tag')) {
-            project.task(taskName, type: DockerTagTask) {
-                ext.compName = taskName - 'tag'
-                def spec = project.comps[compName]
-                imageId = spec.name + '@' + spec.digest
-                tag = compName + ':' + project.targetTag
-            }
-        }
-    }
-}
diff --git a/buildSrc/src/main/groovy/org/opencord/gradle/rules/GitSubmoduleUpdateRule.groovy b/buildSrc/src/main/groovy/org/opencord/gradle/rules/GitSubmoduleUpdateRule.groovy
deleted file mode 100644
index 3b46424..0000000
--- a/buildSrc/src/main/groovy/org/opencord/gradle/rules/GitSubmoduleUpdateRule.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2012 the original author or authors.
- *
- * 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.
- */
-
-package org.opencord.gradle.rules
-
-import org.gradle.api.Rule
-import org.gradle.api.tasks.Exec
-
-
-/**
- * Gradle Rule class to fetch a docker image
- */
-class GitSubmoduleUpdateRule implements Rule {
-
-    def project
-
-    GitSubmoduleUpdateRule(project) {
-        this.project = project
-    }
-
-    String getDescription() {
-        'Rule Usage: gitupdate<component-name>'
-    }
-
-    void apply(String taskName) {
-        if (taskName.startsWith('gitupdate')) {
-            project.task(taskName, type: Exec) {
-                ext.compName = taskName - 'gitupdate'
-                def spec = project.comps[ext.compName]
-                workingDir = '.'
-                commandLine '/usr/bin/git', 'submodule', 'update', '--init', '--recursive', spec.componentDir
-            }
-        }
-    }
-}
diff --git a/config/cord_in_a_box.yml b/config/cord_in_a_box.yml
deleted file mode 100644
index c43361c..0000000
--- a/config/cord_in_a_box.yml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-
-# Deployment configuration for VirtualBox based head node.
-#
-# This deployment configuration can be utilized with the head node created
-# via `vagrant up headnode` from the gerrit.opencord.org/maas repository.
----
-debug: false
-
-# this is used to generate the genconfig/cord-inv file
-headnode:
-  ip: '10.100.198.201'
-  ansible_user: 'vagrant'
-  ansible_ssh_pass: 'vagrant'
-  ansible_ssh_port: 22
-
-common:
-  # all of these are written to genconfig/config.yml, and needs a rework
-
-  # set to the "flavor" of cord you want to install
-  cord_profile: 'rcord'
-
-  # cord dir is shared to corddev VM, may need redirection to work
-  credentials_dir: '/opt/credentials'
-  pki_dir: '/opt/pki'
-  ssh_pki_dir: '/opt/ssh_pki'
-
-  # Specifies tasks within the head node provisioning not to execute, including:
-  #
-  # switch_support -   don't download the switch ONL images as there are no
-  #                    switches in this configuration
-  # interface_config - don't update the network configuration of the headnode
-  #                    as it is configured by vagrant to the proper settings
-  skipTags:
-    - 'switch_support'
-    - 'reboot'
-    - 'interface_config'
-
-  fabric_ip: '10.6.1.1/24'
-  management_ip: '10.1.0.1/24'
-  external_iface: 'eth0'
-  management_network: '10.1.0.0/24'
-
-  # Specifies the extra settings required for this configuration
-  #
-  # virtualbox_support - install support for managing virtual box based
-  #                      compute nodes
-  # virtualbox_support: 1
-  # power_helper_user: 'cord'
-
-  # on_cloudlab: True
-  cord_in_a_box: True
-
-  extraVars:
-    - 'fabric_include_names=eth2'
-    - 'fabric_include_module_types=omit'
-    - 'fabric_exclude_names=eth0,eth1'
-    - 'management_include_names=eth1'
-    - 'management_exclude_names=eth0,eth2'
-
-docker:
-  imageVersion: candidate
-  registry: '10.100.198.201:5000'
-
-otherServers:
-  # Specifies the configuration for dynamically added compute nodes
-  fabric:
-    network: '10.6.1.1/24'
-    management: '10.1.0.0/24'
-
diff --git a/config/default.yml b/config/default.yml
deleted file mode 100644
index 5c6d281..0000000
--- a/config/default.yml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-
-# Deployment configuration for VirtualBox based head node.
-#
-# This deployment configuration can be utilized with the head node created
-# via `vargrant up headnode` from the gerrit.opencord.org/maas repository.
----
-debug: false
-
-# this is used to generate the genconfig/cord-inv file
-headnode:
-  ip: '10.100.198.201'
-  ansible_user: 'vagrant'
-  ansible_ssh_pass: 'vagrant'
-  ansible_ssh_port: 22
-
-common:
-
-  # set to the profile of cord you want to install
-  cord_profile: 'rcord'
-
-  # cord dir is shared to corddev VM, causing permissions issues if these aren't set
-  credentials_dir: '/opt/credentials'
-  pki_dir: '/opt/pki'
-  ssh_pki_dir: '/opt/ssh_pki'
-
-  # Specifies tasks within the head node provisioning not to execute, including:
-  #
-  # switch_support -   don't download the switch ONL images as there are no
-  #                    switches in this configuration
-  # interface_config - don't update the network configuration of the headnode
-  #                    as it is configured by vagrant to the proper settings
-  skipTags:
-    - 'switch_support'
-    - 'reboot'
-    - 'interface_config'
-
-  fabric_ip: '10.1.1.1/24'
-  management_ip: '10.1.0.1/24'
-  external_iface: 'eth0'
-  management_network: '10.1.0.0/24'
-
-  # Specifies the extra settings required for this configuration
-  #
-  # virtualbox_support - install support for managing virtual box based
-  #                      compute nodes
-  virtualbox_support: 1
-  power_helper_user: 'cord'
-
-docker:
-  imageVersion: candidate
diff --git a/config/ecord_global_in_a_box.yml b/config/ecord_global_in_a_box.yml
deleted file mode 100644
index 525937a..0000000
--- a/config/ecord_global_in_a_box.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-
-# Deployment configuration for VirtualBox based head node.
-#
-# This deployment configuration can be utilized with the head node created
-# via `vagrant up headnode` from the gerrit.opencord.org/maas repository.
----
-debug: false
-
-# this is used to generate the genconfig/cord-inv file
-headnode:
-  ip: '10.100.198.201'
-  ansible_user: 'vagrant'
-  ansible_ssh_pass: 'vagrant'
-  ansible_ssh_port: 22
-
-common:
-  # all of these are written to genconfig/config.yml, and needs a rework
-
-  # set to the "flavor" of cord you want to install
-  cord_profile: 'ecord-global'
-
-  # Specifies tasks within the head node provisioning not to execute, including:
-  #
-  # switch_support -   don't download the switch ONL images as there are no
-  #                    switches in this configuration
-  # interface_config - don't update the network configuration of the headnode
-  #                    as it is configured by vagrant to the proper settings
-  skipTags:
-    - 'switch_support'
-    - 'reboot'
-    - 'interface_config'
-
-  fabric_ip: '10.6.1.1/24'
-  management_ip: '10.1.0.1/24'
-  external_iface: 'eth0'
-  management_network: '10.1.0.0/24'
-
-  # Specifies the extra settings required for this configuration
-  #
-  # virtualbox_support - install support for managing virtual box based
-  #                      compute nodes
-  # virtualbox_support: 1
-  # power_helper_user: 'cord'
-
-  # on_cloudlab: True
-  cord_in_a_box: True
-
-  extraVars:
-    - 'fabric_include_names=eth2'
-    - 'fabric_include_module_types=omit'
-    - 'fabric_exclude_names=eth0,eth1'
-    - 'management_include_names=eth1'
-    - 'management_exclude_names=eth0,eth2'
-
-docker:
-  imageVersion: candidate
-  registry: '10.100.198.201:5000'
-
-otherServers:
-  # Specifies the configuration for dynamically added compute nodes
-  fabric:
-    network: '10.6.1.1/24'
-    management: '10.1.0.0/24'
-
diff --git a/config/ecord_in_a_box.yml b/config/ecord_in_a_box.yml
deleted file mode 100644
index 4814cdc..0000000
--- a/config/ecord_in_a_box.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-
-# Deployment configuration for VirtualBox based head node.
-#
-# This deployment configuration can be utilized with the head node created
-# via `vagrant up headnode` from the gerrit.opencord.org/maas repository.
----
-debug: false
-
-# this is used to generate the genconfig/cord-inv file
-headnode:
-  ip: '10.100.198.201'
-  ansible_user: 'vagrant'
-  ansible_ssh_pass: 'vagrant'
-  ansible_ssh_port: 22
-
-common:
-  # all of these are written to genconfig/config.yml, and needs a rework
-
-  # set to the "flavor" of cord you want to install
-  cord_profile: 'ecord'
-
-  # Specifies tasks within the head node provisioning not to execute, including:
-  #
-  # switch_support -   don't download the switch ONL images as there are no
-  #                    switches in this configuration
-  # interface_config - don't update the network configuration of the headnode
-  #                    as it is configured by vagrant to the proper settings
-  skipTags:
-    - 'switch_support'
-    - 'reboot'
-    - 'interface_config'
-
-  fabric_ip: '10.6.1.1/24'
-  management_ip: '10.1.0.1/24'
-  external_iface: 'eth0'
-  management_network: '10.1.0.0/24'
-
-  # Specifies the extra settings required for this configuration
-  #
-  # virtualbox_support - install support for managing virtual box based
-  #                      compute nodes
-  # virtualbox_support: 1
-  # power_helper_user: 'cord'
-
-  # on_cloudlab: True
-  cord_in_a_box: True
-
-  extraVars:
-    - 'fabric_include_names=eth2'
-    - 'fabric_include_module_types=omit'
-    - 'fabric_exclude_names=eth0,eth1'
-    - 'management_include_names=eth1'
-    - 'management_exclude_names=eth0,eth2'
-
-docker:
-  imageVersion: candidate
-  registry: '10.100.198.201:5000'
-
-otherServers:
-  # Specifies the configuration for dynamically added compute nodes
-  fabric:
-    network: '10.6.1.1/24'
-    management: '10.1.0.0/24'
-
diff --git a/config/onlab_develop_pod.yml b/config/onlab_develop_pod.yml
deleted file mode 100644
index 18f7eea..0000000
--- a/config/onlab_develop_pod.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-
-# Deployment configuration for a physical hardware POD
----
-
-# this is used to generate the genconfig/cord-inv file
-headnode:
-  ip: '10.90.0.251'
-  ansible_user: 'cord'
-  ansible_ssh_pass: 'cord'
-  ansible_ssh_port: 22
-
-common:
-
-  # set to the profile of cord you want to install
-  cord_profile: 'rcord'
-
-  # cord dir is shared to corddev VM, causing permissions issues if these aren't set
-  credentials_dir: '/opt/credentials'
-  pki_dir: '/opt/pki'
-  ssh_pki_dir: '/opt/ssh_pki'
-
-  # all of these are written to genconfig/config.yml, and needs a rework
-
-  # Network address information for the head node:
-  #
-  # fabric_ip     - the IP address and mask bits to be used to configure the network
-  #                 interface connected to the leaf - spine fabric
-  #
-  # management_ip - the IP address and mask bits to be used to configure the network
-  #                 interface connecting the head node to the POD internal
-  #                 management network. The head node will deliver DHCP addresses to
-  #                 the other compute nodes over this interface
-  #
-  # external_ip   - the IP address and mask bits to be used to configure the network
-  #                 interface connecting the head node (and the POD) to the
-  #                 Internet. All traffic in the POD to external hosts will be
-  #                 NAT-ed through this interface
-  fabric_ip: '10.6.1.1/24'
-  management_ip: '10.6.0.1/24'
-  external_ip: '10.90.0.251/16'
-  external_iface: 'eth0'
-  external_gw: '10.90.0.1'
-  skipTags:
-
-passwords:
-  compute_node: "ubuntu"
-  maas_admin: "admin"
-  maas_user: "cord"
-
-docker:
-  imageVersion: candidate
-
-otherNodes:
-  # Experimental
-  #
-  # Specifies the subnet and address range that will be used to allocate IP addresses
-  # to the compute nodes as they are deployed into the POD.
-  fabric:
-    network: 10.6.1.1/24
-    range_low: 10.6.1.2
-    range_high: 10.6.1.253
diff --git a/config/sample.yml b/config/sample.yml
deleted file mode 100644
index caec656..0000000
--- a/config/sample.yml
+++ /dev/null
@@ -1,117 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
-
-# Deployment configuration for a phyical hardware POD
----
-
-headnode:
-  ip: '10.90.0.2'
-  ansible_user: 'ubuntu'
-  ansible_ssh_pass: 'ubuntu'
-  ansible_ssh_port: 22
-
-common:
-  # set to the profile of cord you want to install
-  cord_profile: 'rcord'
-
-  # cord dir is shared to corddev VM, causing permissions issues if these aren't set
-  credentials_dir: '/opt/credentials'
-  pki_dir: '/opt/pki'
-  ssh_pki_dir: '/opt/ssh_pki'
-
-  # Network address information for the head node:
-  #
-  # fabric_ip     - the IP address and mask bits to be used to configure the network
-  #                 interface connected to the leaf - spine fabric
-  #
-  # management_ip - the IP address and mask bits to be used to configure the network
-  #                 interface connecting the head node to the POD internal
-  #                 management network. The head node will deliver DHCP addresses to
-  #                 the other compute nodes over this interface
-  #
-  # external_ip   - the IP address and mask bits to be used to configure the network
-  #                 interface connecting the head node (and the POD) to the
-  #                 Internet. All traffic in the POD to external hosts will be
-  #                 NAT-ed through this interface
-  # external_iface   - the name of the interface that connects the head node to the
-  #                    Internet
-  # management_network - the network and mask bits to used for hosts on the management
-  #                      network
-  fabric_ip: '10.6.1.1/24'
-  #fabric_range_low: '10.6.1.2'
-  #fabric_range_high: '10.6.1.100'
-  management_ip: '10.6.0.1/24'
-  #management_range_low: '10.6.0.2'
-  #management_range_high: '10.6.0.127'
-  external_ip: '47.135.132.21/24'
-  #external_iface: 'eth2'
-  management_network: 10.6.0.0/24
-
-  # the skipTags options allow various part of the deployment to be skipped
-  # switch_support - does not deploy switch boot images to the PXE server
-  #
-  # reboot - will not reboot the head node after updating its network configuration
-  #          this may mean the network configuration will not take effect, but will
-  #          also prevent you from being locked out of the server if there is a
-  #          network configuration error.
-  #
-  # interface_config - will not modify the network configuration of the head node,
-  #                    including the consistent naming of the network interfaces
-  skipTags:
-  #  - 'switch_support'
-  #  - 'reboot'
-  #  - 'interface_config'
-
-  # The following variable settings can be used to customize how the network interfaces
-  # are selected into the fabric and management bridge interface or ignored/excluded.
-  # See the documentation docs/quickstart_physical.md for more information about how
-  # to set these variables.
-  extraVars:
-  #  - 'fabric_include_names=<name1>,<name2>,...'
-  #  - 'fabric_include_module_types=<mtype1>,<mtype2>,...'
-  #  - 'fabric_include_bus_types=<btype1>,<btype2>,...'
-  #  - 'fabric_exclude_names=<name1>,<name2>,...'
-  #  - 'fabric_exclude_module_types=<mtype1>,<mtype2>,...'
-  #  - 'fabric_exclude_bus_types=<btype1>,<btype2>,...'
-  #  - 'fabric_ignore_names=<name1>,<name2>,...'
-  #  - 'fabric_ignore_module_types=<mtype1>,<mtype2>,...'
-  #  - 'fabric_ignore_bus_types=<btype1>,<btype2>,...'
-  #  - 'management_include_names=<name1>,<name2>,...'
-  #  - 'management_include_module_types=<mtype1>,<mtype2>,...'
-  #  - 'management_include_bus_types=<btype1>,<btype2>,...'
-  #  - 'management_exclude_names=<name1>,<name2>,...'
-  #  - 'management_exclude_module_types=<mtype1>,<mtype2>,...'
-  #  - 'management_exclude_bus_types=<btype1>,<btype2>,...'
-  #  - 'management_ignore_names=<name1>,<name2>,...'
-  #  - 'management_ignore_module_types=<mtype1>,<mtype2>,...'
-  #  - 'management_ignore_bus_types=<btype1>,<btype2>,...'
-  #  - ubuntu_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/archive.ubuntu.com/ubuntu trusty main universe"
-  #  - ubuntu_updates_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/archive.ubuntu.com/ubuntu trusty-updates main universe"
-  #  - docker_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/apt.dockerproject.org/repo ubuntu-trusty main"
-  #  - java_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/webupd8team/java/ubuntu trusty main"
-  #  - ansible_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/ansible/ansible/ubuntu trusty main"
-  #  - maas_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/maas/stable/ubuntu trusty main"
-  #  - dell_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/linux.dell.com/repo/community trusty openmanage"
-  #  - juju_apt_repo="deb [arch=amd64] http://10.1.0.1:8889/mirror/ppa.launchpad.net/juju/stable/ubuntu trusty main"
-
-# If passwords are not set, random passwords will be generated
-passwords:
-  #compute_node: ubuntu
-  #maas_admin: admin
-  #maas_user: cord
-
-docker:
-  imageVersion: candidate
diff --git a/gradle.properties b/gradle.properties
deleted file mode 100644
index 1a644c7..0000000
--- a/gradle.properties
+++ /dev/null
@@ -1 +0,0 @@
-org.gradle.daemon=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 2c6137b..0000000
--- a/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
deleted file mode 100644
index cf051c0..0000000
--- a/gradle/wrapper/gradle-wrapper.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-#Thu May 05 16:09:18 PDT 2016
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-all.zip
diff --git a/gradlew b/gradlew
deleted file mode 100755
index 9d82f78..0000000
--- a/gradlew
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env bash
-
-##############################################################################
-##
-##  Gradle start up script for UN*X
-##
-##############################################################################
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn ( ) {
-    echo "$*"
-}
-
-die ( ) {
-    echo
-    echo "$*"
-    echo
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-esac
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-        # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-        JAVACMD="$JAVA_HOME/bin/java"
-    fi
-    if [ ! -x "$JAVACMD" ] ; then
-        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-    fi
-else
-    JAVACMD="java"
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
-    # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
-        fi
-        i=$((i+1))
-    done
-    case $i in
-        (0) set -- ;;
-        (1) set -- "$args0" ;;
-        (2) set -- "$args0" "$args1" ;;
-        (3) set -- "$args0" "$args1" "$args2" ;;
-        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
-fi
-
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
-    JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/gradlew.bat b/gradlew.bat
deleted file mode 100644
index 72d362d..0000000
--- a/gradlew.bat
+++ /dev/null
@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index 9299c6a..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1,24 +0,0 @@
-
-/*
- * Copyright 2017-present Open Networking Foundation
-
- * 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.
- */
-
-
-include 'maas'
-include 'platform-install'
-includeFlat 'onos-apps'
-
-include 'orchestration:xos'
-project(':orchestration:xos').projectDir = "$rootDir/../orchestration/xos" as File
