Skip to content

Commit 287588c

Browse files
committed
feat: add -config option for config file
1 parent 2d1dead commit 287588c

File tree

2 files changed

+98
-1
lines changed

2 files changed

+98
-1
lines changed

README.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
```shell
1010
$ trick -h
1111
Usage of trick
12+
-config string
13+
path to config file
1214
-refresh int
1315
refresh IAM every n minutes (default 12)
1416
-region string
@@ -50,6 +52,37 @@ to your user PATH.
5052
trick -role arn::42::role-a -role arn::42::role-b -role arn::42::role-c
5153
```
5254

55+
<details>
56+
<summary>config file version</summary>
57+
58+
```shell
59+
trick -config path/to/config.hcl
60+
```
61+
62+
```hcl
63+
select_profile = profile.simple
64+
65+
# -region eu-west-1 \
66+
# -role arn::42::role-a -role arn::42::role-b -role arn::42::role-c
67+
profile "simple" {
68+
chain {
69+
use {
70+
arn = "arn::42::role-a"
71+
}
72+
73+
use {
74+
arn = "arn::42::role-b"
75+
}
76+
77+
use {
78+
arn = "arn::42::role-c"
79+
}
80+
}
81+
}
82+
```
83+
84+
</details>
85+
5386
```mermaid
5487
stateDiagram
5588
rA: role A
@@ -68,11 +101,54 @@ stateDiagram
68101
> roles that matter to us.
69102
70103
```shell
71-
trick -role arn::42::role-a -role arn::42::role-b \
104+
trick -region eu-west-1 -refresh 12 \
105+
-role arn::42::role-a -role arn::42::role-b \
72106
-role arn::42::role-c -role arn::42::role-d \
73107
-use arn::42::role-a -use arn::42::role-d
74108
```
75109

110+
<details>
111+
<summary>config file version</summary>
112+
113+
```shell
114+
trick -config path/to/config.hcl
115+
```
116+
117+
```hcl
118+
# -region eu-west-1 -refresh 12 \
119+
# -role arn::42::role-a -role arn::42::role-b \
120+
# -role arn::42::role-c -role arn::42::role-d \
121+
# -use arn::42::role-a -use arn::42::role-d
122+
profile "complex" {
123+
region = "eu-west-1"
124+
125+
chain {
126+
ttl = 12
127+
128+
use {
129+
arn = "arn::42::role-a"
130+
skip = false # Defaults to false; you can skip it.
131+
}
132+
133+
use {
134+
arn = "arn::42::role-b"
135+
skip = true
136+
}
137+
138+
use {
139+
arn = "arn::42::role-c"
140+
skip = true
141+
}
142+
143+
use {
144+
arn = "arn::42::role-d"
145+
}
146+
}
147+
}
148+
```
149+
150+
</details>
151+
76152
```mermaid
77153
stateDiagram
78154
rA: role A

main.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"os/signal"
1313
"syscall"
1414
"time"
15+
16+
"github.com/wakeful/trick/internal/parser"
1517
)
1618

1719
const (
@@ -25,6 +27,7 @@ var version = "dev"
2527

2628
//nolint:funlen
2729
func main() {
30+
config := flag.String("config", "", "path to config file")
2831
refresh := flag.Int64("refresh", defaultRefreshTime, "refresh IAM every n minutes")
2932
region := flag.String("region", "eu-west-1", "AWS region used for IAM communication")
3033
showVersion := flag.Bool("version", false, "show version")
@@ -60,6 +63,24 @@ func main() {
6063
return
6164
}
6265

66+
if *config != "" {
67+
slog.Debug("loading config file", slog.String("path", *config))
68+
69+
cfgFile, err := parser.ParseFile(*config)
70+
if err != nil {
71+
slog.Error("failed to parse config file", slog.String("error", err.Error()))
72+
73+
return
74+
}
75+
76+
*refresh, roleVars, useRoleVars, err = cfgFile.ToFlags()
77+
if err != nil {
78+
slog.Error("failed to convert config to flags", slog.String("error", err.Error()))
79+
80+
return
81+
}
82+
}
83+
6384
ctx, cancel := context.WithCancel(context.Background())
6485

6586
signalCtx, stop := signal.NotifyContext(ctx, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)

0 commit comments

Comments
 (0)