-
Notifications
You must be signed in to change notification settings - Fork 2
Home
This is the GoLang API wrapper for Brocade Virtual Traffic Manager (vTM).
This wrapper uses the REST API interface provided by the vTM, currently version 3.8.
There is also command line interface which can be built by running make
in the root of this repo.
Resource | Create | Read | Update | Delete |
---|---|---|---|---|
Monitor [1] | Y | Y | Y | Y |
Pool | Y | Y | Y | Y |
SSL Server Key | Y | Y | Y | Y |
Traffic IP Group | Y | Y | Y | Y |
Virtual Server | Y | Y | Y | Y |
Rule | Y | Y | Y | Y |
[1] : Currently only HTTP monitoring is supported
import(
"github.com/sky-uk/go-brocade-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 monitors, import the monitor package section:
import (
"github.com/sky-uk/go-brocade-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-brocade-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-brocade-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-brocade-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-brocade-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-brocade-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-brocade-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)
}
Run make
in the root of the repository to build the go-brocade-vtm-cli
binary. Once built the binary may be found in the root of the repository.
Currently only rules may be managed by the cli.
Set the following shell environment variables to allow the cli to make changes to a Brocade vTM. Note that the cli automatically prefixes the value of BROCADEVTM_SERVER with https://.
$ export BROCADEVTM_USERNAME=admin
$ export BROCADEVTM_PASSWORD=myPassword
$ export BROCADEVTM_SERVER=my-brocade-vtm.example.com:9070
$ ./go-brocade-vtm-cli -h
To create a rule ensure the traffic script is in the file /path/to/traffic_script.
$ ./go-brocade-vtm-cli rule-create -name my-rule -script /path/to/traffic_script
To list all rules.
$ ./go-brocade-vtm-cli rule-show-all
To show a rule called 'my-rule'.
$ ./go-brocade-vtm-cli rule-show -name my-rule
To update a rule called 'my-rule' with the traffic script (file) /path/to/updated_traffic_script.
$ ./go-brocade-vtm-cli rule-update -name my-rule -script /path/to/updated_traffic_script
To delete a rule
$ ./go-brocade-vtm-cli rule-delete -name my-rule