Установка исправлений через kubernetes / client-go - PullRequest
0 голосов
/ 22 декабря 2018

Не могу понять, что не так.У меня есть удаленный кластер kubernetes и скопировал конфигурацию локально.Я знаю, что это правильно, потому что я получил другие команды для работы на меня.

Единственное, чего я не могу получить - это патч развертывания.Мой код:

const namespace = "default"

var clientset *kubernetes.Clientset

func init() {
    kubeconfig := "/Users/$USER/go/k8s-api/config"
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
        log.Fatal(err)
    }

    // create the clientset
    clientset, err = kubernetes.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
}

func main() {
    deploymentsClient := clientset.ExtensionsV1beta1().Deployments("default")

    patch := []byte(`[{"spec":{"template":{"spec":{"containers":[{"name":"my-deploy-test","image":"$ORG/$REPO:my-deploy0.0.1"}]}}}}]`)
    res, err := deploymentsClient.Patch("my-deploy", types.JSONPatchType, patch)
    if err != nil {
        panic(err)
    }
    fmt.Println(res)

}

Все, что я получаю, это: panic: the server rejected our request due to an error in our request

Любая помощь приветствуется, спасибо!

Ответы [ 2 ]

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

На самом деле вы должны использовать types.StrategicMergePatchType и удалить начальную ([) и конечную (]) скобку из строки исправления.

Merge-patch: С объединением JSONпатч, если вы хотите обновить список, вы должны указать весь новый список.И новый список полностью заменяет существующий список.

Strategic-merge-patch: При стратегическом патче слияния список либо заменяется, либо объединяется в зависимости от стратегии его патча.Стратегия исправления определяется значением ключа patchStrategy в теге поля в исходном коде Kubernetes.Например, поле «Контейнеры» структуры PodSpec имеет patchStrategy слияния:

type PodSpec struct {
  ...
  Containers []Container `json:"containers" patchStrategy:"merge" patchMergeKey:"name" ...`

Примечание: kubectl по умолчанию использует стратегическое исправление слияния для исправления ресурсов kubernetes.

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

Вы перепутали JSONPatchType with MergePatchType;JSONPatchType хочет, чтобы входные данные были RFC 6902 в формате "команд", и в этом случае это может быть массив JSON, поскольку для входного документа может быть применено несколько команд

Однако ваша полезная нагрузка выглядит гораздо ближе к желанию MergePatchType, и в этом случае входные данные должны , а не быть массивом JSON, поскольку исходный документ не является массивом "spec" объектов.

Таким образом, я бы поспорил, просто отбросив ведущий [ и трейлинг ], изменив аргумент на types.MergePatchType, и вы продвинетесь намного дальше

...