@payfit/iac 1.0.3 → 1.0.4-ephemeral-iac-migration-docs.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/executors/stack-migration/README.md +71 -115
- package/dist/executors/stack-migration/lib/migration-tool.d.ts +1 -5
- package/dist/executors/stack-migration/lib/migration-tool.js +213 -211
- package/dist/executors/stack-migration/lib/migration-tool.js.map +1 -1
- package/dist/executors/stack-migration/lib/templates/index.d.ts +1 -0
- package/dist/executors/stack-migration/lib/templates/index.js +1 -0
- package/dist/executors/stack-migration/lib/templates/index.js.map +1 -1
- package/dist/executors/stack-migration/lib/templates/mermaid-diagram.d.ts +13 -0
- package/dist/executors/stack-migration/lib/templates/mermaid-diagram.js +46 -0
- package/dist/executors/stack-migration/lib/templates/mermaid-diagram.js.map +1 -0
- package/dist/executors/stack-migration/lib/templates/message-templates.d.ts +15 -20
- package/dist/executors/stack-migration/lib/templates/message-templates.js +34 -93
- package/dist/executors/stack-migration/lib/templates/message-templates.js.map +1 -1
- package/dist/executors/stack-migration/lib/templates/pr-templates.d.ts +16 -9
- package/dist/executors/stack-migration/lib/templates/pr-templates.js +77 -121
- package/dist/executors/stack-migration/lib/templates/pr-templates.js.map +1 -1
- package/dist/executors/stack-migration/lib/templates/procedure-template.d.ts +1 -0
- package/dist/executors/stack-migration/lib/templates/procedure-template.js +37 -118
- package/dist/executors/stack-migration/lib/templates/procedure-template.js.map +1 -1
- package/dist/executors/stack-migration/schema.d.ts +2 -3
- package/dist/executors/stack-migration/schema.json +2 -3
- package/dist/executors/stack-migration/stack-migration.js +2 -5
- package/dist/executors/stack-migration/stack-migration.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,150 +4,106 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.PRTemplates = void 0;
|
|
7
|
+
const mermaid_diagram_1 = require("./mermaid-diagram");
|
|
7
8
|
const formatJiraTicket = (jiraTicket) => {
|
|
8
9
|
if (!jiraTicket)
|
|
9
10
|
return '';
|
|
10
|
-
return `\n\n
|
|
11
|
+
return `\n\n${jiraTicket}`;
|
|
11
12
|
};
|
|
12
13
|
exports.PRTemplates = {
|
|
13
14
|
/**
|
|
14
|
-
* Safety Net PR body
|
|
15
|
+
* Safety Net PR body
|
|
15
16
|
*/
|
|
16
17
|
safetyNetPRBody: (repoName, jiraTicket) => `
|
|
17
|
-
**
|
|
18
|
+
**Safety Net** Disable autodeploy for \`${repoName}\` stacks
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
${mermaid_diagram_1.MermaidDiagram.prMergeOrder()}
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
| Action | Details |
|
|
23
|
+
|--------|---------|
|
|
24
|
+
| Updates | \`projects/configs/${repoName}.yaml\` |
|
|
25
|
+
| Sets | \`autodeploy: false\` for all stacks |
|
|
24
26
|
|
|
25
|
-
**
|
|
26
|
-
- Sets \`autodeploy: false\` for all stacks in the repository
|
|
27
|
-
|
|
28
|
-
**Next steps:**
|
|
29
|
-
- [ ] Review and merge this PR
|
|
30
|
-
- [ ] Wait for Spacelift to apply the changes
|
|
31
|
-
- [ ] Proceed with domain enrollment
|
|
32
|
-
|
|
33
|
-
**DO NOT REVERT THIS** until migration is complete.${formatJiraTicket(jiraTicket)}
|
|
27
|
+
⚠️ **Merge first** before any other migration PR.${formatJiraTicket(jiraTicket)}
|
|
34
28
|
`.trim(),
|
|
35
29
|
/**
|
|
36
|
-
* Domain Enrollment PR body
|
|
30
|
+
* Domain Enrollment PR body
|
|
37
31
|
*/
|
|
38
|
-
domainEnrollmentPRBody: (repoName, domain, jiraTicket) => `
|
|
39
|
-
**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
**
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
**Prerequisites:**
|
|
53
|
-
1. ✓ PR #1 (Safety Net) merged
|
|
54
|
-
|
|
55
|
-
**Next steps:**
|
|
56
|
-
- [ ] Review and merge this PR
|
|
57
|
-
- [ ] Wait for metastack stack to be deployed
|
|
58
|
-
- [ ] Verify stack is created: \`metastack-repo-${repoName}\`
|
|
59
|
-
- [ ] Proceed with service repository PR${formatJiraTicket(jiraTicket)}
|
|
32
|
+
domainEnrollmentPRBody: (repoName, domain, jiraTicket, safetyNetPrUrl) => `
|
|
33
|
+
**Domain Enrollment** Enroll \`${repoName}\` in **${domain}** domain
|
|
34
|
+
|
|
35
|
+
${mermaid_diagram_1.MermaidDiagram.prMergeOrder()}
|
|
36
|
+
|
|
37
|
+
| Action | Details |
|
|
38
|
+
|--------|---------|
|
|
39
|
+
| Adds to | \`domains/${domain}/spacelift/spacelift.yaml\` |
|
|
40
|
+
| Creates | \`metastack-repo-${repoName}\` |
|
|
41
|
+
${safetyNetPrUrl ? `
|
|
42
|
+
**Related PRs:** [Safety Net](${safetyNetPrUrl})
|
|
43
|
+
` : ''}
|
|
44
|
+
**After merge:** Wait for metastack stack deployment success before continuing.${formatJiraTicket(jiraTicket)}
|
|
60
45
|
`.trim(),
|
|
61
46
|
/**
|
|
62
|
-
*
|
|
47
|
+
* iac-deploy Cleanup PR body
|
|
63
48
|
*/
|
|
64
|
-
|
|
65
|
-
**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- [ ] PR #2: Domain enrollment PR merged
|
|
83
|
-
- [ ] Metastack stack deployed
|
|
84
|
-
- [ ] State removal commands executed
|
|
85
|
-
- [ ] Stack spaces updated (if needed)
|
|
86
|
-
- [ ] PR #3: Cleanup PR merged (iac-deploy)
|
|
87
|
-
|
|
88
|
-
**After merging:**
|
|
89
|
-
- The metastack stack will automatically import existing resources
|
|
90
|
-
- All stacks will be managed via this repository${formatJiraTicket(jiraTicket)}
|
|
49
|
+
iacDeployCleanupPRBody: (repoName, jiraTicket, relatedPrs) => `
|
|
50
|
+
**iac-deploy Cleanup** Remove \`${repoName}\` from iac-deploy
|
|
51
|
+
|
|
52
|
+
${mermaid_diagram_1.MermaidDiagram.prMergeOrder()}
|
|
53
|
+
|
|
54
|
+
| Action | Details |
|
|
55
|
+
|--------|---------|
|
|
56
|
+
| Removes | \`projects/configs/${repoName}.yaml\` |
|
|
57
|
+
| Expected plan | **No changes** |
|
|
58
|
+
${relatedPrs?.safetyNet || relatedPrs?.domainEnrollment ? `
|
|
59
|
+
**Related PRs:** ${[
|
|
60
|
+
relatedPrs?.safetyNet ? `[Safety Net](${relatedPrs.safetyNet})` : '',
|
|
61
|
+
relatedPrs?.domainEnrollment ? `[Domain Enrollment](${relatedPrs.domainEnrollment})` : '',
|
|
62
|
+
].filter(Boolean).join(' | ')}
|
|
63
|
+
` : ''}
|
|
64
|
+
⚠️ **Before merging:**
|
|
65
|
+
1. Run state removal script
|
|
66
|
+
2. Trigger plan from Spacelift, it should show **no changes**${formatJiraTicket(jiraTicket)}
|
|
91
67
|
`.trim(),
|
|
92
68
|
/**
|
|
93
|
-
*
|
|
69
|
+
* Service Repository PR body
|
|
94
70
|
*/
|
|
95
|
-
|
|
96
|
-
**
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
|
|
115
|
-
**Expected result:**
|
|
116
|
-
- Terraform plan should show NO changes (resources already removed from state)
|
|
117
|
-
|
|
118
|
-
**After merging:**
|
|
119
|
-
- Proceed to merge PR #4 (Service Repository)${formatJiraTicket(jiraTicket)}
|
|
71
|
+
serviceRepoPRBody: (repoName, jiraTicket, relatedPrs) => `
|
|
72
|
+
**Service Repo Migration** Migrate \`${repoName}\` to metastack
|
|
73
|
+
|
|
74
|
+
${mermaid_diagram_1.MermaidDiagram.prMergeOrder()}
|
|
75
|
+
|
|
76
|
+
| File | Purpose |
|
|
77
|
+
|------|---------|
|
|
78
|
+
| \`spacelift.yaml\` | Stack definitions |
|
|
79
|
+
| \`.metastack/import.tf\` | Import existing resources |
|
|
80
|
+
${relatedPrs?.safetyNet || relatedPrs?.domainEnrollment || relatedPrs?.iacDeployCleanup ? `
|
|
81
|
+
**Related PRs:** ${[
|
|
82
|
+
relatedPrs?.safetyNet ? `[Safety Net](${relatedPrs.safetyNet})` : '',
|
|
83
|
+
relatedPrs?.domainEnrollment ? `[Domain Enrollment](${relatedPrs.domainEnrollment})` : '',
|
|
84
|
+
relatedPrs?.iacDeployCleanup ? `[iac-deploy Cleanup](${relatedPrs.iacDeployCleanup})` : '',
|
|
85
|
+
].filter(Boolean).join(' | ')}
|
|
86
|
+
` : ''}
|
|
87
|
+
⚠️ **Before merging:**
|
|
88
|
+
1. iac-deploy cleanup PR merged
|
|
89
|
+
2. Run migrate-spaces script
|
|
90
|
+
3. Trigger plan from Spacelift, imports should succeed & it should show **no changes**${formatJiraTicket(jiraTicket)}
|
|
120
91
|
`.trim(),
|
|
121
92
|
/**
|
|
122
|
-
*
|
|
93
|
+
* Post-Migration Cleanup PR body
|
|
123
94
|
*/
|
|
124
|
-
|
|
125
|
-
**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
**Prerequisites:**
|
|
138
|
-
- [ ] All migration PRs merged
|
|
139
|
-
- [ ] Metastack is successfully managing all stacks
|
|
140
|
-
- [ ] State has been imported successfully
|
|
141
|
-
|
|
142
|
-
**⚠️ IMPORTANT**
|
|
143
|
-
Only merge this PR after confirming that:
|
|
144
|
-
1. The metastack stack has successfully imported all resources
|
|
145
|
-
2. All stacks are running normally under metastack management
|
|
146
|
-
3. No import errors occurred
|
|
147
|
-
|
|
148
|
-
**After merging:**
|
|
149
|
-
- Migration cleanup is complete
|
|
150
|
-
- Repository is fully migrated to metastack${formatJiraTicket(jiraTicket)}
|
|
95
|
+
postMigrationCleanupPRBody: (repoName, jiraTicket) => `
|
|
96
|
+
**Post-Migration Cleanup** Remove migration files from \`${repoName}\`
|
|
97
|
+
|
|
98
|
+
| Action | Details |
|
|
99
|
+
|--------|---------|
|
|
100
|
+
| Removes | \`.metastack/import.tf\` |
|
|
101
|
+
| Updates | \`.metastack/version.tf\` (removes spacelift provider) |
|
|
102
|
+
|
|
103
|
+
⚠️ **Before merging:**
|
|
104
|
+
1. All migration PRs merged
|
|
105
|
+
2. Metastack successfully imported all resources
|
|
106
|
+
3. No import errors occurred${formatJiraTicket(jiraTicket)}
|
|
151
107
|
`.trim(),
|
|
152
108
|
};
|
|
153
109
|
//# sourceMappingURL=pr-templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-templates.js","sourceRoot":"","sources":["../../../../../src/executors/stack-migration/lib/templates/pr-templates.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAM,gBAAgB,GAAG,CAAC,UAAmB,EAAU,EAAE;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"pr-templates.js","sourceRoot":"","sources":["../../../../../src/executors/stack-migration/lib/templates/pr-templates.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uDAAkD;AAElD,MAAM,gBAAgB,GAAG,CAAC,UAAmB,EAAU,EAAE;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAA;IAC1B,OAAO,OAAO,UAAU,EAAE,CAAA;AAC5B,CAAC,CAAA;AAEY,QAAA,WAAW,GAAG;IACzB;;OAEG;IACH,eAAe,EAAE,CAAC,QAAgB,EAAE,UAAmB,EAAE,EAAE,CAAC;0CACpB,QAAQ;;EAEhD,gCAAc,CAAC,YAAY,EAAE;;;;iCAIE,QAAQ;;;mDAGU,gBAAgB,CAAC,UAAU,CAAC;CAC9E,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,sBAAsB,EAAE,CAAC,QAAgB,EAAE,MAAc,EAAE,UAAmB,EAAE,cAAuB,EAAE,EAAE,CAAC;iCAC7E,QAAQ,WAAW,MAAM;;EAExD,gCAAc,CAAC,YAAY,EAAE;;;;wBAIP,MAAM;+BACC,QAAQ;EACrC,cAAc,CAAC,CAAC,CAAC;gCACa,cAAc;CAC7C,CAAC,CAAC,CAAC,EAAE;iFAC2E,gBAAgB,CAAC,UAAU,CAAC;CAC5G,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,sBAAsB,EAAE,CAAC,QAAgB,EAAE,UAAmB,EAAE,UAA8D,EAAE,EAAE,CAAC;kCACnG,QAAQ;;EAExC,gCAAc,CAAC,YAAY,EAAE;;;;iCAIE,QAAQ;;EAEvC,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;mBACvC;QACf,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,gBAAgB,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE;QACpE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE;KAC1F,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;CAC9B,CAAC,CAAC,CAAC,EAAE;;;+DAGyD,gBAAgB,CAAC,UAAU,CAAC;CAC1F,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,iBAAiB,EAAE,CAAC,QAAgB,EAAE,UAAmB,EAAE,UAAyF,EAAE,EAAE,CAAC;uCACpH,QAAQ;;EAE7C,gCAAc,CAAC,YAAY,EAAE;;;;;;EAM7B,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE,gBAAgB,IAAI,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;mBACvE;QACf,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,gBAAgB,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE;QACpE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE;QACzF,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE;KAC3F,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;CAC9B,CAAC,CAAC,CAAC,EAAE;;;;wFAIkF,gBAAgB,CAAC,UAAU,CAAC;CACnH,CAAC,IAAI,EAAE;IAEN;;OAEG;IACH,0BAA0B,EAAE,CAAC,QAAgB,EAAE,UAAmB,EAAE,EAAE,CAAC;2DACd,QAAQ;;;;;;;;;;8BAUrC,gBAAgB,CAAC,UAAU,CAAC;CACzD,CAAC,IAAI,EAAE;CACP,CAAA"}
|
|
@@ -1,144 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Migration procedure template
|
|
4
|
+
* Streamlined with mermaid diagram for clarity
|
|
4
5
|
*/
|
|
5
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
7
|
exports.generateMigrationProcedure = generateMigrationProcedure;
|
|
8
|
+
const mermaid_diagram_1 = require("./mermaid-diagram");
|
|
7
9
|
function generateMigrationProcedure(config) {
|
|
8
10
|
const { serviceRepository, stacks, generatedFiles } = config;
|
|
9
|
-
|
|
11
|
+
const stackIds = stacks.map(s => `${s.identifier}-${s.environment}-${s.region || 'eu-west-3'}`);
|
|
12
|
+
return `# Metastack Migration: ${serviceRepository.name}
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
| Property | Value |
|
|
15
|
+
|----------|-------|
|
|
16
|
+
| Domain | ${serviceRepository.domain} |
|
|
17
|
+
| Team | ${serviceRepository.team} |
|
|
18
|
+
| Target Space | \`domain-${serviceRepository.domain}\` |
|
|
19
|
+
| Metastack | \`metastack-repo-${serviceRepository.name}\` |
|
|
12
20
|
|
|
13
|
-
|
|
14
|
-
Domain: ${serviceRepository.domain}
|
|
15
|
-
Team: ${serviceRepository.team}
|
|
21
|
+
## Migration Flow
|
|
16
22
|
|
|
17
|
-
|
|
23
|
+
${mermaid_diagram_1.MermaidDiagram.migrationFlow(serviceRepository.name)}
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
- Domain Enrollment: ${generatedFiles.domainEnrollmentPR?.url || 'N/A'}
|
|
21
|
-
- Service Repository: ${generatedFiles.serviceRepoPR?.url || 'N/A'}
|
|
22
|
-
- iac-deploy Cleanup: ${generatedFiles.iacDeployPR?.url || 'N/A'}
|
|
25
|
+
## Pull Requests
|
|
23
26
|
|
|
24
|
-
|
|
27
|
+
| PR | Repository | Status |
|
|
28
|
+
|----|------------|--------|
|
|
29
|
+
| Safety Net | iac-deploy | ${generatedFiles.safetyNetPR?.url || '—'} |
|
|
30
|
+
| Domain Enrollment | domain-enrollment | ${generatedFiles.domainEnrollmentPR?.url || '—'} |
|
|
31
|
+
| iac-deploy Cleanup | iac-deploy | ${generatedFiles.iacDeployPR?.url || '—'} |
|
|
32
|
+
| Service Migration | ${serviceRepository.name} | ${generatedFiles.serviceRepoPR?.url || '—'} |
|
|
25
33
|
|
|
26
|
-
|
|
34
|
+
## Checklist
|
|
27
35
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
### Phase 1: Safety & Enrollment
|
|
37
|
+
- [ ] Merge **Safety Net** PR (disables autodeploy)
|
|
38
|
+
- [ ] Merge **Domain Enrollment** PR
|
|
39
|
+
- [ ] Verify \`metastack-repo-${serviceRepository.name}\` is deployed
|
|
31
40
|
|
|
32
|
-
###
|
|
41
|
+
### Phase 2: State Management
|
|
42
|
+
- [ ] Run state removal: \`./METASTACK_STATE_REMOVAL_COMMANDS.sh\`
|
|
43
|
+
- [ ] **iac-deploy Cleanup** PR: Verify plan from Spacelift, plan should show **no changes**
|
|
44
|
+
- [ ] Merge **iac-deploy Cleanup** PR
|
|
45
|
+
- [ ] Run migrate-spaces: \`nx run @payfit/${serviceRepository.name}:stack-migration --command=migrate-spaces\`
|
|
33
46
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
without deleting the actual infrastructure.
|
|
47
|
+
### Phase 3: Complete
|
|
48
|
+
- [ ] **Service Migration** PR: Verify imports are correct, trigger plan from Spacelift, plan should show **no changes**
|
|
49
|
+
- [ ] Merge **Service Migration** PR
|
|
50
|
+
- [ ] Run cleanup: \`nx run @payfit/${serviceRepository.name}:stack-migration --command=cleanup\`
|
|
51
|
+
- [ ] Merge **Post-Migration Cleanup** PR (removes import.tf)
|
|
40
52
|
|
|
41
53
|
${stacks.length > 0
|
|
42
|
-
?
|
|
43
|
-
#### Verify Stack Definitions (in projects-manager)
|
|
44
|
-
|
|
45
|
-
Before running state removal commands, verify the stack modules exist:
|
|
54
|
+
? `## Stacks (${stacks.length})
|
|
46
55
|
|
|
47
|
-
\`\`\`bash
|
|
48
|
-
# List all stack modules in state
|
|
49
|
-
spacectl stack task --id="projects-manager" --command="tofu state list | grep stacks_generator"
|
|
50
56
|
\`\`\`
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
${stacks
|
|
54
|
-
.map(s => {
|
|
55
|
-
const moduleKey = `${s.identifier}-${s.environment}${s.region ? `-${s.region}` : ''}`;
|
|
56
|
-
return `- module.stacks_generator["${moduleKey}"]`;
|
|
57
|
-
})
|
|
58
|
-
.join('\n')}
|
|
59
|
-
|
|
60
|
-
Stack IDs that will be imported to metastack:
|
|
61
|
-
${stacks.map(s => `- ${s.identifier}-${s.environment}-${s.region || 'eu-west-3'}`).join('\n')}
|
|
57
|
+
${stackIds.join('\n')}
|
|
58
|
+
\`\`\`
|
|
62
59
|
`
|
|
63
60
|
: ''}
|
|
64
|
-
|
|
65
|
-
### Step 2: Merge Cleanup PRs
|
|
66
|
-
|
|
67
|
-
After state removal and space updates are complete:
|
|
68
|
-
|
|
69
|
-
1. **Merge iac-deploy PR**
|
|
70
|
-
- URL: ${generatedFiles.iacDeployPR?.url || 'N/A'}
|
|
71
|
-
- Review and merge the PR
|
|
72
|
-
- **Expected result:** Plan should show NO changes (resources already removed from state)
|
|
73
|
-
|
|
74
|
-
### Step 3: Update Stack Spaces
|
|
75
|
-
|
|
76
|
-
After state removal is complete, update the space for all stacks to the domain space:
|
|
77
|
-
|
|
78
|
-
**Target Space:** domain-${serviceRepository.domain}
|
|
79
|
-
|
|
80
|
-
**Why this is needed:**
|
|
81
|
-
- Stacks need to be in the domain space to be accessible by the metastack stack
|
|
82
|
-
- The metastack stack (in the domain space) cannot import stacks from other spaces
|
|
83
|
-
- This step moves all stacks from their current space to the domain space
|
|
84
|
-
|
|
85
|
-
**How to do it:**
|
|
86
|
-
Run the migration executor with the migrate-spaces command:
|
|
87
|
-
|
|
88
|
-
\`\`\`bash
|
|
89
|
-
nx run @payfit/${serviceRepository.name}:stack-migration --command=migrate-spaces
|
|
90
|
-
\`\`\`
|
|
91
|
-
|
|
92
|
-
Or use the GraphQL API directly to update each stack's space.
|
|
93
|
-
|
|
94
|
-
**Stacks to update:**
|
|
95
|
-
${stacks.map(s => `- ${s.identifier}-${s.environment}-${s.region || 'eu-west-3'}`).join('\n')}
|
|
96
|
-
|
|
97
|
-
**Verification:**
|
|
98
|
-
After updating, verify that all stacks are in the correct space via Spacelift UI or API.
|
|
99
|
-
|
|
100
|
-
### Step 4: Merge Service Repository PR
|
|
101
|
-
|
|
102
|
-
After cleanup PRs are merged:
|
|
103
|
-
|
|
104
|
-
1. **Merge service repository PR**
|
|
105
|
-
- URL: ${generatedFiles.serviceRepoPR?.url || 'N/A'}
|
|
106
|
-
- Review and merge the PR
|
|
107
|
-
|
|
108
|
-
2. **Trigger metastack run**
|
|
109
|
-
|
|
110
|
-
The metastack stack will automatically import existing resources using the import blocks in \`.metastack/import.tf\`
|
|
111
|
-
|
|
112
|
-
3. **Verify imports**
|
|
113
|
-
|
|
114
|
-
Check the Spacelift run for the metastack stack:
|
|
115
|
-
- All stacks should be imported
|
|
116
|
-
- Plan should show NO changes after import
|
|
117
|
-
|
|
118
|
-
### Step 5: Verification
|
|
119
|
-
|
|
120
|
-
After all PRs are merged:
|
|
121
|
-
|
|
122
|
-
1. **Verify stacks**
|
|
123
|
-
${stacks.length > 0
|
|
124
|
-
? `
|
|
125
|
-
Check these stacks are managed by metastack (IDs remain unchanged):
|
|
126
|
-
${stacks.map(s => ` - ${s.identifier}-${s.environment}-${s.region || 'eu-west-3'}`).join('\n')}
|
|
127
|
-
`
|
|
128
|
-
: ' No stacks to verify'}
|
|
129
|
-
|
|
130
|
-
2. **Verify metastack stack**
|
|
131
|
-
- Stack ID: metastack-repo-${serviceRepository.name}
|
|
132
|
-
- Check plan shows no changes
|
|
133
|
-
- All resources under management
|
|
134
|
-
|
|
135
|
-
### Step 6: Cleanup
|
|
136
|
-
|
|
137
|
-
1. Remove temporary files:
|
|
138
|
-
- \`METASTACK_STATE_REMOVAL_COMMANDS.sh\`
|
|
139
|
-
- \`.metastack/import.tf\` (after successful import)
|
|
140
|
-
|
|
141
|
-
2. Update documentation as needed
|
|
142
61
|
`;
|
|
143
62
|
}
|
|
144
63
|
//# sourceMappingURL=procedure-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procedure-template.js","sourceRoot":"","sources":["../../../../../src/executors/stack-migration/lib/templates/procedure-template.ts"],"names":[],"mappings":";AAAA;;
|
|
1
|
+
{"version":3,"file":"procedure-template.js","sourceRoot":"","sources":["../../../../../src/executors/stack-migration/lib/templates/procedure-template.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAKH,gEAyDC;AA3DD,uDAAkD;AAElD,SAAgB,0BAA0B,CAAC,MAAuB;IAChE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAA;IAE5D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC,CAAA;IAE/F,OAAO,0BAA0B,iBAAiB,CAAC,IAAI;;;;aAI5C,iBAAiB,CAAC,MAAM;WAC1B,iBAAiB,CAAC,IAAI;4BACL,iBAAiB,CAAC,MAAM;iCACnB,iBAAiB,CAAC,IAAI;;;;EAIrD,gCAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC;;;;;;8BAMxB,cAAc,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG;4CACxB,cAAc,CAAC,kBAAkB,EAAE,GAAG,IAAI,GAAG;sCACnD,cAAc,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG;wBACpD,iBAAiB,CAAC,IAAI,MAAM,cAAc,CAAC,aAAa,EAAE,GAAG,IAAI,GAAG;;;;;;;gCAO5D,iBAAiB,CAAC,IAAI;;;;;;6CAMT,iBAAiB,CAAC,IAAI;;;;;sCAK7B,iBAAiB,CAAC,IAAI;;;EAI1D,MAAM,CAAC,MAAM,GAAG,CAAC;QACf,CAAC,CAAC,cAAc,MAAM,CAAC,MAAM;;;EAG/B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;CAEpB;QACG,CAAC,CAAC,EACN;CACC,CAAA;AACD,CAAC"}
|
|
@@ -5,10 +5,9 @@ export interface StackMigrationExecutorSchema {
|
|
|
5
5
|
| 'enroll'
|
|
6
6
|
| 'generate-tf-migration'
|
|
7
7
|
| 'migrate-spaces'
|
|
8
|
-
| 'cleanup
|
|
8
|
+
| 'iac-deploy-cleanup'
|
|
9
9
|
| 'generate-procedure'
|
|
10
|
-
| '
|
|
11
|
-
| 'final-cleanup'
|
|
10
|
+
| 'cleanup'
|
|
12
11
|
| 'run'
|
|
13
12
|
| 'help'
|
|
14
13
|
'dry-run'?: boolean
|
|
@@ -48,18 +48,15 @@ const runExecutor = async (options, context) => {
|
|
|
48
48
|
case 'migrate-spaces':
|
|
49
49
|
result = await requireState(() => tool.updateStackSpaces());
|
|
50
50
|
break;
|
|
51
|
-
case 'cleanup
|
|
51
|
+
case 'iac-deploy-cleanup':
|
|
52
52
|
result = await requireState(() => tool.createCleanupPRs());
|
|
53
53
|
break;
|
|
54
54
|
case 'generate-procedure':
|
|
55
55
|
result = await requireState(() => tool.generateMigrationProcedure());
|
|
56
56
|
break;
|
|
57
|
-
case '
|
|
57
|
+
case 'cleanup':
|
|
58
58
|
result = await requireState(() => tool.cleanupMigration());
|
|
59
59
|
break;
|
|
60
|
-
case 'final-cleanup':
|
|
61
|
-
result = await requireState(() => tool.createFinalCleanupPR());
|
|
62
|
-
break;
|
|
63
60
|
case 'run':
|
|
64
61
|
await tool.run();
|
|
65
62
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack-migration.js","sourceRoot":"","sources":["../../../src/executors/stack-migration/stack-migration.ts"],"names":[],"mappings":";;AAEA,yDAAoD;AACpD,+CAAkD;AAGlD,MAAM,WAAW,GAAkD,KAAK,EACtE,OAAO,EACP,OAAO,EACP,EAAE;IACF,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAA;IAE1C,MAAM,WAAW,GACf,OAAO,CAAC,sBAAsB,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAY,CAAC,EAAE,IAAI;QACpE,OAAO,CAAC,IAAI,CAAA;IAEd,MAAM,IAAI,GAAG,IAAI,8BAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAEnD,gCAAgC;IAChC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAA;IACrC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,KAAK,EAAE,MAA2B,EAAE,EAAE;YACzD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;gBAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;gBACxE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;YAC3B,CAAC;YACD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;YAC9B,MAAM,MAAM,EAAE,CAAA;YACd,OAAO,IAAI,CAAA;QACb,CAAC,CAAA;QAED,IAAI,MAAM,GAAG,IAAI,CAAA;QAEjB,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;gBAC/C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAA;gBAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;gBACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;gBACrE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;gBACtE,MAAK;YAEP,KAAK,OAAO;gBACV,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAA;gBAChC,MAAK;YAEP,KAAK,QAAQ;gBACX,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAA;gBAClE,MAAK;YAEP,KAAK,uBAAuB;gBAC1B,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,IAAI,EAAE;oBACrC,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;oBACtC,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAA;gBAC3C,CAAC,CAAC,CAAA;gBACF,MAAK;YAEP,KAAK,gBAAgB;gBACnB,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAA;gBAC3D,MAAK;YAEP,KAAK,
|
|
1
|
+
{"version":3,"file":"stack-migration.js","sourceRoot":"","sources":["../../../src/executors/stack-migration/stack-migration.ts"],"names":[],"mappings":"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"}
|