Kubernetes: помещение значения JSON в файл YAML - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь создать секрет из значения JSON, но я продолжаю получать эту ошибку при выполнении "secrets.yaml" at <b64enc>: wrong type for value; expected string; got map[string]interface {}, когда я helm install.

secrets.yaml

apiVersion: v1
kind: Secret
metadata:
  name: cloudsql-instance-credentials
  namespace: wp-{{ .Values.name }}
  labels:
    app: wp-{{ .Values.name }}
type: Opaque
data:
  credentials.json: {{ .Values.dbCred | b64enc }}

values.yaml

dbCred: {
  'type': '',
  'project_id': '',
  'private_key_id': '',
  'private_key': '-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n',
  'client_email': '',
  'client_id': '',
  'auth_uri': '',
  'token_uri': '',
  'auth_provider_x509_cert_url': '',
  'client_x509_cert_url': ''
}

Ответы [ 4 ]

0 голосов
/ 10 декабря 2018

Вы можете сделать следующее для вашей конфигурации:

apiVersion: v1
kind: Secret
metadata:
  name: cloudsql-instance-credentials
  namespace: wp-{{ .Values.name }}
  labels:
    app: wp-{{ .Values.name }}
type: Opaque
data:
  credentials.json: |-
     {{ include (print $.Template.BasePath "/_helper_conf.tpl") . | b64enc }}

Обратите внимание, что когда вы пытаетесь внедрить конфигурацию в секретную (особенно большие), вам может понадобиться использовать | -

вы также можете использовать помощника типа

{{ include (print $.Template.BasePath "/_helper_conf.tpl") . | b64enc }}

Или даже лучше, в вашей конфигурации yaml (values.yml) вы можете просто написать следующее:

dbCred:
  type: ''
  project_id: ''
  private_key_id: ''
  private_key: '-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n'
  client_email: ''
  client_id: ''
  auth_uri: ''
  token_uri: ''
  auth_provider_x509_cert_url: ''
  client_x509_cert_url: ''

Чтобы использовать этот тип конфигурации, вы можете проверить объект ниже:

apiVersion: v1
kind: Secret
metadata:
  name: cloudsql-instance-credentials
  namespace: wp-{{ .Values.name }}
  labels:
    app: wp-{{ .Values.name }}
type: Opaque
data:
  credentials.json: |-
     {{ toJson .Values.dbCred | b64enc }}

Использование этой конфигурации состоит в том, чтобы предоставить абстракцию предоставленного json и поместить его в ваши values.yml

{{ toJson .Values.dbCred | b64enc }}

Обратите внимание, что это может дублироваться, если вы поддерживаете несколько сред, поэтому вы можете предпочесть использовать помощник и некоторые переменные внутри (или tpl), чтобы избежать дублирования кода

Надеюсь, это поможет

0 голосов
/ 10 декабря 2018

Кроме того, вы можете хранить файл credentials.json внутри каталога диаграммы и файл доступа внутри шаблона

data:
  credentials.json: {{ .Files.Get "credentials.json" | b64enc }}
0 голосов
/ 10 декабря 2018

используйте двойные кавычки ("") до и после dbCred, как показано ниже

dbCred: "{
  'type': '',
  'project_id': '',
  'private_key_id': '',
  'private_key': '-----BEGIN PRIVATE KEY-----\n\n-----END PRIVATE KEY-----\n',
  'client_email': '',
  'client_id': '',
  'auth_uri': '',
  'token_uri': '',
  'auth_provider_x509_cert_url': '',
  'client_x509_cert_url': ''
}"

Другие вещи выглядят хорошо.

0 голосов
/ 10 декабря 2018

Это можно исправить, изменив {{ .Values.dbCred | b64enc }} на {{ toJson .Values.dbCred | b64enc }}

...