Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Project Service List local CRD function #568

Merged
merged 37 commits into from
Sep 24, 2021
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4d5341c
feat: add project services
bharathkkb Sep 7, 2021
09154c5
add main and docs
bharathkkb Sep 7, 2021
f0ac08d
add simple test
bharathkkb Sep 7, 2021
f3ab19d
additional test
bharathkkb Sep 7, 2021
e26858a
remove unused const
bharathkkb Sep 7, 2021
bf488a3
bump deps
bharathkkb Sep 11, 2021
3305354
use default test runner configs
bharathkkb Sep 11, 2021
5181460
readme feedback
bharathkkb Sep 11, 2021
a5fddde
rename to enable-gcp-services
bharathkkb Sep 14, 2021
8f5ab78
regen
bharathkkb Sep 14, 2021
21a4dff
switch to GCP project svc, clarify test
bharathkkb Sep 15, 2021
48d5987
fix newline
bharathkkb Sep 15, 2021
fdc2cf8
fix newlines
bharathkkb Sep 15, 2021
1ab4317
switch to implicit fn config
bharathkkb Sep 21, 2021
5dfc51d
add a nested pkg test
bharathkkb Sep 21, 2021
5835756
remove explicit fn config from examples
bharathkkb Sep 21, 2021
51e157f
ignore local config anno
bharathkkb Sep 21, 2021
c3f8506
update docs
bharathkkb Sep 21, 2021
38d2f35
validate local config
bharathkkb Sep 21, 2021
87519c0
fix missing local config
bharathkkb Sep 21, 2021
0d688e9
extract structs, use ResultItems
bharathkkb Sep 22, 2021
b5bb0bd
simplify readme
bharathkkb Sep 22, 2021
bd591c1
add an explicit service in test to be pruned
bharathkkb Sep 22, 2021
65dfff9
update readme
bharathkkb Sep 22, 2021
add3f21
add test for prune with multiple ProjectServiceList
bharathkkb Sep 22, 2021
100340f
user validation for expected results
bharathkkb Sep 23, 2021
b25eb83
recreate result
bharathkkb Sep 23, 2021
7fb7f90
standardize blueprints CR ownership
bharathkkb Sep 23, 2021
9bd42eb
rename to ProjectServiceSet
bharathkkb Sep 23, 2021
a7bf4e5
update e2e
bharathkkb Sep 23, 2021
d17c285
regen e2e expected
bharathkkb Sep 23, 2021
faa5ff0
move test to example
bharathkkb Sep 23, 2021
a61ce0a
regen docs
bharathkkb Sep 23, 2021
239dc3a
fix example name
bharathkkb Sep 23, 2021
4728932
sort result items
bharathkkb Sep 23, 2021
04ace4e
readme updates
bharathkkb Sep 24, 2021
e8af61b
force set LocalConfigAnnotation
bharathkkb Sep 24, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions examples/enable-gcp-services-advanced/.expected/diff.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
diff --git a/service_proj1-service-bigquery.yaml b/service_proj1-service-bigquery.yaml
deleted file mode 100644
index 42300cc..0000000
--- a/service_proj1-service-bigquery.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
-kind: Service
-metadata:
- name: proj1-service-bigquery
- annotations:
- blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj1-service'
-spec:
- resourceID: bigquery.googleapis.com
- projectRef:
- external: proj1
41 changes: 41 additions & 0 deletions examples/enable-gcp-services-advanced/.expected/results.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
apiVersion: kpt.dev/v1
kind: FunctionResultList
metadata:
name: fnresults
exitCode: 0
items:
- image: gcr.io/kpt-fn/enable-gcp-services:unstable
exitCode: 0
results:
- message: pruned service
severity: info
resourceRef:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
name: proj1-service-bigquery
file:
path: service_proj1-service-bigquery.yaml
- message: recreated service
severity: info
resourceRef:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
name: proj1-service-compute
file:
path: service_proj1-service-compute.yaml
- message: recreated service
severity: info
resourceRef:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
name: proj1-service-redis
file:
path: service_proj1-service-redis.yaml
- message: recreated service
severity: info
resourceRef:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
name: proj2-service-redis
file:
path: service_proj2-service-redis.yaml
1 change: 1 addition & 0 deletions examples/enable-gcp-services-advanced/.krmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.expected
7 changes: 7 additions & 0 deletions examples/enable-gcp-services-advanced/Kptfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: enable-gcp-services-advanced
pipeline:
mutators:
- image: gcr.io/kpt-fn/enable-gcp-services:unstable
74 changes: 74 additions & 0 deletions examples/enable-gcp-services-advanced/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# enable-gcp-services: Advanced Example
mengqiy marked this conversation as resolved.
Show resolved Hide resolved

### Overview

