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

Commit 9e030cd

Browse files
mtarngNathanielRosebnookala
authored
Adding configs for ingress routes for pathprefix, version, backend. (#222)
* Adding configs for ingress routes for versions and path prefix and backend * Adding ingress configs to service create. Removing deprecated code for onboarding multiple services with project init * Updating unit tests * docs * feedback. Renaming version to pathprefixversion. adding docs * --path-prefix-major-version and --k8s-backend * fixing merge conflicts and updating k8s-service-port to k8s-backend-port * lint * reconcile test * fixing tests Co-authored-by: Nate <[email protected]> Co-authored-by: Bhargav Nookala <[email protected]>
1 parent 22a6641 commit 9e030cd

File tree

13 files changed

+200
-93
lines changed

13 files changed

+200
-93
lines changed

docs/service-management.md

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,38 @@ Options:
4949
-e, --maintainer-email <maintainer-email> The email of the primary maintainer for this service. (default: "maintainer email")
5050
--git-push SPK CLI will try to commit and push these changes to a new origin/branch named after the service. (default: false)
5151
--middlewares <comma-delimitated-list-of-middleware-names> Traefik2 middlewares you wish to to be injected into your Traefik2 IngressRoutes (default: "")
52-
--k8s-service-port <port> Kubernetes service port which this service is exposed with; will be used to configure Traefik2 IngressRoutes (default: "80")
53-
-h, --help output usage information
52+
--k8s-backend-port <port> Kubernetes backend service port which this service is exposed with; will be used to configure Traefik2 IngressRoutes (default: "80")
53+
--k8s-backend <backend> Kubernetes backend service name; will be used to configure Traefik2 IngressRoutes (default: "")
54+
--path-prefix <path-prefix> The path prefix for ingress route; will be used to configure Traefik2 IngressRoutes. If omitted, then the service name will used. (default: "")
55+
--path-prefix-major-version <path-prefix-major-version> Version to be used in the path prefix; will be used to configure Traefik2 IngressRoutes. ie. 'v1' will result in a path prefix of '/v1/servicename (default: "")
56+
-h, --help output usage information output usage information
5457
```
5558

56-
**NOTE:**
57-
58-
`--helm-chart-*` and `--helm-config-*` settings are exclusive. **You may only
59-
use one.**
59+
**NOTES:**
60+
61+
- `--helm-chart-*` and `--helm-config-*` settings are exclusive. **You may only
62+
use one.**
63+
- `--middlewares`, `--k8s-backend-port`, `--path-prefix`,
64+
`--path-prefix-major-version`, and `--k8s-backend` are all used to configure
65+
the generated Traefik2 IngressRoutes. ie.
66+
`spk service create my-example-documents-service --middlewares middlewareA --k8s-backend-port 3001 --k8s-backend docs-service --path-prefix documents --path-prefix-major-version v2`
67+
will result in an IngressRoute that looks like:
68+
```
69+
apiVersion: traefik.containo.us/v1alpha1
70+
kind: IngressRoute
71+
metadata:
72+
name: my-example-documents-service-master
73+
spec:
74+
routes:
75+
- kind: Rule
76+
match: 'PathPrefix(`/v2/documents`) && Headers(`Ring`, `master`)'
77+
middlewares:
78+
- name: my-example-documents-service-master
79+
- name: middlewareA
80+
services:
81+
- name: docs-service
82+
port: 3001
83+
```
6084

6185
### install-build-pipeline
6286

src/commands/hld/reconcile.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ describe("addChartToRing", () => {
171171
path
172172
}
173173
},
174-
k8sServicePort: 1337
174+
k8sBackendPort: 1337
175175
};
176176

177177
/* tslint:disable-next-line: no-string-literal */
@@ -201,7 +201,7 @@ describe("addChartToRing", () => {
201201
sha
202202
}
203203
},
204-
k8sServicePort: 1337
204+
k8sBackendPort: 1337
205205
};
206206

207207
/* tslint:disable-next-line: no-string-literal */
@@ -229,7 +229,7 @@ describe("addChartToRing", () => {
229229
repository
230230
}
231231
},
232-
k8sServicePort: 1337
232+
k8sBackendPort: 1337
233233
};
234234

235235
/* tslint:disable-next-line: no-string-literal */
@@ -282,7 +282,7 @@ describe("reconcile tests", () => {
282282
sha
283283
}
284284
},
285-
k8sServicePort: 1337
285+
k8sBackendPort: 1337
286286
}
287287
}
288288
};
@@ -329,7 +329,7 @@ describe("reconcile tests", () => {
329329
sha
330330
}
331331
},
332-
k8sServicePort: 1337
332+
k8sBackendPort: 1337
333333
}
334334
}
335335
};
@@ -369,7 +369,7 @@ describe("reconcile tests", () => {
369369
sha
370370
}
371371
},
372-
k8sServicePort: 80
372+
k8sBackendPort: 80
373373
}
374374
};
375375

@@ -392,7 +392,7 @@ describe("reconcile tests", () => {
392392
sha
393393
}
394394
},
395-
k8sServicePort: 80
395+
k8sBackendPort: 80
396396
}
397397
};
398398

@@ -419,7 +419,7 @@ describe("reconcile tests", () => {
419419
sha
420420
}
421421
},
422-
k8sServicePort: 80
422+
k8sBackendPort: 80
423423
}
424424
};
425425

src/commands/hld/reconcile.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,15 @@ const createIngressRouteForRing = (
311311
const ingressRoute = TraefikIngressRoute(
312312
serviceName,
313313
ring,
314-
serviceConfig.k8sServicePort,
314+
serviceConfig.k8sBackendPort,
315315
{
316+
k8sBackend: serviceConfig.k8sBackend,
316317
middlewares: [
317318
middlewares.metadata.name,
318319
...(serviceConfig.middlewares ?? [])
319-
]
320+
],
321+
pathPrefix: serviceConfig.pathPrefix,
322+
pathPrefixMajorVersion: serviceConfig.pathPrefixMajorVersion
320323
}
321324
);
322325

src/commands/project/init.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe("initializing an existing file does not modify it", () => {
5252
sha: "bar"
5353
}
5454
},
55-
k8sServicePort: 1337
55+
k8sBackendPort: 1337
5656
}
5757
}
5858
};

src/commands/project/init.ts

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,8 @@ export const initialize = async (
6767
logger.info(`Initializing project Bedrock project ${absProjectRoot}`);
6868

6969
const defaultRing = opts ? [opts.defaultRing] : [];
70-
// Initialize all paths
71-
await generateBedrockFile(absProjectRoot, [], defaultRing);
72-
await generateMaintainersFile(absProjectRoot, []); // TOFIX: packagePaths is hardcoded to []
70+
await generateBedrockFile(absProjectRoot, defaultRing);
71+
await generateMaintainersFile(absProjectRoot, []);
7372
await generateHldLifecyclePipelineYaml(absProjectRoot);
7473
generateGitIgnoreFile(absProjectRoot, "spk.log");
7574

@@ -157,14 +156,12 @@ const generateMaintainersFile = async (
157156
*/
158157
const generateBedrockFile = async (
159158
projectPath: string,
160-
packagePaths: string[],
161159
defaultRings: string[] = []
162160
) => {
163161
const absProjectPath = path.resolve(projectPath);
164-
const absPackagePaths = packagePaths.map(p => path.resolve(p));
165162
logger.info(`Generating bedrock.yaml file in ${absProjectPath}`);
166163

167-
const base: IBedrockFile = {
164+
const baseBedrockFile: IBedrockFile = {
168165
rings: defaultRings.reduce<{ [ring: string]: { isDefault: boolean } }>(
169166
(defaults, ring) => {
170167
defaults[ring] = { isDefault: true };
@@ -175,31 +172,6 @@ const generateBedrockFile = async (
175172
services: {}
176173
};
177174

178-
// Populate bedrock file
179-
const bedrockFile = absPackagePaths.reduce<IBedrockFile>(
180-
(file, absPackagePath) => {
181-
const relPathToPackageFromRoot = path.relative(
182-
absProjectPath,
183-
absPackagePath
184-
);
185-
186-
const helm: IHelmConfig = {
187-
chart: {
188-
branch: "",
189-
git: "",
190-
path: ""
191-
}
192-
};
193-
194-
file.services["./" + relPathToPackageFromRoot] = {
195-
helm,
196-
k8sServicePort: 80
197-
};
198-
return file;
199-
},
200-
base
201-
);
202-
203175
// Check if a bedrock.yaml already exists; skip write if present
204176
const bedrockFilePath = path.join(absProjectPath, "bedrock.yaml");
205177
if (fs.existsSync(bedrockFilePath)) {
@@ -208,6 +180,6 @@ const generateBedrockFile = async (
208180
);
209181
} else {
210182
// Write out
211-
write(bedrockFile, absProjectPath);
183+
write(baseBedrockFile, absProjectPath);
212184
}
213185
};

src/commands/service/create.test.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ describe("validate pipeline config", () => {
3939
"my,middleware,string",
4040
true,
4141
"testDisplayName",
42-
80
42+
80,
43+
"pathPrefix",
44+
"version",
45+
"backend"
4346
];
4447

4548
it("config is valid", () => {
@@ -81,13 +84,13 @@ describe("Adding a service to a repo directory", () => {
8184
);
8285

8386
// addService call
84-
const k8sServicePort = 1337;
87+
const k8sBackendPort = 1337;
8588
await createService(
8689
randomTmpDir,
8790
serviceName,
8891
packageDir,
8992
false,
90-
k8sServicePort
93+
k8sBackendPort
9194
);
9295

9396
// Check temp test directory exists
@@ -110,7 +113,7 @@ describe("Adding a service to a repo directory", () => {
110113
const bedrock = Bedrock(randomTmpDir);
111114
const newService = bedrock.services["./" + serviceName];
112115
expect(newService).toBeDefined();
113-
expect(newService.k8sServicePort).toBe(k8sServicePort);
116+
expect(newService.k8sBackendPort).toBe(k8sBackendPort);
114117
});
115118

116119
test("New directory is created under '/packages' directory with required service files.", async () => {

0 commit comments

Comments
 (0)