Skip to content

Commit adc47e5

Browse files
authored
feat: allow login token refresh url to be overriden (#1806)
1 parent bb628f3 commit adc47e5

File tree

4 files changed

+52
-22
lines changed

4 files changed

+52
-22
lines changed

internal/jimm/bootstrap/bootstrap.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ func (b *bootstrapManager) runBootstrap(
456456
CloudNameAndRegion: p.CloudNameAndRegion,
457457
ControllerName: p.ControllerName,
458458
AgentVersion: p.AgentVersion,
459-
LoginTokenRefreshURL: p.LoginTokenRefreshURL,
459+
DefaultLoginTokenURL: p.LoginTokenRefreshURL,
460460
PersonalCloud: p.PersonalCloud,
461461
CloudCred: p.CloudCred,
462462
UserConfig: p.UserConfig,

internal/jimm/bootstrap/bootstrap_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob(c *qt.C) {
402402
CloudNameAndRegion: jobParams.CloudNameAndRegion,
403403
ControllerName: jobParams.ControllerName,
404404
AgentVersion: jobParams.AgentVersion,
405-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
405+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
406406
PersonalCloud: jobParams.PersonalCloud,
407407
CloudCred: jobParams.CloudCred,
408408
},
@@ -670,7 +670,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_ExecutorFails(c *qt.C) {
670670
CloudNameAndRegion: jobParams.CloudNameAndRegion,
671671
ControllerName: jobParams.ControllerName,
672672
AgentVersion: jobParams.AgentVersion,
673-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
673+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
674674
PersonalCloud: jobParams.PersonalCloud,
675675
CloudCred: jobParams.CloudCred,
676676
},
@@ -743,7 +743,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_ReturnsEarlyIfLineErrors(c *qt.
743743
CloudNameAndRegion: jobParams.CloudNameAndRegion,
744744
ControllerName: jobParams.ControllerName,
745745
AgentVersion: jobParams.AgentVersion,
746-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
746+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
747747
PersonalCloud: jobParams.PersonalCloud,
748748
CloudCred: jobParams.CloudCred,
749749
},
@@ -823,7 +823,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_ClientStoreFailsToGetController
823823
CloudNameAndRegion: jobParams.CloudNameAndRegion,
824824
ControllerName: jobParams.ControllerName,
825825
AgentVersion: jobParams.AgentVersion,
826-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
826+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
827827
PersonalCloud: jobParams.PersonalCloud,
828828
CloudCred: jobParams.CloudCred,
829829
},
@@ -941,7 +941,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_ClientStoreFailsToGetAccountDet
941941
CloudNameAndRegion: jobParams.CloudNameAndRegion,
942942
ControllerName: jobParams.ControllerName,
943943
AgentVersion: jobParams.AgentVersion,
944-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
944+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
945945
PersonalCloud: jobParams.PersonalCloud,
946946
CloudCred: jobParams.CloudCred,
947947
},
@@ -1059,7 +1059,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_JujuManagerFailsToAddController
10591059
CloudNameAndRegion: jobParams.CloudNameAndRegion,
10601060
ControllerName: jobParams.ControllerName,
10611061
AgentVersion: jobParams.AgentVersion,
1062-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
1062+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
10631063
PersonalCloud: jobParams.PersonalCloud,
10641064
CloudCred: jobParams.CloudCred,
10651065
},
@@ -1197,7 +1197,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_CleanupControllerFailure(c *qt.
11971197
CloudNameAndRegion: jobParams.CloudNameAndRegion,
11981198
ControllerName: jobParams.ControllerName,
11991199
AgentVersion: jobParams.AgentVersion,
1200-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
1200+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
12011201
PersonalCloud: jobParams.PersonalCloud,
12021202
CloudCred: jobParams.CloudCred,
12031203
},
@@ -1331,7 +1331,7 @@ func (s *bootstrapManagerSuite) TestBootstrapJob_CancelledJob(c *qt.C) {
13311331
CloudNameAndRegion: jobParams.CloudNameAndRegion,
13321332
ControllerName: jobParams.ControllerName,
13331333
AgentVersion: jobParams.AgentVersion,
1334-
LoginTokenRefreshURL: jobParams.LoginTokenRefreshURL,
1334+
DefaultLoginTokenURL: jobParams.LoginTokenRefreshURL,
13351335
PersonalCloud: jobParams.PersonalCloud,
13361336
CloudCred: jobParams.CloudCred,
13371337
},

internal/jujucommands/bootstrap.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type BootstrapCmdParams struct {
2828
CloudNameAndRegion string
2929
ControllerName string
3030
AgentVersion string
31-
LoginTokenRefreshURL string
31+
DefaultLoginTokenURL string
3232

3333
// Additional args required (like adding credential, cloud, etc.) but JIMM will handle.
3434

@@ -59,11 +59,7 @@ func (b BootstrapCmdParams) Validate() error {
5959
}
6060
}
6161