In this example, we will see how to generate [project services](https://cloud.google.com/config-connector/docs/reference/resource-docs/serviceusage/service) for multiple projects and how service pruning is done.

### Fetch the example package

Get the example package by running the following commands:

```shell
$ kpt pkg get https://github.com/GoogleContainerTools/kpt-functions-catalog.git/examples/enable-gcp-services-advanced
```

Explore the package by running:
```shell
$ kpt pkg tree enable-gcp-services-advanced
Package "enable-gcp-services-advanced"
├── [Kptfile] Kptfile enable-gcp-services-advanced
├── [proj1-services.yaml] ProjectServiceSet proj1-service
├── [proj2-services.yaml] ProjectServiceSet proj2-service
├── [resources.yaml] ComputeNetwork computenetwork-sample
├── [resources.yaml] RedisInstance redisinstance-sample
├── [service_proj1-service-bigquery.yaml] Service proj1-service-bigquery
├── [service_proj1-service-compute.yaml] Service proj1-service-compute
├── [service_proj1-service-redis.yaml] Service proj1-service-redis
└── [service_proj2-service-redis.yaml] Service proj2-service-redis
```

We can see two ProjectServiceSet resources `proj1-service` and `proj2-service` for managing service enablement in two projects `proj1` and `proj2`. We can also see the services `compute.googleapis.com`, `redis.googleapis.com` managed within ProjectServiceSet `proj1-service` resource and `redis.googleapis.com` within ProjectServiceSet `proj2-service` resource. Notice that `bigquery.googleapis.com` is no longer present in `proj1-service` ProjectServiceSet. We can re render this package to prune that service resource.
bharathkkb marked this conversation as resolved.
Show resolved Hide resolved

### Function invocation

Render the configuration, `enable-gcp-services` has been defined declaratively in the Kptfile.

```shell
$ kpt fn render enable-gcp-services-advanced
```

### Expected result

```shell
Package "enable-gcp-services-advanced":
[RUNNING] "gcr.io/kpt-fn/enable-gcp-services:unstable"
[PASS] "gcr.io/kpt-fn/enable-gcp-services:unstable"
Results:
[INFO] pruned service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-bigquery" in file "service_proj1-service-bigquery.yaml"
[INFO] recreated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-compute" in file "service_proj1-service-compute.yaml"
[INFO] recreated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-redis" in file "service_proj1-service-redis.yaml"
[INFO] recreated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj2-service-redis" in file "service_proj2-service-redis.yaml"

Successfully executed 1 function(s) in 1 package(s).
```

We can see that the `bigquery` service resource was pruned. Run the following command to see current service resources:

```shell
$ kpt pkg tree enable-gcp-services-advanced
```

We can see `proj1-service-bigquery` no longer exists.

```diff
Package "enable-gcp-services-advanced"
├── [Kptfile] Kptfile enable-gcp-services-advanced
├── [proj1-services.yaml] ProjectServiceSet proj1-service
├── [proj2-services.yaml] ProjectServiceSet proj2-service
├── [resources.yaml] ComputeNetwork computenetwork-sample
├── [resources.yaml] RedisInstance redisinstance-sample
-├── [service_proj1-service-bigquery.yaml] Service proj1-service-bigquery
├── [service_proj1-service-compute.yaml] Service proj1-service-compute
├── [service_proj1-service-redis.yaml] Service proj1-service-redis
└── [service_proj2-service-redis.yaml] Service proj2-service-redis
```
11 changes: 11 additions & 0 deletions examples/enable-gcp-services-advanced/proj1-services.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: blueprints.cloud.google.com/v1alpha1
kind: ProjectServiceSet
metadata:
name: proj1-service
annotations:
config.kubernetes.io/local-config: "true"
spec:
services:
- compute.googleapis.com
- redis.googleapis.com
projectID: proj1
10 changes: 10 additions & 0 deletions examples/enable-gcp-services-advanced/proj2-services.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: blueprints.cloud.google.com/v1alpha1
kind: ProjectServiceSet
metadata:
name: proj2-service
annotations:
config.kubernetes.io/local-config: "true"
spec:
services:
- redis.googleapis.com
projectID: proj2
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
name: proj1-service-bigquery
annotations:
blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj1-service'
spec:
resourceID: bigquery.googleapis.com
projectRef:
external: proj1
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
name: proj1-service-compute
annotations:
blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj1-service'
spec:
resourceID: compute.googleapis.com
projectRef:
external: proj1
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
name: proj1-service-redis
annotations:
blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj1-service'
spec:
resourceID: redis.googleapis.com
projectRef:
external: proj1
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
name: proj2-service-redis
annotations:
blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj2-service'
spec:
resourceID: redis.googleapis.com
projectRef:
external: proj2
32 changes: 32 additions & 0 deletions examples/enable-gcp-services-simple/.expected/diff.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
diff --git a/service_proj1-service-compute.yaml b/service_proj1-service-compute.yaml
new file mode 100644
index 0000000..a0e4c9b
--- /dev/null
+++ b/service_proj1-service-compute.yaml
@@ -0,0 +1,10 @@
+apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
+kind: Service
+metadata:
+ name: proj1-service-compute
+ annotations:
+ blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj1-service'
+spec:
+ resourceID: compute.googleapis.com
+ projectRef:
+ external: proj1
diff --git a/service_proj1-service-redis.yaml b/service_proj1-service-redis.yaml
new file mode 100644
index 0000000..2da01b0
--- /dev/null
+++ b/service_proj1-service-redis.yaml
@@ -0,0 +1,10 @@
+apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
+kind: Service
+metadata:
+ name: proj1-service-redis
+ annotations:
+ blueprints.cloud.google.com/ownerReference: 'blueprints.cloud.google.com/ProjectServiceSet/proj1-service'
+spec:
+ resourceID: redis.googleapis.com
+ projectRef:
+ external: proj1
25 changes: 25 additions & 0 deletions examples/enable-gcp-services-simple/.expected/results.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: kpt.dev/v1
kind: FunctionResultList
metadata:
name: fnresults
exitCode: 0
items:
- image: gcr.io/kpt-fn/enable-gcp-services:unstable
exitCode: 0
results:
- message: generated service
severity: info
resourceRef:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
name: proj1-service-compute
file:
path: service_proj1-service-compute.yaml
- message: generated service
severity: info
resourceRef:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
name: proj1-service-redis
file:
path: service_proj1-service-redis.yaml
1 change: 1 addition & 0 deletions examples/enable-gcp-services-simple/.krmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.expected
7 changes: 7 additions & 0 deletions examples/enable-gcp-services-simple/Kptfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: enable-gcp-services-simple
pipeline:
mutators:
- image: gcr.io/kpt-fn/enable-gcp-services:unstable
49 changes: 49 additions & 0 deletions examples/enable-gcp-services-simple/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# enable-gcp-services: Simple Example

### Overview

In this example, we will see how to generate [project services](https://cloud.google.com/config-connector/docs/reference/resource-docs/serviceusage/service) for `compute.googleapis.com` and `redis.googleapis.com`.

### Fetch the example package

Get the example package by running the following commands:

```shell
$ kpt pkg get https://github.com/GoogleContainerTools/kpt-functions-catalog.git/examples/enable-gcp-services-simple
```

### Function invocation

Render the configuration, `enable-gcp-services` has been defined declaratively in the Kptfile.

```shell
$ kpt fn render enable-gcp-services-simple
mengqiy marked this conversation as resolved.
Show resolved Hide resolved
```

### Expected result

bharathkkb marked this conversation as resolved.
Show resolved Hide resolved
```shell
[RUNNING] "gcr.io/kpt-fn/enable-gcp-services:unstable"
[PASS] "gcr.io/kpt-fn/enable-gcp-services:unstable"
Results:
[INFO] generated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-compute"
[INFO] generated service in object "serviceusage.cnrm.cloud.google.com/v1beta1/Service/proj1-service-redis"

Successfully executed 1 function(s) in 1 package(s).
```

Run the following command to see generated service resources:

```shell
$ kpt pkg tree enable-gcp-services-simple
```

You will see two new generated resources `proj1-service-compute` and `proj1-service-redis`.

```shell
Package "enable-gcp-services-simple"
├── [Kptfile] Kptfile enable-gcp-services-simple
├── [service_proj1-service-compute.yaml] Service proj1-service-compute
├── [service_proj1-service-redis.yaml] Service proj1-service-redis
└── [services.yaml] ProjectServiceList proj1-service
```
11 changes: 11 additions & 0 deletions examples/enable-gcp-services-simple/services.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: blueprints.cloud.google.com/v1alpha1
kind: ProjectServiceSet
metadata:
name: proj1-service
annotations:
config.kubernetes.io/local-config: "true"
spec:
services:
- compute.googleapis.com
- redis.googleapis.com
projectID: proj1
1 change: 1 addition & 0 deletions functions/go/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ GOBIN := $(shell go env GOPATH)/bin
FUNCTIONS := \
apply-setters \
create-setters \
enable-gcp-services \
ensure-name-substring \
fix \
format \
Expand Down
15 changes: 15 additions & 0 deletions functions/go/enable-gcp-services/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM golang:1.16-alpine3.13
ENV CGO_ENABLED=0
WORKDIR /go/src/

COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN go build -o /usr/local/bin/function ./

#############################################

FROM alpine:3.13
COPY --from=0 /usr/local/bin/function /usr/local/bin/function
ENTRYPOINT ["function"]
Loading