Bug Reference


CLOUDSTACK-7995


Branch


4.6


Introduction


Originally in Cloudstack, only the root administrator is able to create shared networks, since it requires a full understanding of the topology to provide accurate information about the new shared network, e.g. IP range, netmask, gateway, VLAN ID and so on.


GloboNetwork network plugin provides a much simpler way to create shared networks, allowing a regular Cloudstack user to create and manage shared networks by providing name, description and zone/environment in which he or she wants it to be deployed. This is possible thanks to an external open source API called GloboNetworkAPI.


The open source 'GloboNetworkAPI' provides a simple way to manage multi-vendor network equipment, including routers, switches and load balancers. It is responsible for automatically creating and removing VLAN/networks, allocating and deallocating IP addresses, applying load balancer rules and many other features and is equipped with a web interface to easily manage all these resources.


 This proposal includes both the GloboNetwork plugin and the API client to greatly reduce complexity when dealing with shared networks and allow an external network hardware to act as router instead of a VirtualRouter.


Purpose


 This proposal simplifies the process of managing shared networks and allows an external network hardware to act as router instead of a VirtualRouter.



References


Document history


  • 1.0 - Initial version

Glossary


Feature specification


  • Simple management of shared networks, automatically retrieving network information (range, netmask, VLAN etc.) from API

  • Extension of functionality of creating shared networks to regular users instead of root admin-only

  • Use of real network hardware as router in shared networks


Global Settings:


  • globonetwork.connectiontimeout: GloboNetwork connection timeout (in milliseconds)

  • globonetwork.domain.suffix : Domain suffix to ensure in all networks created with GloboNetwork (empty you are free to create in any domain)

  • globonetwork.model.vm.console.proxy: GloboNetwork equipment model id to be used for Console Proxy VMs

  • globonetwork.model.vm.domain.router: GloboNetwork equipment model id to be used for Domain Router VMs

  • globonetwork.model.vm.elastic.ip: GloboNetwork equipment model id to be used for Elastic IP VMs

  • globonetwork.model.vm.secondary.storage: GloboNetwork equipment model id to be used for Secondary Storage VMs

  • globonetwork.model.vm.user: GloboNetwork equipment model id to be used for User VMs

  • globonetwork.model.vm.user.bare.metal: GloboNetwork equipment model id to be used for User Bare Metal

  • globonetwork.numberofretries: Number of retries when accessing resources in GloboNetworkAPI

  • globonetwork.readtimeout: Read timeout (in milliseconds) when waiting for an answer from GloboNetworkAPI

  • globonetwork.vm.equipmentgroup: Equipment group to be used when registering a VM NIC in GloboNetwork

  • globonetwork.domain.pattern: Domain pattern to ensure in all networks created with GloboNetwork. You can use zone objects, vlan objects as variables (ex: #{zone.name.toLowerCase()}-#{vlan.vlanNum}). The fqdn will be 'vm hostname' + globonetwork.domain.pattern' + 'globonetwork.domain.suffix'. If you leave this configuration blank, you will have to provide the 'domain name'  in the 'Add GloboNetwork Network' form.



Changes in code:

  • All new files are in plugins/network-elements/globonetwork

  • api/src/com/cloud/network/Network.java: Created new provider called GloboNetwork

  • api/src/org/apache/cloudstack/network/ExternalNetworkDeviceManager.java: Created new device called GloboNetwork

  • api/src/org/apache/cloudstack/api/ApiConstants.java: GuruName constant

  • api/src/org/apache/cloudstack/api/response/NetworkResponse.java: Included GuruName in NetworkResponse

  • client/pom.xml: Included plugin dependency

  • client/tomcatconf/commands.properties.in: declared all new commands (refer to Web Services API section)

  • plugins/pom.xml: included plugin module

  • server/src/com/cloud/api/ApiResponseHelper.java: Included GuruName in NetworkResponse

  • ui/scripts/system.js: Detail view of plugin configuration and vlan/network environment association

  • ui/scripts/globonetwork.js: UI integration with globonetwork plugin

  • ui/scripts/sharedFunctions.js: ability for regular users to restart and remove shared networks managed by GloboNetwork

  • ui/scripts/network.js: included form to create network in GloboNetwork



Known Issues

  • After enabling GloboNetwork provider, a new network guru (GloboNetworkGuru) becomes active for deploying and managing shared network offerings. This conflicts with DirectNetworkGuru. Therefore, when creating new networks with a shared network offering, two networks are deployed, one for each guru. A possible fix is to create a new relationship between network offering and network guru, so that each offering only has one network guru associated to it.

  • UI for networks now include three buttons - Add Isolated Network, Add Guest Network and Add GloboNetwork Network. A possible fix is to create a select box in the form for creating new networks to choose which kind of network to create.

  • Cloudstack does not allow regular users to delete networks. Since GloboNetwork plugin adds this functionality, it was needed to create a new API command (deleteNetworkInGloboNetworkCmd) to execute this action as admin. This is a work-around and should be addressed more carefully in Cloudstack permission checks to allow users to remove networks if it is managed by GloboNetworkGuru.


Use cases


Enable plugin in Zone

  • Administrator must access provider configuration in Infrastructure → Zone → Physical Network → Network Service Providers → GloboNetwork.

  • Click "Add" button (GloboNetwork Configuration), and type the username, password and endpoint of GloboNetwork and click OK. A new entry in host/host_details table is created to store this configuration.

  • Go to the "Environments" tab and click on the "Add Environment" button. Type in a name and select the environment and click OK.

  • Back at the "Details" tab, click "Enable Provider" button and wait for plugin to be enabled.

Disable plugin in Zone

  • Administrator must access provider configuration in Infrastructure → Zone → Physical Network → Network Service Providers → GloboNetwork.

  • Click "Disable Provider" button and wait for plugin to be disabled. Host/Host_details entries are marked as removed.

Create a new network with GloboNetwork

  • Choose a network name, description, zone and environment.

  • GloboNetwork is called to design and implement network.

  • GloboNetwork provider calls GloboNetworkAPI to create a new network. It receives back all the information needed (IP range, netmask, gateway, VLAN id etc.) and uses that information to continue Cloudstack's network creation process.

Destroy network with GloboNetwork

  • GloboNetwork is called to destroy and trash network.

  • GloboNetwork provider calls GloboNetworkAPI to remove network.



Architeture and Design description



Web Services API


  • addGloboNetworkEnvironment: configure GloboNetwork environment in provider. Needs to be called before plugin is enabled in zone.

  • addGloboNetworkHost: configure GloboNetworkAPI credentials and endpoint in Zone. Needs to be called before plugin is enabled in zone.

  • addNetworkViaGloboNetwork: create a new network through GloboNetworkAPI

  • listAllEnvironmentsFromGloboNetwork: list all possible vlan/network environments in GloboNetworkAPI

  • listGloboNetworkEnvironments: list all environments from GloboNetworkAPI that are configured in Cloudstack

  • removeGloboNetworkEnvironment: disassociate GloboNetwork environment and physical network in Cloudstack

  • listGloboNetworkCapabilities: list GloboNetwork capabilities

  • deleteNetworkInGloboNetwork: destroy network created by GloboNetwork. This allow regular users delete network. Admin users may use deleteNetwork command or this new command.

UI flow


  • In every zone, to setup GloboNetwork, you have to provide user, password and GloboNetwork endpoint.


  • After setup the GloboNetwork endpoint, you also have to choose which environment(s) you'll work with.


  • Creating a new network


  •  
  • No labels