Update Rancher API integration to go-rancher client v2.

This commit is contained in:
Raúl Sánchez 2017-11-05 13:02:03 +01:00 committed by Traefiker
parent d89b234cad
commit 07c6e33598
188 changed files with 5349 additions and 1969 deletions

View file

@ -11,7 +11,7 @@ import (
"github.com/containous/traefik/safe"
"github.com/containous/traefik/types"
"github.com/mitchellh/mapstructure"
rancher "github.com/rancher/go-rancher/client"
rancher "github.com/rancher/go-rancher/v2"
)
const (
@ -72,11 +72,11 @@ func (p *Provider) apiProvide(configurationChan chan<- types.ConfigMessage, pool
}
ctx := context.Background()
var environments = listRancherEnvironments(rancherClient)
var stacks = listRancherStacks(rancherClient)
var services = listRancherServices(rancherClient)
var container = listRancherContainer(rancherClient)
var rancherData = parseAPISourcedRancherData(environments, services, container)
var rancherData = parseAPISourcedRancherData(stacks, services, container)
configuration := p.loadRancherConfig(rancherData)
configurationChan <- types.ConfigMessage{
@ -93,11 +93,11 @@ func (p *Provider) apiProvide(configurationChan chan<- types.ConfigMessage, pool
case <-ticker.C:
log.Debugf("Refreshing new Data from Provider API")
var environments = listRancherEnvironments(rancherClient)
var stacks = listRancherStacks(rancherClient)
var services = listRancherServices(rancherClient)
var container = listRancherContainer(rancherClient)
rancherData := parseAPISourcedRancherData(environments, services, container)
rancherData := parseAPISourcedRancherData(stacks, services, container)
configuration := p.loadRancherConfig(rancherData)
if configuration != nil {
@ -129,24 +129,21 @@ func (p *Provider) apiProvide(configurationChan chan<- types.ConfigMessage, pool
return nil
}
func listRancherEnvironments(client *rancher.RancherClient) []*rancher.Environment {
func listRancherStacks(client *rancher.RancherClient) []*rancher.Stack {
// Rancher Environment in frontend UI is actually a stack
// https://forums.rancher.com/t/api-key-for-all-environments/279/9
var stackList = []*rancher.Stack{}
var environmentList = []*rancher.Environment{}
environments, err := client.Environment.List(nil)
stacks, err := client.Stack.List(withoutPagination)
if err != nil {
log.Errorf("Cannot get Rancher Environments %+v", err)
log.Errorf("Cannot get Provider Stacks %+v", err)
}
for k := range environments.Data {
environmentList = append(environmentList, &environments.Data[k])
for k := range stacks.Data {
stackList = append(stackList, &stacks.Data[k])
}
return environmentList
return stackList
}
func listRancherServices(client *rancher.RancherClient) []*rancher.Service {
@ -197,19 +194,19 @@ func listRancherContainer(client *rancher.RancherClient) []*rancher.Container {
return containerList
}
func parseAPISourcedRancherData(environments []*rancher.Environment, services []*rancher.Service, containers []*rancher.Container) []rancherData {
func parseAPISourcedRancherData(stacks []*rancher.Stack, services []*rancher.Service, containers []*rancher.Container) []rancherData {
var rancherDataList []rancherData
for _, environment := range environments {
for _, stack := range stacks {
for _, service := range services {
if service.EnvironmentId != environment.Id {
if service.StackId != stack.Id {
continue
}
rancherData := rancherData{
Name: environment.Name + "/" + service.Name,
Name: service.Name + "/" + stack.Name,
Health: service.HealthState,
State: service.State,
Labels: make(map[string]string),
@ -217,7 +214,7 @@ func parseAPISourcedRancherData(environments []*rancher.Environment, services []
}
if service.LaunchConfig == nil || service.LaunchConfig.Labels == nil {
log.Warnf("Rancher Service Labels are missing. Environment: %s, service: %s", environment.Name, service.Name)
log.Warnf("Rancher Service Labels are missing. Stack: %s, service: %s", stack.Name, service.Name)
} else {
for key, value := range service.LaunchConfig.Labels {
rancherData.Labels[key] = value.(string)
@ -225,7 +222,7 @@ func parseAPISourcedRancherData(environments []*rancher.Environment, services []
}
for _, container := range containers {
if container.Labels[labelRancherStackServiceName] == rancherData.Name &&
if container.Labels[labelRancherStackServiceName] == stack.Name+"/"+service.Name &&
containerFilter(container.Name, container.HealthState, container.State) {
if container.NetworkMode == hostNetwork {