mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
231 lines
5.0 KiB
Go
231 lines
5.0 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Package main implements adding an Application CR to a group of resources and
|
|
// is run with `kustomize config run -- DIR/`.
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
var input = `apiVersion: config.kubernetes.io/v1alpha1
|
|
kind: ResourceList
|
|
items:
|
|
- apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: the-map
|
|
annotations:
|
|
config.kubernetes.io/index: '0'
|
|
config.kubernetes.io/path: 'example.yaml'
|
|
data:
|
|
altGreeting: "Good Morning!"
|
|
enableRisky: "false"
|
|
- apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: the-deployment
|
|
annotations:
|
|
config.kubernetes.io/index: '1'
|
|
config.kubernetes.io/path: 'example.yaml'
|
|
spec:
|
|
replicas: 3
|
|
template:
|
|
metadata:
|
|
labels:
|
|
deployment: hello
|
|
spec:
|
|
containers:
|
|
- name: the-container
|
|
image: monopole/hello:1
|
|
command: ["/hello", "--port=8080", "--enableRiskyFeature=$(ENABLE_RISKY)"]
|
|
ports:
|
|
- containerPort: 8080
|
|
env:
|
|
- name: ALT_GREETING
|
|
valueFrom:
|
|
configMapKeyRef:
|
|
name: the-map
|
|
key: altGreeting
|
|
- name: ENABLE_RISKY
|
|
valueFrom:
|
|
configMapKeyRef:
|
|
name: the-map
|
|
key: enableRisky
|
|
- kind: Service
|
|
apiVersion: v1
|
|
metadata:
|
|
name: the-service
|
|
annotations:
|
|
config.kubernetes.io/index: '2'
|
|
config.kubernetes.io/path: 'example.yaml'
|
|
spec:
|
|
selector:
|
|
deployment: hello
|
|
type: LoadBalancer
|
|
ports:
|
|
- protocol: TCP
|
|
port: 8666
|
|
targetPort: 8080
|
|
functionConfig:
|
|
# Copyright 2019 The Kubernetes Authors.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
apiVersion: examples.config.kubernetes.io/v1beta1
|
|
kind: CreateApp
|
|
spec:
|
|
managedBy: jingfang
|
|
name: example-app
|
|
namespace: example-namespace
|
|
`
|
|
|
|
var output = `apiVersion: config.kubernetes.io/v1alpha1
|
|
kind: ResourceList
|
|
items:
|
|
- apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: the-map
|
|
annotations:
|
|
config.kubernetes.io/index: '0'
|
|
config.kubernetes.io/path: 'example.yaml'
|
|
labels:
|
|
app.kubernetes.io/name: 'example-app'
|
|
data:
|
|
altGreeting: "Good Morning!"
|
|
enableRisky: "false"
|
|
- apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: the-deployment
|
|
annotations:
|
|
config.kubernetes.io/index: '1'
|
|
config.kubernetes.io/path: 'example.yaml'
|
|
labels:
|
|
app.kubernetes.io/name: 'example-app'
|
|
spec:
|
|
replicas: 3
|
|
template:
|
|
metadata:
|
|
labels:
|
|
deployment: hello
|
|
spec:
|
|
containers:
|
|
- name: the-container
|
|
image: monopole/hello:1
|
|
command: ["/hello", "--port=8080", "--enableRiskyFeature=$(ENABLE_RISKY)"]
|
|
ports:
|
|
- containerPort: 8080
|
|
env:
|
|
- name: ALT_GREETING
|
|
valueFrom:
|
|
configMapKeyRef:
|
|
name: the-map
|
|
key: altGreeting
|
|
- name: ENABLE_RISKY
|
|
valueFrom:
|
|
configMapKeyRef:
|
|
name: the-map
|
|
key: enableRisky
|
|
- kind: Service
|
|
apiVersion: v1
|
|
metadata:
|
|
name: the-service
|
|
annotations:
|
|
config.kubernetes.io/index: '2'
|
|
config.kubernetes.io/path: 'example.yaml'
|
|
labels:
|
|
app.kubernetes.io/name: 'example-app'
|
|
spec:
|
|
selector:
|
|
deployment: hello
|
|
type: LoadBalancer
|
|
ports:
|
|
- protocol: TCP
|
|
port: 8666
|
|
targetPort: 8080
|
|
- apiVersion: app.k8s.io/v1beta1
|
|
kind: Application
|
|
metadata:
|
|
name: example-app
|
|
namespace: example-namespace
|
|
labels:
|
|
app.kubernetes.io/name: example-app
|
|
annotations:
|
|
app.kubernetes.io/managed-by: jingfang
|
|
spec:
|
|
selector:
|
|
app.kubernetes.io/name: example-app
|
|
componentKinds:
|
|
- group:
|
|
kind: ConfigMap
|
|
- group: apps
|
|
kind: Deployment
|
|
- group:
|
|
kind: Service
|
|
functionConfig:
|
|
# Copyright 2019 The Kubernetes Authors.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
apiVersion: examples.config.kubernetes.io/v1beta1
|
|
kind: CreateApp
|
|
spec:
|
|
managedBy: jingfang
|
|
name: example-app
|
|
namespace: example-namespace
|
|
`
|
|
|
|
func Test(t *testing.T) {
|
|
oldStdin := os.Stdin
|
|
oldStdout := os.Stdout
|
|
defer func() {
|
|
os.Stdin = oldStdin
|
|
os.Stdout = oldStdout
|
|
}()
|
|
r, w, _ := os.Pipe()
|
|
os.Stdout = w
|
|
|
|
outC := make(chan string)
|
|
go func() {
|
|
var buf bytes.Buffer
|
|
_, err := io.Copy(&buf, r)
|
|
if err != nil {
|
|
outC <- ""
|
|
}
|
|
outC <- buf.String()
|
|
}()
|
|
|
|
tmpfile, err := ioutil.TempFile("", "test-input")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.Remove(tmpfile.Name()) // noerrcheck
|
|
if _, err := tmpfile.Write([]byte(input)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := tmpfile.Seek(0, 0); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
os.Stdin = tmpfile
|
|
|
|
err = appCR()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := tmpfile.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if err := w.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
out := <-outC
|
|
if out != output {
|
|
t.Fatalf("expected %s\nbut got %s\n", output, out)
|
|
}
|
|
}
|