Передать массив из утверждения кроссплоскости в композицию кроссплоскости

Я работаю над утверждением, которое будет использоваться примерно 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, показывающая переменные среды

Примечание. Значения переменных среды должны быть строками, что является причиной проверки в схеме и кавычек в утверждении.

Другие вопросы по тегам