Создание auth ConfigMap с использованием Python SDK - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь установить ConfigMap на моем кластере, используя python SDK.Я планирую подготовить кластеры на AWS EKS автоматически, поэтому хочу иметь возможность устанавливать ConfigMaps с помощью кода.

Я изо всех сил пытаюсь понять, в каком формате должен быть объект данных. Я следовал документации AWS EKS и вручную применил auth configmap, и вывод kubectl выглядит следующим образом:

data:
  mapRoles: |
    - rolearn: arn:aws:iam::XXXXXXXXXX:role/dev-eks-workers-NodeInstanceRole
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes

Я пытаюсь настроить структуру следующим образом (с дополнительной ролью для моей локальной роли пользователя AWS):

body = client.V1ConfigMap()
body.api_version = 'v1'
body.kind = 'ConfigMap'
body.metadata = {
    'name': 'aws-auth',
    'namespace': 'kube-system'
}

body.data = {
  'mapRoles': [
    {
      'rolearn': 'arn:aws:iam::XXXXXXXXXX:role/dev-eks-workers-NodeInstanceRole',
      'username': 'system:node:{{EC2PrivateDNSName}}',
      'groups': [
        'system:bootstrappers',
        'system:nodes'       
      ]
    },
    {
      'rolearn': 'arn:aws:iam::XXXXXXXXXX:role/Admin',
      'username': 'admin',
      'groups': [
        'system:masters' 
      ]
    }
  ]
}

Этот код отклонен API.Я думаю, это потому, что документы здесь указывают, что данные должны быть dict(str, str)

Я пробовал многострочную строку, и, хотя она, кажется, устанавливает конфигурационную карту, ее форматированиеполностью перебор, и он на самом деле не работает с определенными ролями.

apiVersion: v1
data:
  mapRoles: "\n- rolearn: arn:aws:iam::XXXXXXXXXXXX:role/dev-apollo-eks-workers-NodeInstanceRole\n
    \ username: system:node:{EC2PrivateDNSName}\n  groups:\n    - system:bootstrappers\n
    \   - system:nodes\n\n- rolearn: arn:aws:iam::XXXXXXXXXXXX:role/Admin\n  username:
    admin\n  groups:\n   - system:masters\n    "
kind: ConfigMap

Может кто-нибудь дать мне пример того, как я должен делать это в python

1 Ответ

0 голосов
/ 21 марта 2019

После нескольких попыток использование этого формата работает.

rolesString = ['- rolearn: ',
              f'{nodeRoleName}\n',
               '  username: system:node:{{EC2PrivateDNSName}}\n',
               '  groups:\n',
               '    - system:bootstrappers\n',
               '    - system:nodes\n',
              f'- rolearn: arn:aws:iam::{accountId}:role/Admin\n',
               '  username: admin\n',
               '  groups:\n',
               '    - system:masters\n'
               ]

body.data = {
   'mapRoles': ''.join(rolesString)
}
...