-
Notifications
You must be signed in to change notification settings - Fork 2
Binding library v0.3.x usage
Starting from version 0.4.0 the API has been completely reviewed, this wiki page depicts the library usage for any 0.3.x library version, though its usage is strongly discouraged.
This wrapper uses the REST API interface provided by the vTM, version 3.8.
The following is the list of the resources managed by the API. The list is a limited subset of all the resources exposed by the Pulse vTM REST API Server and, moreover, for some of them the set of defined attributes is far from being complete (though representing the minimal subset that provides most of the resource usage). The schema is bond to version 3.8 of the Pulse vTM REST API Server. The schema is not going to be upgraded to current and future releases of the REST API schema.
Resource Name | Resource URI | Create | Read | Update | Delete |
---|---|---|---|---|---|
DNS Zone | dns_server/zones | Y | Y | Y | Y |
DNS Zone File | dns_server/zone_files | Y | Y | Y | Y |
GLB Service | glb_services | Y | Y | Y | Y |
Location | locations | Y | Y | Y | Y |
Monitor | monitors | Y | Y | Y | Y |
Pool | pools | Y | Y | Y | Y |
Rule | rules | Y | Y | Y | Y |
SSL Key Pair | ssl/server_keys | Y | Y | Y | Y |
Traffic IP Group | traffic_ip_groups | Y | Y | Y | Y |
Traffic Manager | traffic_managers | Y | Y | Y | Y |
User Authenticator | user_authenticators | Y | Y | Y | Y |
User Group | user_groups | Y | Y | Y | Y |
Virtual Server | virtual_servers | Y | Y | Y | Y |
What follows is consistent for any release of the binding prior to 0.4.0 and is a set of examples that do not cover the complete list of exposed resources, though the API being pretty consistent (so what is depicted basically works with any resource)
import(
"github.com/sky-uk/go-pulse-vtm"
)
In order to get a client object authentication credentials needs to be provided. The REST API transport protocol is by default HTTPS and hence SSL encryption is used by default. Certificate handling behaviour can be controlled via the ignoreSSL flag. More information about the client and the Base API may be found here https://github.com/sky-uk/go-rest-api.
In order to work with locations, import the location package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/location"
)
api := location.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
locations := api.ResponseObject().(*location.Locations)
api := location.NewGet( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
location := api.ResponseObject().(*location.Location)
newLocation := location.Location{
...
}
api := location.NewCreate( name, newLocation )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
createdLocation := api.ResponseObject().(*location.Location)
updateLocation := location.Location{
...
}
api := location.NewUpdate( name, updateLocation )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
updatedLocation := api.ResponseObject().(*location.Location)
api := location.NewDelete( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Location %s deleted", name)
}
In order to work with monitors, import the monitor package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/monitor"
)
api := monitor.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
monitors := api.ResponseObject().(*monitor.MonitorsList)
api := monitor.NewGet( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
monitor := api.ResponseObject().(*monitor.Monitor)
newMonitor := monitor.Monitor{
...
}
api := monitor.NewCreate( name, newMonitor )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
monCreated := api.ResponseObject().(*monitor.Monitor)
updateMonitor := monitor.Monitor{
...
}
api := monitor.NewUpdate( name, updateMonitor )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
monUpdated := api.ResponseObject().(*monitor.Monitor)
api := monitor.NewDelete( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Monitor %s deleted", name)
}
In order to work with pools, import the pool package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/pool"
)
api := monitor.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
pools := api.ResponseObject().(*pool.LBPoolList)
api := monitor.NewGet(name)
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
pool := api.ResponseObject().(*pool.Pool)
newPool := pool.Pool{
...
}
api := pool.NewCreate( name, newPool )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
poolCreated := api..ResponseObject().(*pool.Pool)
updatePool := pool.Pool{
...
}
api := pool.NewUpdate( name, updatePool )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
poolUpdated := api.ResponseObject().(*pool.Pool)
api := pool.NewDelete( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Pool %s deleted", name)
}
In order to work with server keys, import the pool package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/sslServerKey"
)
api := monitor.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
keys := api.ResponseObject().(*sslServerKey.SSLServerKeysList)
api := sslServerKey.NewGet(name)
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
key := api.ResponseObject().(*sslServerKey.SSLServerKey)
newKey := sslServerKey.SSLServerKey{
...
}
api := sslServerKey.NewCreate( name, newKey )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
keyCreated := api.ResponseObject().(*sslServerKey.SSLServerKey)
updateKey := sslServerKey.SSLServerKey{
...
}
api := sslServerKey.NewUpdate( name, updateKey )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
keyUpdated := api.ResponseObject().(*sslServerKey.SSLServerKey)
api := sslServerKey.NewDelete( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Server key %s deleted", name)
}
In order to work with traffic IP groups, import the traffic IP package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/trafficIpGroups"
)
// to get the list of all traffic managers
api := trafficIpGroups.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
trafficIPGroups := api.ResponseObject().(*trafficIpGroups.TrafficIPGroupList)
api := trafficIpGroups.NewGet(name)
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
trafficIPGroup := api.ResponseObject().(*trafficIpGroups.TrafficIPGroup)
newTipg := trafficIpGroups.TrafficIPGroup{
...
}
api := trafficIpGroups.NewCreate( name, newTipg )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
tipgCreated := api.ResponseObject().(*trafficIpGroups.TrafficIPGroup)
updateTipg := trafficIpGroups.TrafficIPGroup{
...
}
api := trafficIpGroups.NewUpdate( name, updateTipg )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
tipgUpdated := api.ResponseObject().(*trafficIpGroups.TrafficIPGroup)
api := trafficIpGroups.NewDelete( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Traffic IP group %s deleted", name)
}
Traffic IP Group Managers are only used by Traffic IP Group to retrieve a list of Traffic Mangers when creating a Traffic IP Group.
In order to work with Traffic IP Group Managers, import the Traffic IP Group package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/traffic_ip_group_managers"
)
api := trafficIpGroupManager.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
trafficIPGroupManagers := api.ResponseObject().(*trafficIpGroupManager.TrafficManagerChildren)
In order to work with virtual servers, import the virtual server package section:
import (
"github.com/sky-uk/go-pulse-vtm/api/virtualserver"
)
api := virtualserver.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
virtualServer := api.ResponseObject().(*virtualserver.VirtualServersList)
api := virtualserver.NewGet(name)
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
virtualServer := api.ResponseObject().(*virtualserver.VirtualServer)
newVS := virtualserver.VirtualServer{
...
}
api := virtualserver.NewCreate( name, newVS )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
vsCreated := api.ResponseObject().(*virtualserver.VirtualServer)
updateVS := virtualserver.VirtualServer{
...
}
api := virtualserver.NewUpdate( name, updateVS )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
vsUpdated := api.ResponseObject().(*virtualserver.VirtualServer)
api := virtualserver.NewDelete( name )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Virtual server %s deleted", name)
}
In order to work with rules, import the rule package section:
```
import (
"github.com/sky-uk/go-pulse-vtm/api/rule"
)
```
api := rule.NewGetAll()
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
rules := api.ResponseObject().(*rule.Rules)
api := rule.NewGet(name)
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
// Returns the traffic script as a string
trafficScript := api.ResponseObject().(*[]byte)
ruleName := "my-rule"
trafficScript := []byte(`
if( string.ipmaskmatch( request.getremoteip(), "192.168.123.10" ) ){
connection.discard();
}`)
api := rule.NewCreate( ruleName, trafficScript )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
ruleName := "my-rule"
updatedTrafficScript := []byte(`
if( string.ipmaskmatch( request.getremoteip(), "192.168.123.10" ) ){
connection.discard();
}`)
api := rule.NewUpdate( ruleName, updatedTrafficScript )
err := client.Do(api)
if err != nil {
log.Fatal(err)
}
nameRuleToDelete := "my-rule"
api := rule.NewDelete( nameRuleToDelete )
err := client.Do(api)
if err != nil {
log.Fatal(err)
} else {
log.Printf("Rule %s deleted", nameRuleToDelete)
}