Skip to content

Commit

Permalink
Update Rancher API integration to go-rancher client v2.
Browse files Browse the repository at this point in the history
  • Loading branch information
rawmind0 authored and traefiker committed Nov 5, 2017
1 parent d89b234 commit 07c6e33
Show file tree
Hide file tree
Showing 188 changed files with 5,308 additions and 1,928 deletions.
6 changes: 6 additions & 0 deletions docs/configuration/backends/rancher.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@ secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
To enable Traefik to fetch information about the Environment it's deployed in only, you need to create an `Environment API Key`.
This can be found within the API Key advanced options.

Add these labels to traefik docker deployment to autogenerated these values:
```
io.rancher.container.agent.role: environment
io.rancher.container.create_agent: true
```

## Labels: overriding default behaviour

Labels can be used on task containers to override default behaviour:
Expand Down
10 changes: 5 additions & 5 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -166,15 +166,15 @@ import:
- package: github.com/golang/protobuf
version: 2bba0603135d7d7f5cb73b2125beeda19c09f4ef
- package: github.com/rancher/go-rancher
version: 5b8f6cc26b355ba03d7611fce3844155b7baf05b
version: 52e2f489534007ae843065468c5a1920d542afa4
- package: golang.org/x/oauth2
version: 7fdf09982454086d5570c7db3e11f360194830ca
subpackages:
- google
- package: golang.org/x/time
version: 8be79e1e0910c292df4e79c241bb7e8f7e725959
- package: github.com/rancher/go-rancher-metadata
version: 95d4962a8f0420be24fb49c2cb4f5491284c62f1
version: d2103caca5873119ff423d29cba09b4d03cd69b8
- package: github.com/googleapis/gax-go
version: 9af46dd5a1713e8b5cd71106287eba3cefdde50b
- package: google.golang.org/grpc
Expand Down
39 changes: 18 additions & 21 deletions provider/rancher/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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{
Expand All @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -197,35 +194,35 @@ 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),
Containers: []string{},
}

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)
}
}

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 {
Expand Down
2 changes: 1 addition & 1 deletion provider/rancher/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func parseMetadataSourcedRancherData(stacks []rancher.Stack) (rancherDataList []
}

rancherDataList = append(rancherDataList, rancherData{
Name: stack.Name + "/" + service.Name,
Name: service.Name + "/" + stack.Name,
State: service.State,
Labels: service.Labels,
Containers: containerIPAddresses,
Expand Down
15 changes: 15 additions & 0 deletions vendor/github.com/rancher/go-rancher-metadata/metadata/metadata.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 22 additions & 15 deletions vendor/github.com/rancher/go-rancher-metadata/metadata/types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

0 comments on commit 07c6e33

Please sign in to comment.