Как использовать метод client.List в kubebuilder?
Я работаю над пользовательским контроллером для пользовательского ресурса с использованием kubebuilder (версия 1.0.8). У меня есть сценарий, где мне нужно получить список всех экземпляров моего пользовательского ресурса, чтобы я мог синхронизироваться с внешней базой данных.
Все примеры, которые я видел для контроллеров kubernetes, используют client-go или просто вызывают сервер API напрямую через http. Тем не менее, kubebuilder также дал мне этот объект client.Client для получения и перечисления ресурсов. Поэтому я пытаюсь использовать это.
После создания экземпляра клиента с помощью переданного экземпляра Manager (т.е. mgr.GetClient()
Затем я попытался написать код, чтобы получить список всех созданных мною ресурсов среды.
func syncClusterWithDatabase(c client.Client, db *dynamodb.DynamoDB) {
// Sync environments
// Step 1 - read all the environments the cluster knows about
clusterEnvironments := &cdsv1alpha1.EnvironmentList{}
c.List(context.Background(), /* what do I put here? */, clusterEnvironments)
}
Пример в документации для метода List показывает:
c.List(context.Background, &result);
который даже не компилируется.
Я видел несколько методов в клиентском пакете, чтобы ограничить поиск определенными метками или определенным полем с определенным значением, но ничего, чтобы ограничить результат определенным видом ресурса.
Есть ли способ сделать это через Client
объект? Должен ли я сделать что-то еще полностью?
2 ответа
Так разобрался - ответ пройти nil
для второго параметра. Тип выходного указателя определяет, какой тип ресурса он фактически получает.
Согласно последней документации, метод List определяется следующим образом:
List(ctx context.Context, list ObjectList, opts ...ListOption) error
ЕслиList
метод, который вы вызываете, имеет то же определение, что и выше, ваш код должен скомпилироваться. Поскольку он имеет переменные параметры для установки пространства имен и совпадения полей, обязательными аргументами являютсяContext
иobjectList
.
Ссылка: Книга KubeBuilder