Передать массив из утверждения кроссплоскости в композицию кроссплоскости
Я работаю над утверждением, которое будет использоваться примерно 8 службами в организации, как мне передать массив переменных env в композицию. Кажется, нет способа сделать это
Вот пример моей претензии
apiVersion: app.org.io/v1
kind: XClaim
metadata:
name: test-app
spec:
parameters:
name: test-app
envVariables:
- variables:
foo: bar
name: precious
age: 15
Вот пример моего CRD
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: applambdas.app.org.io
namespace: crossplane-system
spec:
group: app.org.io
names:
kind: AppLambda
plural: applambdas
versions:
- name: v1
served: true
referenceable: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
parameters:
type: object
properties:
env:
type: string
envVariables:
type: array
name:
type: string
claimNames:
kind: XClaim
plural: xclaims
Вот пример моей композиции
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: lambda
spec:
compositeTypeRef:
apiVersion: app.org.io/v1
kind: AppLambda
resources:
- name: lambda-function
base:
apiVersion: lambda.aws.upbound.io/v1beta1
kind: Function
metadata:
annotations:
uptest.upbound.io/timeout: "3600"
name: lambda
spec:
providerConfigRef:
name: aws-config
forProvider:
handler: index.lambda_handler
packageType: Zip
region: eu-west-1
role: arn:aws:iam::xxxxxx:role/crossplane-lambda-test-role
runtime: python3.9
s3Bucket: testappbucket-upbound-provider-test-data
s3Key: function.zip
timeout: 60
environment: []
patches:
- fromFieldPath: spec.parameters.envVariables[variables]
toFieldPath: spec.forProvider.environment[variables]
The spec.forProvider.environment
Кажется, меня не исправили, я занимался этим всю неделю, пожалуйста, мне нужна помощь
1 ответ
В этом случае переменные среды на самом деле не являются массивом. Вы можете видеть по компакт-диску , чтоvariables
должен быть ключом к объекту, хранящимся под одним значениемenvironment
множество.
spec:
forProvider:
environment:
- variables:
key: value
Итак, с некоторыми небольшими изменениями в вашем определении и композиции, это должно быть возможно:
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
...
envVariables:
type: object
additionalProperties:
type: string
...
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
...
patches:
- fromFieldPath: spec.parameters.envVariables
toFieldPath: spec.forProvider.environment[0].variables
...
Это позволит вам создать такое заявление:
apiVersion: app.org.io/v1
kind: XClaim
metadata:
name: test-app
spec:
parameters:
name: test-app
envVariables:
foo: bar
name: precious
age: "15"
В результате получается функция с соответствующими установленными переменными среды. Консоль AWS, показывающая переменные среды
Примечание. Значения переменных среды должны быть строками, что является причиной проверки в схеме и кавычек в утверждении.