Skip to content
This repository was archived by the owner on Mar 24, 2023. It is now read-only.

Commit bc84eea

Browse files
authored
Merge pull request #87 from dexhorthy/dex/ch9668/random
support for hidden+random as the poor mans "cmd"
2 parents 781b5cb + 89a8c65 commit bc84eea

21 files changed

+1557
-123
lines changed

.wmconfig

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
{
22
"pointer": "replicated-ship",
33
"ignorePatterns": [
4+
".circleci/**",
45
".git/**",
5-
"hack/docs/**",
6+
".ship/**",
7+
"bin/**",
8+
"dist/**",
9+
"deploy/**"
10+
"hack/**",
11+
"installer/**",
12+
"out/**",
613
"examples",
714
".idea/**",
815
"**/*jb_tmp*",
9-
"e2e-retraced/**",
10-
"dist/**",
11-
"deploy/**",
12-
".circleci/**"
16+
"e2e-retraced/**"
1317
]
1418
}

Gopkg.lock

+20-85
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ _vet:
5656
vet: fmt _vet
5757

5858
_lint:
59-
golint ./pkg/... | grep -vE '_mock|e2e' || :
60-
golint ./cmd/... | grep -vE '_mock|e2e' || :
59+
golint ./pkg/... | grep -vE '_mock|e2e' | grep -v "should have comment" | grep -v "comment on exported" || :
60+
golint ./cmd/... | grep -vE '_mock|e2e' | grep -v "should have comment" | grep -v "comment on exported" || :
6161

6262
lint: vet _lint
6363

app.yml

+11-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ assets:
66
contents: |
77
#!/bin/sh
88
kubectl delete ns {{repl ConfigOption "namespace" }}
9+
10+
echo something random is {{repl ConfigOption "always_the_same"}}
911
dest: ./installer/scripts/uninstall.sh
1012
mode: 0777
1113
- docker:
@@ -15,8 +17,8 @@ assets:
1517

1618
config:
1719
v1:
18-
- name: cluster_info
19-
title: Kubernetes Cluster Info
20+
- name: random-demo
21+
title:
2022
description: information about your kubernetes cluster
2123
items:
2224
- name: namespace
@@ -25,6 +27,13 @@ config:
2527
- name: worker_replicas
2628
title: Number of Workers to Deploy
2729
type: text
30+
# since this is hidden+default, it will get written
31+
# to the state one the first save, and then never change again
32+
- name: always_the_same
33+
title: Number of Workers to Deploy
34+
type: text
35+
hidden: true
36+
default: '{{repl RandomString 25}}'
2837

2938
lifecycle:
3039
v1:

pkg/lifecycle/render/config/api.go

+25-10
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"github.com/go-kit/kit/log"
1616
"github.com/go-kit/kit/log/level"
17+
"github.com/pkg/errors"
1718
"github.com/spf13/viper"
1819
)
1920

@@ -53,6 +54,10 @@ func isReadOnly(item *libyaml.ConfigItem) bool {
5354
return !editable
5455
}
5556

57+
func shouldOverrideValueWithDefault(item *libyaml.ConfigItem) bool {
58+
return item.Hidden && item.Value == "" && item.Default != ""
59+
}
60+
5661
func isRequired(item *libyaml.ConfigItem) bool {
5762
return item.Required
5863
}
@@ -172,42 +177,52 @@ func resolveConfigValuesMap(liveValues map[string]interface{}, configGroups []li
172177
func (r *APIConfigRenderer) ResolveConfig(
173178
ctx context.Context,
174179
release *api.Release,
180+
savedState map[string]interface{},
175181
liveValues map[string]interface{},
176182
) ([]libyaml.ConfigGroup, error) {
177183
resolvedConfig := make([]libyaml.ConfigGroup, 0, 0)
178184

179185
updatedValues, err := resolveConfigValuesMap(liveValues, release.Spec.Config.V1, r.Logger, r.Viper)
180186
if err != nil {
181-
return resolvedConfig, err
187+
return resolvedConfig, errors.Wrap(err, "resolve config values map")
182188
}
183189

184190
builder, err := r.newBuilder(ctx, release, updatedValues)
185191
if err != nil {
186-
return resolvedConfig, err
192+
return resolvedConfig, errors.Wrap(err, "initialize tpl builder")
187193
}
188194

189195
for _, configGroup := range release.Spec.Config.V1 {
190196
resolvedItems := make([]*libyaml.ConfigItem, 0, 0)
191197
for _, configItem := range configGroup.Items {
198+
199+
if val, ok := savedState[configItem.Name]; ok {
200+
configItem.Value = fmt.Sprintf("%s", val)
201+
}
202+
192203
if !isReadOnly(configItem) {
193204
if val, ok := liveValues[configItem.Name]; ok {
194-
configItem.Value = fmt.Sprintf("%v", val)
205+
configItem.Value = fmt.Sprintf("%s", val)
195206
}
196207
}
197208

198-
resolvedItem, err := r.resolveConfigItem(ctx, *builder, configItem)
209+
resolvedItem, err := r.applyConfigItemFieldTemplates(ctx, *builder, configItem)
199210
if err != nil {
200-
return resolvedConfig, err
211+
return resolvedConfig, errors.Wrapf(err, "resolve item %s", configItem.Name)
212+
}
213+
214+
if shouldOverrideValueWithDefault(configItem) {
215+
configItem.Value = configItem.Default
201216
}
202217

203218
resolvedItems = append(resolvedItems, resolvedItem)
204219
}
205220

206221
configGroup.Items = resolvedItems
207222

208-
resolvedGroup, err := r.resolveConfigGroup(ctx, *builder, configGroup)
223+
resolvedGroup, err := r.applyConfigGroupFieldTemplates(ctx, *builder, configGroup)
209224
if err != nil {
210-
return resolvedConfig, err
225+
return resolvedConfig, errors.Wrapf(err, "resolve gropu %s", configGroup.Name)
211226
}
212227

213228
resolvedConfig = append(resolvedConfig, resolvedGroup)
@@ -285,9 +300,9 @@ func (r *APIConfigRenderer) newBuilder(
285300
return &builder, nil
286301
}
287302

288-
func (r *APIConfigRenderer) resolveConfigGroup(ctx context.Context, builder templates.Builder, configGroup libyaml.ConfigGroup) (libyaml.ConfigGroup, error) {
303+
func (r *APIConfigRenderer) applyConfigGroupFieldTemplates(ctx context.Context, builder templates.Builder, configGroup libyaml.ConfigGroup) (libyaml.ConfigGroup, error) {
289304
// configgroup doesn't have a hidden attribute, so if the config group is hidden, we should
290-
// set all items as hidden. this is called after resolveConfigItem and will override all hidden
305+
// set all items as hidden. this is called after applyConfigItemFieldTemplates and will override all hidden
291306
// values in items if when is set
292307
builtWhen, err := builder.String(configGroup.When)
293308
if err != nil {
@@ -314,7 +329,7 @@ func (r *APIConfigRenderer) resolveConfigGroup(ctx context.Context, builder temp
314329
return configGroup, nil
315330
}
316331

317-
func (r *APIConfigRenderer) resolveConfigItem(ctx context.Context, builder templates.Builder, configItem *libyaml.ConfigItem) (*libyaml.ConfigItem, error) {
332+
func (r *APIConfigRenderer) applyConfigItemFieldTemplates(ctx context.Context, builder templates.Builder, configItem *libyaml.ConfigItem) (*libyaml.ConfigItem, error) {
318333
// filters
319334
var filters []string
320335
for _, filter := range configItem.Filters {

0 commit comments

Comments
 (0)