community.okd.k8s – Управление объектами OpenShift
Примечание
Этот плагин входит в коллекцию community.okd (версия 1.0.1).
Для его установки используйте: ansible-galaxy collection install community.okd
Чтобы использовать его в книге задач, укажите: community.okd.k8s
Обзор
- Используйте клиент OpenShift Python для выполнения операций CRUD над объектами K8s.
- Передавайте определение объекта из исходного файла или в строковом виде. См. примеры чтения файлов и использования шаблонов Jinja или зашифрованных Vault файлов.
- Доступ ко всему спектру API K8s.
- Используйте модуль k8s_info, чтобы получить список элементов об объекте типа
kind. - Авторизуйтесь с помощью файла конфигурации, сертификатов, пароля или токена.
- Поддерживает режим проверки.
- Оптимизирован для дистрибутивов Kubernetes OKD/OpenShift
Требования
Ниже перечислены требования, необходимые на хосте, на котором будет выполняться этот модуль.
- python >= 2.7
- openshift >= 0.6
- PyYAML >= 3.11
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| api_key строка | Токен, используемый для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_API_KEY. | ||
| api_version строка | По умолчанию: "v1" | Используется для указания версии API. Используется для создания, удаления или поиска объекта без предоставления полного определения ресурса. Используется в сочетании с kind, name и namespace для идентификации конкретного объекта. Если предоставлено определение ресурса, значение apiVersion из resource_definition переопределит этот параметр. псевдонимы: api, version | |
| append_hash логический тип |
| Добавлять ли хэш к имени ресурса для обеспечения неизменяемости Применимо только к ресурсам ConfigMap и Secret Для других типов ресурсов параметр будет проигнорирован. Для генерации хэша необходимо полное определение объекта. Это означает, что удаление объекта, созданного с append_hash, будет работать только в том случае, если тот же объект передается со state=absent (или просто используйте state=absent с именем, включающим сгенерированный хэш и append_hash=no) | |
| apply логический тип |
| apply сравнивает желаемое определение ресурса с ранее предоставленным определением ресурса, игнорируя свойства, которые автоматически генерируютсяapply работает лучше с сервисами, чем «force=yes»взаимоисключающий с merge_type
| |
| ca_cert путь | Путь к сертификату CA, используемому для аутентификации с API. Для предотвращения ошибок валидации сертификата необходимо предоставить полную цепочку сертификатов. Также можно указать через переменную среды K8S_AUTH_SSL_CA_CERT. псевдонимы: ssl_ca_cert | ||
| client_cert путь | Путь к сертификату, используемому для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_CERT_FILE. псевдонимы: cert_file | ||
| client_key путь | Путь к файлу ключа, используемому для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_KEY_FILE. псевдонимы: key_file | ||
| context строка | Имя контекста, найденного в файле конфигурации. Также можно указать через переменную среды K8S_AUTH_CONTEXT. | ||
| force логический тип |
| Если установлено значение yes, и state имеет значение present, существующий объект будет заменён. | |
| host строка | Укажите URL для доступа к API. Также можно указать через переменную среды K8S_AUTH_HOST. | ||
| kind строка | Используется для указания модели объекта. Используется для создания, удаления или поиска объекта без предоставления полного определения ресурса. Используется в сочетании с api_version, name и namespace для идентификации конкретного объекта. Если предоставлено определение ресурса, значение kind из resource_definition переопределит этот параметр. | ||
| kubeconfig путь | Путь к существующему файлу конфигурации Kubernetes. Если не указан и не указаны другие параметры подключения, клиент openshift попытается загрузить файл конфигурации по умолчанию из ~/.kube/config.json. Также можно указать через переменную среды K8S_AUTH_KUBECONFIG. | ||
| merge_type список / элементы=строка |
| Выбор подхода к слиянию исправлений по умолчанию. По умолчанию используется стратегическое слияние. Например, определения пользовательских ресурсов обычно не обновляются с помощью стандартного стратегического слияния. Вы можете использовать merge если видите сообщение «формат стратегического слияния исправлений не поддерживается»Требуется openshift >= 0.6.2 Если указано несколько merge_type, они будут использоваться в указанном порядке Если openshift >= 0.6.2, по умолчанию используется ['strategic-merge', 'merge'], что идеально подходит для использования одних и тех же параметров для типов ресурсов, которые объединяют пользовательские ресурсы и встроенные ресурсы. Для openshift < 0.6.2 значение по умолчанию — просто strategic-merge. взаимоисключающий с apply
| |
| name строка | Используется для указания имени объекта. Используется для создания, удаления или поиска объекта без предоставления полного определения ресурса. Используется в сочетании с api_version, kind и namespace для идентификации конкретного объекта. Если предоставлено определение ресурса, значение metadata.name из resource_definition переопределит этот параметр. | ||
| namespace строка | Используется для указания пространства имён объекта. Полезно при создании, удалении или поиске объекта без предоставления полного определения ресурса. Используется в сочетании с api_version, kind и name для идентификации конкретного объекта. Если предоставлено определение ресурса, значение metadata.namespace из resource_definition переопределит этот параметр. | ||
| password строка | Укажите пароль для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_PASSWORD. Обратитесь к описанию параметра username для обсуждения случаев применения этого параметра. | ||
| persist_config логический тип |
| Сохранять ли токены обновления конфигурации kube. Также можно указать через переменную среды K8S_AUTH_PERSIST_CONFIG. Когда контекст k8s использует учетные данные пользователя с токенами обновления (например, oidc или gke/gcloud auth), токен обновляется библиотекой k8s python, но по умолчанию не сохраняется. Поэтому старый токен обновления может истечь, и следующая аутентификация может не удаться. Установка этого флага в значение true сообщит библиотеке k8s python о сохранении нового токена обновления в файле конфигурации kube. По умолчанию false. Обратите внимание, что текущая версия библиотеки k8s python пока не поддерживает установку этого флага в значение True. Исправление для этой библиотеки k8s python находится здесь: https://github.com/kubernetes-client/python-base/pull/169 | |
| proxy строка | URL HTTP-прокси, используемого для подключения. Также можно указать через переменную среды K8S_AUTH_PROXY. Обратите внимание, что этот модуль не подхватывает типичные настройки прокси из среды (например, HTTP_PROXY). | ||
| resource_definition строка | Укажите валидное YAML-определение (в виде строки, списка или словаря) для объекта при создании или обновлении. ПРИМЕЧАНИЕ: kind, api_version, name и namespace будут переопределены соответствующими значениями, найденными в предоставленном resource_definition. псевдонимы: definition, inline | ||
| src путь | Укажите путь к файлу, содержащему валидное YAML-определение объекта или объектов для создания или обновления. Взаимоисключающий с resource_definition. ПРИМЕЧАНИЕ: kind, api_version, name и namespace будут переопределены соответствующими значениями, прочитанными из файла src. Считывается из локальной файловой системы. Для считывания из файловой системы контроллера Ansible, включая зашифрованные файлы, используйте плагин поиска файла или плагин поиска шаблона в сочетании с фильтром from_yaml и передайте результат в resource_definition. См. примеры ниже. Взаимоисключающий с template в случае модуля k8s. | ||
| state строка |
| Определяет, должен ли объект быть создан, изменён или удалён. При значении present, объект будет создан, если он ещё не существует. При значении absent, существующий объект будет удалён. При значении present, существующий объект будет изменён, если его атрибуты отличаются от указанных с помощью resource_definition или src. | |
| username строка | Укажите имя пользователя для аутентификации с API. Также можно указать через переменную среды K8S_AUTH_USERNAME. Обратите внимание, что это работает только с кластерами, настроенными на использование HTTP Basic Auth. Если ваш кластер использует другой вид аутентификации (например, OAuth2 в OpenShift), этот параметр не будет работать должным образом, и вам следует обратиться к модулю k8s_auth, так как он может выполнять необходимые действия. | ||
| validate словарь | Как (если вообще) проверять определение ресурса по схеме Kubernetes. Требуется модуль kubernetes-validate python. | ||
| fail_on_error логический тип |
| Прерывать ли выполнение при ошибках проверки. | |
| strict логический тип |
| Прерывать ли выполнение при передаче неожиданных свойств | |
| версия строка | Версия Kubernetes для проверки. По умолчанию используется версия сервера Kubernetes | ||
| validate_certs логический тип |
| Проверять или нет сертификаты SSL API-сервера. Также можно указать через переменную окружения K8S_AUTH_VERIFY_SSL. псевдонимы: verify_ssl | |
| wait логический тип |
| Ожидать, пока определённые типы ресурсов перейдут в нужное состояние. По умолчанию модуль завершается, как только Kubernetes получит запрос. Реализовано для state=present для Deployment, DaemonSet и Pod, и для state=absent для всех типов ресурсов.Для типов ресурсов без реализации, wait возвращается немедленно, если wait_condition не задано. | |
| wait_condition словарь | Указывает пользовательское условие для ожидания статуса. Игнорируется, если wait не установлено или установлено в False. | ||
| reason строка | Значение поля reason в вашем желаемом условии Например, если Deployment приостановлено, то Progressing type будет иметь причину DeploymentPaused. Возможные причины в условии зависят от каждого типа ресурса в Kubernetes. См. документацию API для поля status данного ресурса, чтобы узнать возможные варианты. | ||
| status строка |
| Значение поля status в вашем желаемом условии. Например, если Deployment приостановлено, то Progressing type будет иметь статус Unknown. | |
| type строка | Тип условия для ожидания. Например, ресурс Pod установит условие Ready (среди прочих).Требуется, если вы указываете wait_condition. Если оставлено пустым, то поле wait_condition будет проигнорировано.Возможные типы условия зависят от каждого типа ресурса в Kubernetes. См. документацию API для поля status данного ресурса, чтобы узнать возможные варианты. | ||
| wait_sleep целое число | Значение по умолчанию: 5 | Количество секунд ожидания между проверками. | |
| wait_timeout целое число | Значение по умолчанию: 120 | Время ожидания в секундах, пока ресурс не перейдет в нужное состояние. Игнорируется, если wait не установлено. | |
Примечания
Примечание
- Если ваша библиотека OpenShift Python не 0.9.0 или более новой версии, и вы пытаетесь удалить элемент из ассоциативного массива/словаря, например метки или аннотации, вам необходимо явно установить значение удаляемого элемента в
null. Простое удаление записи из словаря не удалит её из OpenShift или Kubernetes. - Клиент OpenShift Python оборачивает K8s Python клиент, предоставляя полный доступ ко всем API и моделям, доступным на обеих платформах. Подробную информацию о версиях API и дополнительные сведения можно найти по адресу https://github.com/openshift/openshift-restclient-python
- Чтобы избежать ошибок проверки сертификатов SSL при
validate_certsравно True, полная цепочка сертификатов API-сервера должна быть предоставлена черезca_certили в файле kubeconfig.
Примеры
- name: Create a k8s namespace
community.okd.k8s:
name: testing
api_version: v1
kind: Namespace
state: present
- name: Create a Service object from an inline definition
community.okd.k8s:
state: present
definition:
apiVersion: v1
kind: Service
metadata:
name: web
namespace: testing
labels:
app: galaxy
service: web
spec:
selector:
app: galaxy
service: web
ports:
- protocol: TCP
targetPort: 8000
name: port-8000-tcp
port: 8000
- name: Remove an existing Service object
community.okd.k8s:
state: absent
api_version: v1
kind: Service
namespace: testing
name: web
# Passing the object definition from a file
- name: Create a Deployment by reading the definition from a local file
community.okd.k8s:
state: present
src: /testing/deployment.yml
- name: >-
Read definition file from the Ansible controller file system.
If the definition file has been encrypted with Ansible Vault it will automatically be decrypted.
community.okd.k8s:
state: present
definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml }}"
- name: Read definition file from the Ansible controller file system after Jinja templating
community.okd.k8s:
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
- name: fail on validation errors
community.okd.k8s:
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
validate:
fail_on_error: yes
- name: warn on validation errors, check for unexpected properties
community.okd.k8s:
state: present
definition: "{{ lookup('template', '/testing/deployment.yml') | from_yaml }}"
validate:
fail_on_error: no
strict: yes
Значения возврата
Общие значения возврата описаны здесь, следующие являются полями, уникальными для данного модуля:
| Ключ | Возвращаемое значение | Описание | |
|---|---|---|---|
| результат сложный тип | успех | Созданный, изменённый или иначе существующий объект. Будет пустым в случае удаления. | |
| api_version строка | успех | Версия схемы представления объекта. | |
| duration целое число | если wait истинно | время выполнения задачи в секундах Пример: 48 | |
| items список / элементы=строка | при resource_definition или src содержит список объектов | Возвращается только тогда, когда несколько yaml-документов передаются в src или resource_definition | |
| kind строка | успех | Представляет REST-ресурс, который представляет этот объект. | |
| metadata сложный тип | успех | Стандартные метаданные объекта. Включают имя, пространство имён, аннотации, метки и т. д. | |
| spec сложный тип | успех | Конкретные атрибуты объекта. Будут различаться в зависимости от api_version и kind. | |
| status сложный тип | успех | Текущие детали статуса объекта. | |
Авторы
- Chris Houseknecht (@chouseknecht)
- Fabian von Feilitzsch (@fabianvf)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/community/okd/k8s_module.html