Skip to content
This repository was archived by the owner on Dec 5, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 38 additions & 6 deletions rancher/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,24 @@ func Provider() terraform.ResourceProvider {
DefaultFunc: schema.EnvDefaultFunc("RANCHER_SECRET_KEY", ""),
Description: descriptions["secret_key"],
},
"cattle_url": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("CATTLE_URL", ""),
Description: descriptions["cattle_url"],
},
"cattle_access_key": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("CATTLE_ACCESS_KEY", ""),
Description: descriptions["cattle_access_key"],
},
"cattle_secret_key": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("CATTLE_SECRET_KEY", ""),
Description: descriptions["cattle_secret_key"],
},
"config": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -80,29 +98,37 @@ func init() {

"secret_key": "API secret used to authenticate with the rancher server",

"api_url": "The URL to the rancher API, must include version uri (ie. v1 or v2-beta)",
"api_url": "The URL to the rancher API",

"cattle_access_key": "API Key used to authenticate with the rancher server",

"cattle_secret_key": "API secret used to authenticate with the rancher server",

"cattle_url": "The URL to the rancher API",

"config": "Path to the Rancher client cli.json config file",
}
}

func providerConfigure(d *schema.ResourceData) (interface{}, error) {
// Fetch configuration from deprecated environment variables
apiURL := d.Get("api_url").(string)
accessKey := d.Get("access_key").(string)
secretKey := d.Get("secret_key").(string)

// Override with new environment variables
apiURL = d.Get("cattle_url").(string)
accessKey = d.Get("cattle_access_key").(string)
secretKey = d.Get("cattle_secret_key").(string)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why duplicate the keys if they have exactly the same role?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So that we can use the environment variables provided by cattle

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I see…


if configFile := d.Get("config").(string); configFile != "" {
config, err := loadConfig(configFile)
if err != nil {
return config, err
}

if apiURL == "" && config.URL != "" {
u, err := url.Parse(config.URL)
if err != nil {
return config, err
}
apiURL = u.Scheme + "://" + u.Host
apiURL = config.URL
}

if accessKey == "" {
Expand All @@ -118,6 +144,12 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
return &Config{}, fmt.Errorf("No api_url provided")
}

u, err := url.Parse(apiURL)
if err != nil {
return &Config{}, err
}
apiURL = u.Scheme + "://" + u.Host

config := &Config{
APIURL: apiURL,
AccessKey: accessKey,
Expand Down
43 changes: 34 additions & 9 deletions rancher/resource_rancher_certificate.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
rancher "github.com/rancher/go-rancher/v2"
rancherClient "github.com/rancher/go-rancher/v2"
)

func resourceRancherCertificate() *schema.Resource {
Expand Down Expand Up @@ -35,7 +35,8 @@ func resourceRancherCertificate() *schema.Resource {
},
"environment_id": &schema.Schema{
Type: schema.TypeString,
Required: true,
Optional: true,
Computed: true,
},
"cert": &schema.Schema{
Type: schema.TypeString,
Expand Down Expand Up @@ -96,7 +97,13 @@ func resourceRancherCertificate() *schema.Resource {

func resourceRancherCertificateCreate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO][rancher] Creating Certificate: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand All @@ -107,7 +114,7 @@ func resourceRancherCertificateCreate(d *schema.ResourceData, meta interface{})
certChain := d.Get("cert_chain").(string)
key := d.Get("key").(string)

certificate := rancher.Certificate{
certificate := rancherClient.Certificate{
Name: name,
Description: description,
Cert: cert,
Expand Down Expand Up @@ -141,7 +148,13 @@ func resourceRancherCertificateCreate(d *schema.ResourceData, meta interface{})

func resourceRancherCertificateRead(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Refreshing Certificate: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down Expand Up @@ -173,7 +186,13 @@ func resourceRancherCertificateRead(d *schema.ResourceData, meta interface{}) er

func resourceRancherCertificateUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Updating Certificate: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand All @@ -197,7 +216,7 @@ func resourceRancherCertificateUpdate(d *schema.ResourceData, meta interface{})
"key": &key,
}

var newCertificate rancher.Certificate
var newCertificate rancherClient.Certificate
if err := client.Update("certificate", &certificate.Resource, data, &newCertificate); err != nil {
return err
}
Expand All @@ -208,7 +227,13 @@ func resourceRancherCertificateUpdate(d *schema.ResourceData, meta interface{})
func resourceRancherCertificateDelete(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Deleting Certificate: %s", d.Id())
id := d.Id()
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down Expand Up @@ -264,7 +289,7 @@ func resourceRancherCertificateImport(d *schema.ResourceData, meta interface{})

// CertificateStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch
// a Rancher Certificate.
func CertificateStateRefreshFunc(client *rancher.RancherClient, certificateID string) resource.StateRefreshFunc {
func CertificateStateRefreshFunc(client *rancherClient.RancherClient, certificateID string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
cert, err := client.Certificate.ById(certificateID)

Expand Down
47 changes: 36 additions & 11 deletions rancher/resource_rancher_host.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
rancher "github.com/rancher/go-rancher/v2"
rancherClient "github.com/rancher/go-rancher/v2"
)

// ro_labels are used internally by Rancher
Expand Down Expand Up @@ -41,7 +41,8 @@ func resourceRancherHost() *schema.Resource {
},
"environment_id": &schema.Schema{
Type: schema.TypeString,
Required: true,
Optional: true,
Computed: true,
},
"hostname": &schema.Schema{
Type: schema.TypeString,
Expand All @@ -58,7 +59,13 @@ func resourceRancherHost() *schema.Resource {

func resourceRancherHostCreate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO][rancher] Creating Host: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand All @@ -80,16 +87,16 @@ func resourceRancherHostCreate(d *schema.ResourceData, meta interface{}) error {
"Error waiting for host (%s) to be found: %s", hostname, waitErr)
}

d.SetId(host.(rancher.Host).Id)
d.SetId(host.(rancherClient.Host).Id)

return resourceRancherHostUpdate(d, meta)
}

func findHost(client *rancher.RancherClient, hostname string) resource.StateRefreshFunc {
func findHost(client *rancherClient.RancherClient, hostname string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {

hosts, _ := client.Host.List(NewListOpts())
var host rancher.Host
var host rancherClient.Host

for _, h := range hosts.Data {
if h.Hostname == hostname {
Expand All @@ -104,7 +111,13 @@ func findHost(client *rancher.RancherClient, hostname string) resource.StateRefr

func resourceRancherHostRead(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Refreshing Host: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down Expand Up @@ -144,7 +157,13 @@ func resourceRancherHostRead(d *schema.ResourceData, meta interface{}) error {

func resourceRancherHostUpdate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Updating Host: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand All @@ -168,7 +187,7 @@ func resourceRancherHostUpdate(d *schema.ResourceData, meta interface{}) error {
"labels": &labels,
}

var newHost rancher.Host
var newHost rancherClient.Host
if err := client.Update("host", &host.Resource, data, &newHost); err != nil {
return err
}
Expand All @@ -179,7 +198,13 @@ func resourceRancherHostUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceRancherHostDelete(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Deleting Host: %s", d.Id())
id := d.Id()
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down Expand Up @@ -239,7 +264,7 @@ func resourceRancherHostDelete(d *schema.ResourceData, meta interface{}) error {

// HostStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch
// a Rancher Host.
func HostStateRefreshFunc(client *rancher.RancherClient, hostID string) resource.StateRefreshFunc {
func HostStateRefreshFunc(client *rancherClient.RancherClient, hostID string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
host, err := client.Host.ById(hostID)

Expand Down
28 changes: 23 additions & 5 deletions rancher/resource_rancher_registration_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ func resourceRancherRegistrationToken() *schema.Resource {
},
"environment_id": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
Optional: true,
Computed: true,
},
"token": &schema.Schema{
Type: schema.TypeString,
Expand Down Expand Up @@ -70,7 +70,13 @@ func resourceRancherRegistrationToken() *schema.Resource {

func resourceRancherRegistrationTokenCreate(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Creating RegistrationToken: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down Expand Up @@ -110,7 +116,13 @@ func resourceRancherRegistrationTokenCreate(d *schema.ResourceData, meta interfa

func resourceRancherRegistrationTokenRead(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Refreshing RegistrationToken: %s", d.Id())
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down Expand Up @@ -150,7 +162,13 @@ func resourceRancherRegistrationTokenRead(d *schema.ResourceData, meta interface
func resourceRancherRegistrationTokenDelete(d *schema.ResourceData, meta interface{}) error {
log.Printf("[INFO] Deleting RegistrationToken: %s", d.Id())
id := d.Id()
client, err := meta.(*Config).EnvironmentClient(d.Get("environment_id").(string))
var client *rancherClient.RancherClient
var err error
if environmentId := d.Get("environment_id").(string); environmentId != "" {
client, err = meta.(*Config).EnvironmentClient(environmentId)
} else {
client, err = meta.(*Config).GlobalClient()
}
if err != nil {
return err
}
Expand Down
Loading