62-
if _, ok := b.UserConfig[loginTokenRefreshURLKey]; ok {
63-
return fmt.Errorf("%q is a reserved config key and cannot be set in user config", loginTokenRefreshURLKey)
64-
}
65-
66-
if b.LoginTokenRefreshURL == "" {
62+
if b.DefaultLoginTokenURL == "" {
6763
return errors.New("missing login token refresh URL, this value should be automatically set by JIMM")
6864
}
6965

@@ -76,14 +72,24 @@ func (b BootstrapCmdParams) BuildBootstrapCmdArgs() []string {
7672
args = append(args, "bootstrap")
7773

7874
args = append(args, "--config")
79-
args = append(args, fmt.Sprintf("login-token-refresh-url=%s", b.LoginTokenRefreshURL))
75+
76+
// Allow the user to override the login token refresh URL.
77+
// Skip adding it later to avoid duplication.
78+
loginTokenRefreshURL := b.DefaultLoginTokenURL
79+
if v, ok := b.UserConfig[loginTokenRefreshURLKey]; ok {
80+
loginTokenRefreshURL = v
81+
}
82+
args = append(args, fmt.Sprintf("login-token-refresh-url=%s", loginTokenRefreshURL))
8083

8184
// Conditionally add --agent-version if set
8285
if b.AgentVersion != "" {
8386
args = append(args, fmt.Sprintf("--agent-version=%s", b.AgentVersion))
8487
}
8588

8689
for k, v := range b.UserConfig {
90+
if k == loginTokenRefreshURLKey {
91+
continue
92+
}
8793
args = append(args, "--config")
8894
args = append(args, fmt.Sprintf("%s=%s", k, fmt.Sprint(v)))
8995
}

internal/jujucommands/bootstrap_test.go

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_Validate(c *qt.C) {
2727
p.ControllerName = "my-controller"
2828
c.Assert(p.Validate(), qt.ErrorMatches, "missing login token refresh URL, this value should be automatically set by JIMM")
2929

30-
p.LoginTokenRefreshURL = "myurl.com"
30+
p.DefaultLoginTokenURL = "myurl.com"
3131
c.Assert(p.Validate(), qt.IsNil)
3232

3333
p.AgentVersion = "bad version"
@@ -37,6 +37,30 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_Validate(c *qt.C) {
3737
c.Assert(p.Validate(), qt.IsNil)
3838
}
3939

40+
func (s *jujucommandsSuite) TestBootstrapCmdParams_LoginTokenRefreshURLOverrideFromUserConfig(c *qt.C) {
41+
p := jujucommands.BootstrapCmdParams{
42+
CloudNameAndRegion: "testregion/testcloud",
43+
ControllerName: "my-controller",
44+
DefaultLoginTokenURL: "https://default.example/.well-known/jwks.json",
45+
UserConfig: map[string]string{
46+
"bootstrap-timeout": "1000",
47+
"login-token-refresh-url": "https://override.example/.well-known/jwks.json",
48+
},
49+
}
50+
51+
args := p.BuildBootstrapCmdArgs()
52+
c.Assert(args, qt.DeepEquals, []string{
53+
"bootstrap",
54+
"--config",
55+
"login-token-refresh-url=https://override.example/.well-known/jwks.json",
56+
"--config",
57+
"bootstrap-timeout=1000",
58+
"testregion/testcloud",
59+
"my-controller",
60+
fmt.Sprintf("--bootstrap-constraints=arch=%s", runtime.GOARCH),
61+
})
62+
}
63+
4064
func (s *jujucommandsSuite) TestBootstrapCmdParams_BuildBootstrapCmdArgs(c *qt.C) {
4165
tests := []struct {
4266
name string
@@ -49,7 +73,7 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_BuildBootstrapCmdArgs(c *qt.C
4973
CloudNameAndRegion: "testregion/testcloud",
5074
ControllerName: "my-controller",
5175
AgentVersion: "1.1.1",
52-
LoginTokenRefreshURL: "myurl.com",
76+
DefaultLoginTokenURL: "myurl.com",
5377
UserConfig: map[string]string{
5478
"bootstrap-timeout": "1000",
5579
},
@@ -72,7 +96,7 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_BuildBootstrapCmdArgs(c *qt.C
7296
CloudNameAndRegion: "testregion/testcloud",
7397
ControllerName: "my-controller",
7498
AgentVersion: "",
75-
LoginTokenRefreshURL: "myurl.com",
99+
DefaultLoginTokenURL: "myurl.com",
76100
UserConfig: map[string]string{
77101
"bootstrap-timeout": "1000",
78102
},
@@ -94,7 +118,7 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_BuildBootstrapCmdArgs(c *qt.C
94118
CloudNameAndRegion: "testregion/testcloud",
95119
ControllerName: "my-controller",
96120
AgentVersion: "",
97-
LoginTokenRefreshURL: "myurl.com",
121+
DefaultLoginTokenURL: "myurl.com",
98122
},
99123
expect: []string{
100124
"bootstrap",
@@ -142,7 +166,7 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_RunBootstrapCmd_PersonalCloud
142166
CloudNameAndRegion: "testcloud/testregion",
143167
ControllerName: "my-controller",
144168
AgentVersion: "1.1.1",
145-
LoginTokenRefreshURL: "myurl.com",
169+
DefaultLoginTokenURL: "myurl.com",
146170

147171
PersonalCloud: jujucloud.Cloud{
148172
Type: "lxd",
@@ -218,7 +242,7 @@ func (s *jujucommandsSuite) TestBootstrapCmdParams_RunBootstrapCmd_PublicCloudWr
218242
CloudNameAndRegion: "aws/us-east-1",
219243
ControllerName: "my-controller",
220244
AgentVersion: "1.1.1",
221-
LoginTokenRefreshURL: "myurl.com",
245+
DefaultLoginTokenURL: "myurl.com",
222246

223247
CloudCred: cloudCred,
224248
}

0 commit comments

Comments
 (0)