diff --git a/prototype/systemPrototypes.go b/prototype/systemPrototypes.go index 9f8e5b7c930d6abc94349c25d85498a636b3f27d..9c072127e45900d3a6fb3143613eb439814ba079 100644 --- a/prototype/systemPrototypes.go +++ b/prototype/systemPrototypes.go @@ -11,33 +11,13 @@ var defaultPrototypes = []*SpecificationSchema{ Description: `A simple namespace. Labels are automatically populated from the name of the namespace.`, ShortDescription: `Namespace with labels automatically populated from the name`, - YAMLBody: []string{ - "kind: Namespace", - "apiVersion: v1", - "metadata:", - " name: ${name}", - " labels:", - " name: ${name}", - }, - JSONBody: []string{ - `{`, - ` "kind": "Namespace",`, - ` "apiVersion": "v1",`, - ` "metadata": {`, - ` "name": ${name},`, - ` "labels": {`, - ` "name": ${name}`, - ` }`, - ` }`, - `}`, - }, JsonnetBody: []string{ `local k = import "k.libsonnet";`, - `local ns = k.core.v1.namespace;`, + `local namespace = k.core.v1.namespace;`, ``, - `ns.new() +`, - `ns.mixin.metadata.name(import 'param://name') +`, - `ns.mixin.metadata.labels({name: import 'param://name'})`, + `namespace`, + ` .new(import 'param://name')`, + ` .withLabels({name: import 'param://name'})`, }, }, }, @@ -60,51 +40,17 @@ will typically look something like: ks prototype use service --targetLabelSelector "{app: 'nginx'}" [...]`, ShortDescription: `Service that exposes a single port`, - YAMLBody: []string{ - `kind: Service`, - `apiVersion: v1`, - `metadata:`, - ` name: ${name}`, - `spec:`, - ` selector:`, - ` ${targetLabelSelector}`, - ` type: ${type}`, - ` ports:`, - ` - protocol: ${protocol}`, - ` port: ${servicePort}`, - ` targetPort: ${targetPort}`, - }, - JSONBody: []string{ - `{`, - ` "kind": "Service",`, - ` "apiVersion": "v1",`, - ` "metadata": {`, - ` "name": ${name}`, - ` },`, - ` "spec": {`, - ` "selector":`, - ` ${targetLabelSelector},`, - ` "type": ${type},`, - ` "ports": [`, - ` {`, - ` "protocol": ${protocol},`, - ` "port": ${servicePort},`, - ` "targetPort": ${targetPort}`, - ` }`, - ` ]`, - ` }`, - `}`, - }, JsonnetBody: []string{ `local k = import "k.libsonnet";`, `local service = k.core.v1.service;`, `local port = k.core.v1.service.mixin.spec.portsType;`, ``, - `service.new(`, - ` import 'param://name',`, - ` import 'param://targetLabelSelector',`, - ` port.new(import 'param://servicePort', import 'param://targetPort')) +`, - `service.mixin.spec.type(import 'param://type')`, + `service`, + ` .new(`, + ` import 'param://name',`, + ` import 'param://targetLabelSelector',`, + ` port.new(import 'param://servicePort', import 'param://targetPort'))`, + ` .withType(import 'param://type')`, }, }, }, @@ -123,95 +69,6 @@ will typically look something like: Description: `A service that exposes 'servicePort', and directs traffic to 'targetLabelSelector', at 'targetPort'.`, ShortDescription: `A deployment exposed with a service`, - YAMLBody: []string{ - `apiVersion: v1`, - `items:`, - ` - apiVersion: v1`, - ` kind: Service`, - ` metadata:`, - ` name: ${name}`, - ` spec:`, - ` ports:`, - ` - port: ${servicePort}`, - ` targetPort: ${containerPort}`, - ` selector:`, - ` app: ${name}`, - ` type: ${type}`, - ` - apiVersion: apps/v1beta1`, - ` kind: Deployment`, - ` metadata:`, - ` name: ${name}`, - ` spec:`, - ` replicas: ${replicas}`, - ` template:`, - ` metadata:`, - ` labels:`, - ` app: ${name}`, - ` spec:`, - ` containers:`, - ` - image: ${name}`, - ` name: ${image}`, - ` ports:`, - ` - containerPort: ${containerPort}`, - `kind: List`, - }, - JSONBody: []string{ - `{`, - ` "apiVersion": "v1",`, - ` "items": [`, - ` {`, - ` "apiVersion": "v1",`, - ` "kind": "Service",`, - ` "metadata": {`, - ` "name": ${name}`, - ` },`, - ` "spec": {`, - ` "ports": [`, - ` {`, - ` "port": ${servicePort},`, - ` "targetPort": ${containerPort}`, - ` }`, - ` ],`, - ` "selector": {`, - ` "app": ${name}`, - ` },`, - ` "type": ${type}`, - ` }`, - ` },`, - ` {`, - ` "apiVersion": "apps/v1beta1",`, - ` "kind": "Deployment",`, - ` "metadata": {`, - ` "name": ${name}`, - ` },`, - ` "spec": {`, - ` "replicas": ${replicas},`, - ` "template": {`, - ` "metadata": {`, - ` "labels": {`, - ` "app": ${name}`, - ` }`, - ` },`, - ` "spec": {`, - ` "containers": [`, - ` {`, - ` "image": ${name},`, - ` "name": ${image},`, - ` "ports": [`, - ` {`, - ` "containerPort": ${containerPort}`, - ` }`, - ` ]`, - ` }`, - ` ]`, - ` }`, - ` }`, - ` }`, - ` }`, - ` ],`, - ` "kind": "List"`, - `}`, - }, JsonnetBody: []string{ `local k = import "k.libsonnet";`, `local deployment = k.apps.v1beta1.deployment;`, @@ -223,18 +80,21 @@ to 'targetLabelSelector', at 'targetPort'.`, `local targetPort = import 'param://containerPort';`, `local labels = {app: import 'param://name'};`, ``, - `local appService = service.new(`, - ` import 'param://name',`, - ` labels,`, - ` servicePort.new(import 'param://servicePort', targetPort)) +`, - `service.mixin.spec.type(import 'param://type');`, + `local appService = service`, + ` .new(`, + ` import 'param://name',`, + ` labels,`, + ` servicePort.new(import 'param://servicePort', targetPort))`, + ` .withType(import 'param://type');`, ``, - `local appDeployment = deployment.new(`, - ` import 'param://name',`, - ` import 'param://replicas',`, - ` container.new(import 'param://name', import 'param://image') +`, - ` container.ports(containerPort.new(targetPort)),`, - ` labels);`, + `local appDeployment = deployment`, + ` .new(`, + ` import 'param://name',`, + ` import 'param://replicas',`, + ` container`, + ` .new(import 'param://name', import 'param://image')`, + ` .withPorts(containerPort.new(targetPort)),`, + ` labels);`, ``, `k.core.v1.list.new([appService, appDeployment])`, }, @@ -250,30 +110,11 @@ to 'targetLabelSelector', at 'targetPort'.`, Template: SnippetSchema{ Description: `A simple config map with optional user-specified data.`, ShortDescription: `A simple config map with optional user-specified data`, - YAMLBody: []string{ - "apiVersion: v1", - "kind: ConfigMap", - "metadata:", - " name: ${name}", - "data: ${data}", - }, - JSONBody: []string{ - `{`, - ` "apiVersion": "v1",`, - ` "kind": "ConfigMap",`, - ` "metadata": {`, - ` "name": ${name}`, - ` },`, - ` "data": ${data}`, - `}`, - }, JsonnetBody: []string{ `local k = import "k.libsonnet";`, `local configMap = k.core.v1.configMap;`, ``, - `configMap.new() +`, - `configMap.mixin.metadata.name(import 'param://name') +`, - `configMap.data(import 'param://data')`, + `configMap.new(import 'param://name', import 'param://data')`, }, }, }, @@ -291,56 +132,6 @@ to 'targetLabelSelector', at 'targetPort'.`, (default: 1), and exposes a port (default: 80). Labels are automatically populated from 'name'.`, ShortDescription: `Replicates a container n times, exposes a single port`, - YAMLBody: []string{ - "apiVersion: apps/v1beta1", - "kind: Deployment", - "metadata:", - " name: ${name}", - "spec:", - " replicas: ${replicas:1}", - " template:", - " metadata:", - " labels:", - " app: ${name}", - " spec:", - " containers:", - " - name: ${name}", - " image: ${image}", - " ports:", - " - containerPort: ${port:80}", - }, - JSONBody: []string{ - `{`, - ` "apiVersion": "apps/v1beta1",`, - ` "kind": "Deployment",`, - ` "metadata": {`, - ` "name": ${name}`, - ` },`, - ` "spec": {`, - ` "replicas": ${replicas:1},`, - ` "template": {`, - ` "metadata": {`, - ` "labels": {`, - ` "app": ${name}`, - ` }`, - ` },`, - ` "spec": {`, - ` "containers": [`, - ` {`, - ` "name": ${name},`, - ` "image": ${image},`, - ` "ports": [`, - ` {`, - ` "containerPort": ${port:80}`, - ` }`, - ` ]`, - ` }`, - ` ]`, - ` }`, - ` }`, - ` }`, - `}`, - }, JsonnetBody: []string{ `local k = import "k.libsonnet";`, `local deployment = k.apps.v1beta1.deployment;`, @@ -350,8 +141,9 @@ populated from 'name'.`, `deployment.new(`, ` import 'param://name',`, ` import 'param://replicas',`, - ` container.new(import 'param://name', import 'param://image') +`, - ` container.ports(port.new(import 'param://port')),`, + ` container`, + ` .new(import 'param://name', import 'param://image')`, + ` .withPorts(port.new(import 'param://port')),`, ` {app: import 'param://name'})`, }, }, diff --git a/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/jsonnet/rewrite.go b/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/jsonnet/rewrite.go index 65aa5e964bc8c28a91276ac15088cdb53951cdb7..4e53a3149c0a33ad98c7d756a2306f27621ce6cc 100644 --- a/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/jsonnet/rewrite.go +++ b/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/jsonnet/rewrite.go @@ -35,6 +35,14 @@ type FuncParam string // Kubernetes version. For example, `fooAPI` becomes `fooApi`. type Identifier string +func (id Identifier) ToSetterID() Identifier { + return Identifier("with" + strings.Title(string(id))) +} + +func (id Identifier) ToMixinID() Identifier { + return Identifier("with" + strings.Title(string(id)) + "Mixin") +} + // RewriteAsFieldKey takes a `PropertyName` and converts it to a valid // Jsonnet field name. For example, if the `PropertyName` has a value // of `"error"`, then this would generate an invalid object, `{error: diff --git a/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet/emit.go b/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet/emit.go index 2b0b98c308b4bfd18f8b7f7977665be2d881e4c2..f421f374c98d751fb7ec414b4f00dfec7930305e 100644 --- a/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet/emit.go +++ b/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet/emit.go @@ -601,8 +601,10 @@ func (ao *apiObject) emitConstructor( "Attempted to create constructor, but property '%s' does not exist", param.ID) } + k8sVersion := ao.root().spec.Info.Version + propMethodName := jsonnet.RewriteAsIdentifier(k8sVersion, prop.name).ToSetterID() setters = append( - setters, fmt.Sprintf("self.%s(%s)", prop.name, param.ID)) + setters, fmt.Sprintf("self.%s(%s)", propMethodName, param.ID)) } else { // TODO(hausdorff): We may want to verify this relative path // exists. @@ -788,10 +790,12 @@ func (p *property) emitHelper( p.comments.emit(m) k8sVersion := p.root().spec.Info.Version - functionName := jsonnet.RewriteAsIdentifier(k8sVersion, p.name) + setterFunctionName := jsonnet.RewriteAsIdentifier(k8sVersion, p.name).ToSetterID() + mixinFunctionName := jsonnet.RewriteAsIdentifier(k8sVersion, p.name).ToMixinID() paramName := jsonnet.RewriteAsFuncParam(k8sVersion, p.name) fieldName := jsonnet.RewriteAsFieldKey(p.name) - signature := fmt.Sprintf("%s(%s)::", functionName, paramName) + setterSignature := fmt.Sprintf("%s(%s)::", setterFunctionName, paramName) + mixinSignature := fmt.Sprintf("%s(%s)::", mixinFunctionName, paramName) if isMixinRef(p.ref) { parsedRefPath := p.ref.Name().Parse() @@ -804,21 +808,41 @@ func (p *property) emitHelper( } else { body = fmt.Sprintf("%s({%s: %s})", *parentMixinName, fieldName, paramName) } - line := fmt.Sprintf("%s %s,", signature, body) + line := fmt.Sprintf("%s %s,", setterSignature, body) m.writeLine(line) } else if p.schemaType != nil { paramType := *p.schemaType - var body string + // + // Generate both setter and mixin functions for some property. For + // example, we emit both `metadata.setAnnotations({foo: "bar"})` + // (which replaces a set of annotations with given object) and + // `metadata.mixinAnnotations({foo: "bar"})` (which replaces only + // the `foo` key, if it exists.) + // + + var setterBody string + var mixinBody string + emitMixin := false switch paramType { case "array": + emitMixin = true if parentMixinName == nil { - body = fmt.Sprintf( + setterBody = fmt.Sprintf( + "if std.type(%s) == \"array\" then {%s: %s} else {%s: [%s]}", + paramName, fieldName, paramName, fieldName, paramName, + ) + mixinBody = fmt.Sprintf( "if std.type(%s) == \"array\" then {%s+: %s} else {%s+: [%s]}", paramName, fieldName, paramName, fieldName, paramName, ) } else { - body = fmt.Sprintf( + setterBody = fmt.Sprintf( + "if std.type(%s) == \"array\" then %s({%s: %s}) else %s({%s: [%s]})", + paramName, *parentMixinName, fieldName, paramName, *parentMixinName, + fieldName, paramName, + ) + mixinBody = fmt.Sprintf( "if std.type(%s) == \"array\" then %s({%s+: %s}) else %s({%s+: [%s]})", paramName, *parentMixinName, fieldName, paramName, *parentMixinName, fieldName, paramName, @@ -826,22 +850,35 @@ func (p *property) emitHelper( } case "integer", "string", "boolean": if parentMixinName == nil { - body = fmt.Sprintf("{%s: %s}", fieldName, paramName) + setterBody = fmt.Sprintf("{%s: %s}", fieldName, paramName) } else { - body = fmt.Sprintf("%s({%s: %s})", *parentMixinName, fieldName, paramName) + setterBody = fmt.Sprintf("%s({%s: %s})", *parentMixinName, fieldName, paramName) } case "object": + emitMixin = true if parentMixinName == nil { - body = fmt.Sprintf("{%s+: %s}", fieldName, paramName) + setterBody = fmt.Sprintf("{%s: %s}", fieldName, paramName) + mixinBody = fmt.Sprintf("{%s+: %s}", fieldName, paramName) } else { - body = fmt.Sprintf("%s({%s+: %s})", *parentMixinName, fieldName, paramName) + setterBody = fmt.Sprintf("%s({%s: %s})", *parentMixinName, fieldName, paramName) + mixinBody = fmt.Sprintf("%s({%s+: %s})", *parentMixinName, fieldName, paramName) } default: log.Panicf("Unrecognized type '%s'", paramType) } - line := fmt.Sprintf("%s %s,", signature, body) + // + // Emit. + // + + line := fmt.Sprintf("%s self + %s,", setterSignature, setterBody) m.writeLine(line) + + if emitMixin { + p.comments.emit(m) + line = fmt.Sprintf("%s self + %s,", mixinSignature, mixinBody) + m.writeLine(line) + } } else { log.Panicf("Neither a type nor a ref") } diff --git a/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion/data.go b/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion/data.go index bd90e066cbbaf6911c727c00f52d1acf2a06d139..c3be966931a9f1deed6eb0a45f8602e5b11508ed 100644 --- a/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion/data.go +++ b/vendor/github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion/data.go @@ -72,6 +72,74 @@ var versions = map[string]versionData{ "local": "localStorage", }, constructorSpecs: map[string][]CustomConstructorSpec{ + // + // Apps namespace. + // + "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment": v1beta1Deployment, + "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList": objectList, + "io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback": v1beta1DeploymentRollback, + "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale": v1beta1Scale, + "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet": v1beta1StatefulSet, + "io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList": objectList, + + // + // Extensions namespace. + // + + "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment": v1beta1Deployment, + "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList": objectList, + "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback": v1beta1DeploymentRollback, + "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale": v1beta1Scale, + "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.StatefulSet": v1beta1StatefulSet, + "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.StatefulSetList": objectList, + + // + // Authentication namespace. + // + + "io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview": []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("token", "mixin.spec.withToken")), + }, + "io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview": []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("token", "mixin.spec.withToken")), + }, + + // + // Autoscaling namespace. + // + + "io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList": objectList, + "io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale": v1beta1Scale, + "io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList": objectList, + + // + // Batch namespace. + // + + "io.k8s.kubernetes.pkg.apis.batch.v1.JobList": objectList, + "io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList": objectList, + + // + // Certificates namespace. + // + + "io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList": objectList, + + // + // Core namespace. + // + + "io.k8s.kubernetes.pkg.api.v1.ConfigMap": []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("name", "mixin.metadata.withName"), + newParam("data")), + }, + "io.k8s.kubernetes.pkg.api.v1.ConfigMapList": objectList, "io.k8s.kubernetes.pkg.api.v1.Container": []CustomConstructorSpec{ newConstructor("new", newParam("name"), newParam("image")), }, @@ -79,28 +147,64 @@ var versions = map[string]versionData{ newConstructor("new", newParam("containerPort")), newConstructor("newNamed", newParam("name"), newParam("containerPort")), }, + "io.k8s.kubernetes.pkg.api.v1.EndpointsList": objectList, "io.k8s.kubernetes.pkg.api.v1.EnvVar": []CustomConstructorSpec{ newConstructor("new", newParam("name"), newParam("value")), newConstructor( "fromSecretRef", newParam("name"), - newParamNestedRef("secretRefName", "mixin.valueFrom.secretKeyRef.name"), - newParamNestedRef("secretRefKey", "mixin.valueFrom.secretKeyRef.key")), + newParamNestedRef("secretRefName", "mixin.valueFrom.secretKeyRef.withName"), + newParamNestedRef("secretRefKey", "mixin.valueFrom.secretKeyRef.withKey")), newConstructor( "fromFieldPath", newParam("name"), - newParamNestedRef("fieldPath", "mixin.valueFrom.fieldRef.fieldPath")), + newParamNestedRef("fieldPath", "mixin.valueFrom.fieldRef.withFieldPath")), }, + "io.k8s.kubernetes.pkg.api.v1.EventList": objectList, "io.k8s.kubernetes.pkg.api.v1.KeyToPath": []CustomConstructorSpec{ newConstructor("new", newParam("key"), newParam("path")), }, + "io.k8s.kubernetes.pkg.api.v1.LimitRangeList": objectList, + "io.k8s.kubernetes.pkg.api.v1.Namespace": []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("name", "mixin.metadata.withName")), + }, + "io.k8s.kubernetes.pkg.api.v1.NamespaceList": objectList, + "io.k8s.kubernetes.pkg.api.v1.NodeList": objectList, + "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList": objectList, + "io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList": objectList, + "io.k8s.kubernetes.pkg.api.v1.PodList": objectList, + "io.k8s.kubernetes.pkg.api.v1.PodTemplateList": objectList, + "io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList": objectList, + "io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList": objectList, + "io.k8s.kubernetes.pkg.api.v1.Secret": []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("name", "mixin.metadata.withName"), + newParam("data"), + newParamWithDefault("type", "\"Opaque\"")), + newConstructor( + "fromString", + newParamNestedRef("name", "mixin.metadata.withName"), + newParam("stringData"), + newParamWithDefault("type", "\"Opaque\"")), + }, + "io.k8s.kubernetes.pkg.api.v1.SecretList": objectList, "io.k8s.kubernetes.pkg.api.v1.Service": []CustomConstructorSpec{ newConstructor( "new", - newParamNestedRef("name", "mixin.metadata.name"), - newParamNestedRef("selector", "mixin.spec.selector"), - newParamNestedRef("ports", "mixin.spec.ports")), + newParamNestedRef("name", "mixin.metadata.withName"), + newParamNestedRef("selector", "mixin.spec.withSelector"), + newParamNestedRef("ports", "mixin.spec.withPorts")), + }, + "io.k8s.kubernetes.pkg.api.v1.ServiceAccount": []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("name", "mixin.metadata.withName")), }, + "io.k8s.kubernetes.pkg.api.v1.ServiceAccountList": objectList, + "io.k8s.kubernetes.pkg.api.v1.ServiceList": objectList, "io.k8s.kubernetes.pkg.api.v1.ServicePort": []CustomConstructorSpec{ newConstructor("new", newParam("port"), newParam("targetPort")), newConstructor("newNamed", newParam("name"), newParam("port"), newParam("targetPort")), @@ -109,8 +213,8 @@ var versions = map[string]versionData{ newConstructor( "fromConfigMap", newParam("name"), - newParamNestedRef("configMapName", "mixin.configMap.name"), - newParamNestedRef("configMapItems", "mixin.configMap.items")), + newParamNestedRef("configMapName", "mixin.configMap.withName"), + newParamNestedRef("configMapItems", "mixin.configMap.withItems")), newConstructor( "fromEmptyDir", newParam("name"), @@ -118,32 +222,21 @@ var versions = map[string]versionData{ newConstructor( "fromPersistentVolumeClaim", newParam("name"), - newParamNestedRef("claimName", "mixin.persistentVolumeClaim.claimName")), + newParamNestedRef("claimName", "mixin.persistentVolumeClaim.withClaimName")), newConstructor( "fromHostPath", newParam("name"), - newParamNestedRef("hostPath", "mixin.hostPath.path")), + newParamNestedRef("hostPath", "mixin.hostPath.withPath")), + newConstructor( + "fromSecret", + newParam("name"), + newParamNestedRef("secretName", "mixin.secret.withSecretName")), }, "io.k8s.kubernetes.pkg.api.v1.VolumeMount": []CustomConstructorSpec{ newConstructor("new", newParam("name"), newParam("mountPath"), newParamWithDefault("readOnly", "false")), }, - "io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment": []CustomConstructorSpec{ - newConstructor( - "new", - newParamNestedRef("name", "mixin.metadata.name"), - newParamNestedRef("replicas", "mixin.spec.replicas"), - newParamNestedRef("containers", "mixin.spec.template.spec.containers"), - newParamNestedRefDefault("podLabels", "mixin.spec.template.metadata.labels", "{}")), - }, - "io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment": []CustomConstructorSpec{ - newConstructor( - "new", - newParamNestedRef("name", "mixin.metadata.name"), - newParamNestedRef("replicas", "mixin.spec.replicas"), - newParamNestedRef("containers", "mixin.spec.template.spec.containers"), - newParamNestedRefDefault("podLabels", "mixin.spec.template.metadata.labels", "{}")), - }, }, + propertyBlacklist: map[string]propertySet{ // Metadata fields. "io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta": newPropertySet( @@ -336,3 +429,46 @@ k8s + { `, }, } + +//----------------------------------------------------------------------------- +// Utility specs, for duplicated objects. +//----------------------------------------------------------------------------- + +var objectList = []CustomConstructorSpec{ + newConstructor( + "new", + newParam("items")), +} +var v1beta1Deployment = []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("name", "mixin.metadata.withName"), + newParamNestedRef("replicas", "mixin.spec.withReplicas"), + newParamNestedRef("containers", "mixin.spec.template.spec.withContainers"), + newParamNestedRefDefault( + "podLabels", + "mixin.spec.template.metadata.withLabels", + "{app: name}")), +} +var v1beta1DeploymentRollback = []CustomConstructorSpec{ + newConstructor( + "new", + newParam("name")), +} +var v1beta1Scale = []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("replicas", "mixin.spec.withReplicas")), +} +var v1beta1StatefulSet = []CustomConstructorSpec{ + newConstructor( + "new", + newParamNestedRef("name", "mixin.metadata.withName"), + newParamNestedRef("replicas", "mixin.spec.withReplicas"), + newParamNestedRef("containers", "mixin.spec.template.spec.withContainers"), + newParamNestedRef("volumeClaims", "mixin.spec.withVolumeClaimTemplates"), + newParamNestedRefDefault( + "podLabels", + "mixin.spec.template.metadata.withLabels", + "{app: name}")), +} diff --git a/vendor/vendor.json b/vendor/vendor.json index d66167f0b92628d52f86542325cffcad34e7ed88..a4ee18e64a733389099ac7873cb3ab5cee3e449f 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -257,28 +257,28 @@ "revisionTime": "2017-03-14T01:17:55Z" }, { - "checksumSHA1": "wX+GmcWpMzCIcxR9YtN1FCM9BEE=", + "checksumSHA1": "ia91LEEbuaR5os39J+5MzEi1xnY=", "path": "github.com/ksonnet/ksonnet-lib/ksonnet-gen/jsonnet", - "revision": "b27d2d7778c12c3d762d24c1b9fd4c41da6c73c7", - "revisionTime": "2017-09-10T05:18:39Z" + "revision": "46d8bb9e605dc3d3977e2e2054e921ed32dd699f", + "revisionTime": "2017-11-21T00:39:10Z" }, { - "checksumSHA1": "zJx/j+IS6qd0P5h2m8WEQEtrACU=", + "checksumSHA1": "ZQxcZOI8LKx+lAZ9MAW1yb579zo=", "path": "github.com/ksonnet/ksonnet-lib/ksonnet-gen/ksonnet", - "revision": "b27d2d7778c12c3d762d24c1b9fd4c41da6c73c7", - "revisionTime": "2017-09-10T05:18:39Z" + "revision": "46d8bb9e605dc3d3977e2e2054e921ed32dd699f", + "revisionTime": "2017-11-21T00:39:10Z" }, { "checksumSHA1": "BiiHRiYpSOb+vHiP6h/A9lRotEY=", "path": "github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubespec", - "revision": "b27d2d7778c12c3d762d24c1b9fd4c41da6c73c7", - "revisionTime": "2017-09-10T05:18:39Z" + "revision": "46d8bb9e605dc3d3977e2e2054e921ed32dd699f", + "revisionTime": "2017-11-21T00:39:10Z" }, { - "checksumSHA1": "lr+Bx7/N2KHk9dOrsWfLYBPjbdQ=", + "checksumSHA1": "hEIHBY6IrJscUYUlgFPCHuW4yBs=", "path": "github.com/ksonnet/ksonnet-lib/ksonnet-gen/kubeversion", - "revision": "b27d2d7778c12c3d762d24c1b9fd4c41da6c73c7", - "revisionTime": "2017-09-10T05:18:39Z" + "revision": "46d8bb9e605dc3d3977e2e2054e921ed32dd699f", + "revisionTime": "2017-11-21T00:39:10Z" }, { "checksumSHA1": "T8soMJArSZrYnhmdpAnq1bVxQ6Q=",