Skip to content

Commit b1d9cca

Browse files
authored
Merge pull request #180 from rawmind0/log
Updated log_file to sync logs and updated computed fields
2 parents 4ea889f + ff12325 commit b1d9cca

File tree

4 files changed

+114
-15
lines changed

4 files changed

+114
-15
lines changed

CHANGELOG.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
## 1.0.0-rc4 (Unreleased)
1+
## 1.0.0-rc4 (March 13, 2020)
2+
3+
FEATURES:
4+
5+
6+
7+
ENHANCEMENTS:
8+
9+
* Updated `log_file` to sync logs
10+
11+
12+
BUG FIXES:
13+
14+
* Fixed computed fields to avoid inconsistent plan
15+
216
## 1.0.0-rc3 (February 28, 2020)
317

418
FEATURES:

rke/config.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type Config struct {
2424
Debug bool
2525
LogBuffer *bytes.Buffer
2626
LogFile string
27+
File *os.File
2728
}
2829

2930
func (c *Config) initLogger() {
@@ -36,23 +37,25 @@ func (c *Config) initLogger() {
3637
}
3738

3839
var writer io.Writer = c.LogBuffer
39-
//writer := io.MultiWriter(os.Stderr, c.LogBuffer)
40-
40+
if len(c.LogFile) > 0 {
41+
if c.File == nil {
42+
f, errFile := os.OpenFile(c.LogFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
43+
if errFile != nil {
44+
log.Errorf("Opening logfile %s err:%v", c.LogFile, errFile)
45+
return
46+
}
47+
c.File = f
48+
}
49+
writer = io.MultiWriter(c.LogBuffer, c.File)
50+
}
4151
log.SetOutput(writer)
4252
}
4353

4454
func (c *Config) saveRKEOutput(err error) error {
45-
if len(c.LogFile) > 0 {
46-
f, errFile := os.OpenFile(c.LogFile, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644)
47-
if errFile != nil {
48-
return fmt.Errorf("Opening logfile %s err:%v", c.LogFile, errFile)
49-
}
50-
defer f.Close()
51-
if _, errFile := f.Write(c.LogBuffer.Bytes()); errFile != nil {
52-
return fmt.Errorf("Writing logfile %s err:%v", c.LogFile, errFile)
53-
}
55+
if c.File != nil {
56+
defer c.File.Close()
57+
defer c.File.Sync()
5458
}
55-
5659
if err != nil {
5760
return fmt.Errorf(rkeErrorTemplate, c.LogBuffer.String(), err)
5861
}

rke/resource_rke_cluster.go

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,45 @@ func resourceRKECluster() *schema.Resource {
2727
Update: resourceRKEClusterUpdate,
2828
Delete: resourceRKEClusterDelete,
2929
Schema: rkeClusterFields(),
30+
CustomizeDiff: func(d *schema.ResourceDiff, i interface{}) error {
31+
changed, changedKeys := getChangedKeys(d)
32+
if changed > 0 {
33+
computedFields := []string{
34+
"rke_state",
35+
"kube_config_yaml",
36+
"rke_cluster_yaml",
37+
}
38+
39+
if changedKeys["rotate_certificates"] {
40+
for _, key := range []string{"ca_crt", "client_cert", "client_key", "certificates", "kube_admin_user"} {
41+
computedFields = append(computedFields, key)
42+
}
43+
}
44+
45+
if changedKeys["dns"] || changedKeys["services"] {
46+
for _, key := range []string{"cluster_domain", "cluster_cidr", "cluster_dns_server"} {
47+
computedFields = append(computedFields, key)
48+
}
49+
}
50+
51+
if changedKeys["nodes"] {
52+
for _, key := range []string{"api_server_url", "etcd_hosts", "control_plane_hosts", "inactive_hosts", "worker_hosts"} {
53+
computedFields = append(computedFields, key)
54+
}
55+
}
56+
57+
if changedKeys["kubernetes_version"] || changedKeys["system_images"] {
58+
computedFields = append(computedFields, "running_system_images")
59+
}
60+
61+
for _, key := range computedFields {
62+
if err := d.SetNewComputed(key); err != nil {
63+
return err
64+
}
65+
}
66+
}
67+
return nil
68+
},
3069
Timeouts: &schema.ResourceTimeout{
3170
Create: schema.DefaultTimeout(30 * time.Minute),
3271
Update: schema.DefaultTimeout(30 * time.Minute),
@@ -48,7 +87,7 @@ func resourceRKEClusterUpdate(d *schema.ResourceData, meta interface{}) error {
4887
if err := clusterUp(d); err != nil {
4988
return meta.(*Config).saveRKEOutput(err)
5089
}
51-
return meta.(*Config).saveRKEOutput(resourceRKEClusterRead(d, meta))
90+
return resourceRKEClusterRead(d, meta)
5291
}
5392

5493
func resourceRKEClusterRead(d *schema.ResourceData, meta interface{}) error {
@@ -64,7 +103,7 @@ func resourceRKEClusterDelete(d *schema.ResourceData, meta interface{}) error {
64103
log.Info("Deleting RKE cluster...")
65104
err := clusterDelete(d)
66105
if err != nil {
67-
return err
106+
return meta.(*Config).saveRKEOutput(err)
68107
}
69108
d.SetId("")
70109
return nil
@@ -332,6 +371,44 @@ func removeTempDir(tempDir string) {
332371
}
333372
}
334373

374+
func getChangedKeys(d *schema.ResourceDiff) (int, map[string]bool) {
375+
targetKeys := []string{
376+
"addon_job_timeout",
377+
"addons",
378+
"addons_include",
379+
"authentication",
380+
"authorization",
381+
"bastion_host",
382+
"cloud_provider",
383+
"cluster_name",
384+
"dns",
385+
"ignore_docker_version",
386+
"ingress",
387+
"kubernetes_version",
388+
"monitoring",
389+
"network",
390+
"nodes",
391+
"prefix_path",
392+
"private_registries",
393+
"restore",
394+
"rotate_certificates",
395+
"services",
396+
"ssh_agent_auth",
397+
"ssh_cert_path",
398+
"ssh_key_path",
399+
"system_images",
400+
}
401+
changedKeys := map[string]bool{}
402+
changed := 0
403+
for _, key := range targetKeys {
404+
changedKeys[key] = d.HasChange(key)
405+
if changedKeys[key] {
406+
changed++
407+
}
408+
}
409+
return changed, changedKeys
410+
}
411+
335412
type stateNotFoundError struct {
336413
actual error
337414
}

website/docs/r/cluster.html.markdown

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ Provides RKE cluster resource. This can be used to create RKE clusters and retri
1515
Creating RKE cluster
1616

1717
```hcl
18+
# Configure RKE provider
19+
provider "rke" {
20+
debug = true
21+
log_file = "rke_debug.log"
22+
}
1823
# Create a new RKE cluster
1924
resource "rke_cluster" "foo" {
2025
nodes {

0 commit comments

Comments
 (0)