4.6
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.
This proposal simplifies the process of managing shared networks and allows an external network hardware to act as router instead of a VirtualRouter.
1.0 - Initial version
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
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.
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
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.
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.
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.
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.
GloboNetwork is called to destroy and trash network.
GloboNetwork provider calls GloboNetworkAPI to remove network.
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.
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.