Skip to content

Commit cb5e0e9

Browse files
authored
Merge pull request #152 from microservices-suite/repo-engineering/deletion_automation
Repo engineering/deletion automation
2 parents 18d0ffb + bdf51dd commit cb5e0e9

File tree

557 files changed

+2412
-41962
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

557 files changed

+2412
-41962
lines changed

.suite-cli/cli/cli.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ const { execSync } = require('node:child_process')
77
const { cwd } = require('node:process');
88
const { readFileSync } = require('node:fs');
99
const path = require('node:path');
10-
const { cwd } = require('node:process');
11-
const { readFileSync } = require('node:fs');
12-
const path = require('node:path');
1310
const actionHandlers = require('./scripts')
1411
const { logInfo, getExistingComponent, getExistingApps, getNextAvailablePort, scaffoldApp, scaffoldGateways, readFileContent } = require('./scripts/scripts.module');
1512

@@ -364,14 +361,17 @@ program
364361
}
365362
});
366363
});
367-
program
364+
program
368365
.command('remove <resource> [resource_name]')
369366
.description('Clean remove a monorepo resource or all resources of a specific type with the --all flag.')
370367
.option('-f, --force', 'Force removal without confirmation')
371368
.option('--all', 'Remove all resources of the specified type') // Add --all flag
372369
.action(async (resource, resource_name, options) => {
373370
const spinner = ora();
374-
371+
if (!['service', 'app', 'library', 'gateway'].includes(resource)) {
372+
spinner.fail('Supported resources are ["service","app","library","gateway"] ');
373+
return;
374+
}
375375
// Validate --all flag usage
376376
if (!resource_name && !options.all) {
377377
spinner.fail('You must provide either a resource name or the --all flag to remove all resources.');

.suite-cli/cli/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@microservices-suite/cli",
3-
"version": "3.0.1",
3+
"version": "3.1.0",
44
"description": "This is the CLI tool for running the microservices-suite monorepo. It contains functionalities and tools required for automation and managing the repo across supported platforms. Works on Windows,MacOS and Linux as well as support to some extend other variants like SunOS, IBM AIX, FreeBSD, OpenBSD and more",
55
"main": "cli.js",
66
"repository": "https://github.com/microservices-suite/node-microservices-suite.git",
@@ -24,6 +24,7 @@
2424
"chalk": "4.1.2",
2525
"commander": "^12.0.0",
2626
"figlet": "^1.7.0",
27+
"glob": "^11.0.0",
2728
"inquirer": "8.0.0",
2829
"ora": "5.4.1"
2930
}

.suite-cli/cli/scripts/assets/index.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ module.exports.ecosystemContent = require('./ecosystemContent.asset');
22
module.exports.envContent = require('./envContent.asset');
33
module.exports.apolloServerContent = require('./apolloServerContent.asset');
44
module.exports.k8sClusterDeploymentContent = require('./k8sClusterDeploymentContent.asset');
5-
module.exports.k8sIngressServiceContent = require('./k8sIngressServiceContent.asset');
6-
module.exports.k8sClusterIpServiceContent = require('./k8sClusterIpServiceContent.asset');
7-
module.exports.k8sClientPodContent = require('./k8sClientPodContent.asset');
8-
module.exports.k8sClientNodeContent = require('./k8sClientNodeContent.asset');
5+
module.exports.k8sIngressServiceContent = require('./k8sIngressContent.asset');
6+
module.exports.k8sClusterIpServiceContent = require('./k8sClusterIpContent.asset');
7+
module.exports.k8sClientPodContent = require('./k8sLoadBalancerContent.asset');
8+
module.exports.k8sClientNodeContent = require('./k8sNodePortContent.asset');
99
module.exports.k8sReadmeContent = require('./k8sReadmeContent.asset');
1010
module.exports.snapshotTestContent = require('./snapshotTestContent.asset');
1111
module.exports.integrationTestContent = require('./integrationTestContent.asset');
@@ -59,5 +59,13 @@ module.exports.brokerWorkerQueueContent = require('./brokerWorkerQueueContent.as
5959
module.exports.subscriberContent = require('./subscriberContent.asset');
6060
module.exports.subscriberIndexContent = require('./subscriberIndexContent.asset');
6161
module.exports.krakendConfigContent = require('./krakendConfigContent.asset');
62+
module.exports.k8sClusterDeploymentContent = require('./k8sClusterDeploymentContent.asset');
63+
module.exports.k8sClusterIpContent = require('./k8sClusterIpContent.asset');
64+
module.exports.k8sComboContent = require('./k8sComboContent.asset');
65+
module.exports.k8sConfigMapContent = require('./k8sConfigMapContent.asset');
66+
module.exports.k8sIngressContent = require('./k8sIngressContent.asset');
67+
module.exports.k8sLoadBalancerContent = require('./k8sLoadBalancerContent.asset');
68+
module.exports.k8sNodePortContent = require('./k8sNodePortContent.asset');
69+
module.exports.k8sSecretContent = require('./k8sSecretContent.asset');
6270

6371

.suite-cli/cli/scripts/assets/k8sClientNodeContent.asset.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

.suite-cli/cli/scripts/assets/k8sClientPodContent.asset.js

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1-
module.exports = () => `
2-
#TODO: to add Deployment logic here
3-
`;
1+
module.exports = ({ service, image, ports }) => `
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
metadata:
5+
name: ${service}
6+
spec:
7+
selector:
8+
matchLabels:
9+
app: ${service}
10+
template:
11+
metadata:
12+
labels:
13+
app: ${service}
14+
spec:
15+
containers:
16+
- name: ${service}
17+
image: ${image}
18+
resources:
19+
limits:
20+
memory: "128Mi"
21+
cpu: "500m"
22+
ports:
23+
${ports.map(port => ` - containerPort: ${port}`).join('\n')}
24+
`;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module.exports = ({ service, ports }) => `
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: ${service}
6+
spec:
7+
selector:
8+
app: ${service}
9+
ports:
10+
${ports.map(({ name, port, targetPort }) => ` - name: ${name}
11+
port: ${port}
12+
targetPort: ${targetPort}`).join('\n')}
13+
`;

.suite-cli/cli/scripts/assets/k8sClusterIpServiceContent.asset.js

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
// module.exports = ({ project_base, app, services = [] }) => {
2+
// if (!Array.isArray(services)) {
3+
// throw new Error('Services must be an array');
4+
// }
5+
6+
// // Function to generate Deployment for each service
7+
// const generateDeployment = ({ service, image, port }) => `
8+
// # Deployment for ${service}
9+
// apiVersion: apps/v1
10+
// kind: Deployment
11+
// metadata:
12+
// name: ${service}
13+
// spec:
14+
// selector:
15+
// matchLabels:
16+
// app: ${service}
17+
// template:
18+
// metadata:
19+
// labels:
20+
// app: ${service}
21+
// spec:
22+
// containers:
23+
// - name: ${service}
24+
// image: ${image}
25+
// resources:
26+
// limits:
27+
// memory: "128Mi"
28+
// cpu: "500m"
29+
// ports:
30+
// - containerPort: ${port}
31+
// ---
32+
// `;
33+
34+
// // Function to generate different types of Services for each service
35+
// const generateService = ({ service, port, targetPort, type = "ClusterIP", nodePort }) => `
36+
// # Service for ${service} (${type})
37+
// apiVersion: v1
38+
// kind: Service
39+
// metadata:
40+
// name: ${service}
41+
// spec:
42+
// type: ${type}
43+
// selector:
44+
// app: ${service}
45+
// ports:
46+
// - port: ${port}
47+
// targetPort: ${targetPort || port}
48+
// ${type === "NodePort" && nodePort ? `nodePort: ${nodePort}` : ""}
49+
// ---
50+
// `;
51+
52+
// // Function to generate Ingress rules based on services
53+
// const generateIngress = ({ app, project_base, services }) => {
54+
// const content = services.map(({ service, port }) => `
55+
// - pathType: Prefix
56+
// path: "/${service}/*"
57+
// backend:
58+
// service:
59+
// name: ${service}
60+
// port:
61+
// number: ${port}
62+
// `).join('');
63+
64+
// return `
65+
// # Ingress for ${app}
66+
// apiVersion: networking.k8s.io/v1
67+
// kind: Ingress
68+
// metadata:
69+
// name: ${project_base}
70+
// labels:
71+
// name: ${project_base}
72+
// spec:
73+
// rules:
74+
// - host: ${app}.com
75+
// http:
76+
// paths: ${content}
77+
// ---
78+
// `;
79+
// };
80+
81+
// // Generate YAML output for each service
82+
// const servicesYAML = services.map(serviceConfig => {
83+
// return (
84+
// generateDeployment(serviceConfig) +
85+
// generateService({ ...serviceConfig, type: "ClusterIP" }) +
86+
// generateService({ ...serviceConfig, type: "LoadBalancer" }) +
87+
// generateService({ ...serviceConfig, type: "NodePort", nodePort: serviceConfig.nodePort })
88+
// );
89+
// }).join('\n');
90+
91+
// // Generate final YAML with all deployments, services, and ingress
92+
// return `
93+
// # Kubernetes Configuration for ${app}
94+
// ${servicesYAML}
95+
// ${generateIngress({ app, project_base, services })}
96+
// # Add more configurations below if needed
97+
// `;
98+
// };
99+
module.exports = ({ project_base, app, services = [] }) => {
100+
if (!Array.isArray(services)) {
101+
throw new Error('Services must be an array');
102+
}
103+
104+
// Function to generate Deployment for each service
105+
const generateDeployment = ({ service, image, port }) => `
106+
# Deployment for ${service}
107+
apiVersion: apps/v1
108+
kind: Deployment
109+
metadata:
110+
name: ${service}
111+
spec:
112+
selector:
113+
matchLabels:
114+
app: ${service}
115+
template:
116+
metadata:
117+
labels:
118+
app: ${service}
119+
spec:
120+
containers:
121+
- name: ${service}
122+
image: ${image}
123+
resources:
124+
limits:
125+
memory: "128Mi"
126+
cpu: "500m"
127+
ports:
128+
- containerPort: ${port}
129+
---
130+
`;
131+
132+
// Function to generate different types of Services for each service
133+
const generateService = ({ service, port, targetPort, type = "ClusterIP", nodePort }) => `
134+
# Service for ${service} (${type})
135+
apiVersion: v1
136+
kind: Service
137+
metadata:
138+
name: ${service}
139+
spec:
140+
type: ${type}
141+
selector:
142+
app: ${service}
143+
ports:
144+
- port: ${port}
145+
targetPort: ${targetPort || port}
146+
${type === "NodePort" && nodePort ? `nodePort: ${nodePort}` : ""}
147+
---
148+
`;
149+
150+
// Function to generate Ingress rules based on services
151+
const generateIngress = ({ app, project_base, services }) => {
152+
const content = services.map(({ service, port }) => `
153+
- pathType: Prefix
154+
path: "/${service}/*"
155+
backend:
156+
service:
157+
name: ${service}
158+
port:
159+
number: ${port}
160+
`).join('');
161+
162+
return `
163+
# Ingress for ${app}
164+
apiVersion: networking.k8s.io/v1
165+
kind: Ingress
166+
metadata:
167+
name: ${project_base}
168+
labels:
169+
name: ${project_base}
170+
spec:
171+
rules:
172+
- host: ${app}.com
173+
http:
174+
paths:
175+
${content}
176+
---
177+
`;
178+
};
179+
180+
// Generate YAML output for each service
181+
const servicesYAML = services.map(serviceConfig => {
182+
return (
183+
generateDeployment(serviceConfig) +
184+
generateService({ ...serviceConfig, type: "ClusterIP" }) +
185+
generateService({ ...serviceConfig, type: "LoadBalancer" }) +
186+
generateService({ ...serviceConfig, type: "NodePort", nodePort: serviceConfig.nodePort })
187+
);
188+
}).join('\n');
189+
190+
// Generate final YAML with all deployments, services, and ingress
191+
return `
192+
# Kubernetes Configuration for ${app}
193+
${servicesYAML}
194+
${generateIngress({ app, project_base, services })}
195+
# Add more configurations below if needed
196+
`;
197+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module.exports = ({ service, port, project_base, env, namespace, app }) => `
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: ${service}
6+
data:
7+
PORT: '${port}'
8+
DATABASE_URL: mongodb://mongodb:27017/${project_base}_${service}_${env}_db
9+
EXCHANGE: '${project_base}/k8s/${namespace}/${app}'
10+
AMQP_HOST: amqp://rabbitmq:5672
11+
`;

0 commit comments

Comments
 (0)