Skip to content
This repository was archived by the owner on Apr 13, 2020. It is now read-only.

Commit cd18f00

Browse files
authored
[DESIGN] Design doc for making spk infra scaffold command more human friendly (#381)
1 parent 6ff63d4 commit cd18f00

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# Software Design Document
2+
3+
Reference: Introspection - An option to take variables in SPK scaffold
4+
command<br> Authors: Andre Briggs, Yvonne Radsmikham, Nathaniel Rose, Dennis
5+
Seah
6+
7+
| Revision | Date | Author | Remarks |
8+
| -------: | ------------ | ----------- | ------------------------------------------------- |
9+
| 0.1 | Mar-07, 2020 | Dennis Seah | Initial Draft |
10+
| 0.2 | Mar-09, 2020 | Dennis Seah | Incorporated comments from Nate, Yvonne and Andre |
11+
12+
## 1. Overview
13+
14+
`spk infra scaffold` command create a `definition.yaml` that enables user to
15+
version, modify and organize terraform deployments. There are many variables in
16+
this file; and it requires use to edit this file in order to complete it.
17+
18+
We want to reduce this two steps process (running `spk infra scaffold` and edit
19+
`definition.yaml` file) into a single process by enhancing the existing
20+
`spk infra scaffold` command.
21+
22+
## 2. Out of Scope
23+
24+
This design shall only target making user experience better by reducing the
25+
number of steps in scaffolding.
26+
27+
## 3. Design Details
28+
29+
### 3.1 New option --file
30+
31+
In the current release (0.5.6),
32+
[`spk infra scaffold`](https://catalystcode.github.io/spk/commands/index.html#0.5.6@infra_scaffold)
33+
has 4 options (`--name`, `--source`, `--version` and `--template`). We shall
34+
introduce a new option `-f`, `--file` which allows user to specify a file that
35+
contains values for these variables.
36+
37+
The format of this file is `key=value`. E.g.
38+
39+
```
40+
address_space=10.10.0.0/16
41+
agent_vm_count=4
42+
agent_vm_size=Standard_D2s_v3
43+
cluster_name=discovery-service-west
44+
```
45+
46+
leading and trailing spaces should be trimmed. E.g. `address_space=10.10.0.0/16`
47+
is the same as `address_space = 10.10.0.0/16` and `address_space = 10.10.0.0/16`
48+
49+
The command shall not be executed if
50+
51+
1. unknown key(s) are found in the file. E.g. `abc=hello`
52+
2. incorrect type e.g `agent_vm_count=four` where `agent_vm_count` needs a
53+
integer value.
54+
55+
This means that pre validations are needed before executing the command.
56+
57+
### 3.2 Interactive option
58+
59+
User can runs `spk infra scaffold --interactive`. In this mode, user shall be
60+
prompt for
61+
62+
1. Cluster name for scaffolding (value for option `--name`)
63+
2. Source URL for the repository containing the terraform deployment (value for
64+
option `--source`)
65+
3. Version or tag for the repository so a fixed version is referenced (value for
66+
option `--version`)
67+
4. Location of the variables.tf for the terraform deployment (value for option
68+
`--template`)
69+
70+
And a question to each of the variable in `definition.yaml`. User can provide
71+
answers the questions; or hit \<enter> key to skip them. Validation shall be
72+
done on each question.
73+
74+
> Description for each variable can be found in
75+
> [terraform's azure webpage](https://learn.hashicorp.com/terraform/azure/variables_az).
76+
> We just have to create a map of variable names to their descriptions (that's
77+
> not hardcoding description in our code).
78+
79+
Answer to question can be also placeholder like `${SERVICE_PRINCIPAL_PASSWORD}`
80+
when environment parameter value is used for the variable.
81+
82+
## 4. Dependencies
83+
84+
Open source project, [inquirer](https://www.npmjs.com/package/inquirer).
85+
86+
We do not have list and map variable formats now. In future, we may have them
87+
and we need to provide proper interactive interfaces for them.
88+
89+
## 5. Risks & Mitigations
90+
91+
Sensitive information is in the input for `--file` option. User has to take
92+
special case of this file.
93+
94+
## 6. Documentation
95+
96+
Documentation should be done in the
97+
[`md` file](https://github.com/CatalystCode/spk/blob/master/src/commands/infra/scaffold.md)
98+
that are associated with `spk infra scaffold` command.
99+
100+
\- end -

0 commit comments

Comments
 (0)