from esu.base import BaseAPI, Field, ObjectAlreadyHasId, ObjectHasNoId
[документация]class Kubernetes(BaseAPI):
"""
Args:
id (str): Идентификатор
name (str): Имя
node_cpu (int): CPU нод
node_ram (int): RAM нод
node_disk_size (int): Размер диска нод
node_storage_profile (object): Объект :class:`esu.StorageProfile`
nodes_count (int): Количество нод в кластере
vdc (object): Объект класса :class:`esu.Vdc`. ВЦОД, к которому
относится данный кластер
template (str): Идентификатор шаблона Kubernetes
user_public_key (string): публичный SSH ключ
floating (object): Объект класса :class:`esu.Port`.
Порт подключения кластера к внешней сети.
Если None, кластер не имеет подключения к внешней сети.
"""
class Meta:
id = Field()
name = Field()
node_cpu = Field()
node_ram = Field()
node_disk_size = Field()
node_storage_profile = Field('esu.StorageProfile')
nodes_count = Field()
template = Field('esu.KubernetesTemplate')
user_public_key = Field()
vdc = Field('esu.Vdc')
floating = Field('esu.Port', allow_none=True)
[документация] @classmethod
def get_object(cls, id, token=None):
"""
Получить объект kubernetes по его ID
Args:
id (str): Идентификатор Kubernetes
token (str): Токен для доступа к API. Если не передан, будет
использована переменная окружения **ESU_API_TOKEN**
Returns:
object: Возвращает объект кластера
kubernetes :class:`esu.Kubernetes`
"""
k8s = cls(token=token, id=id)
k8s._get_object('v1/kubernetes', k8s.id)
return k8s
[документация] def create(self):
"""
Создать объект
Raises:
ObjectAlreadyHasId: Если производится попытка создать объект,
который уже существует
"""
if self.id is not None:
raise ObjectAlreadyHasId
self._commit()
[документация] def save(self):
"""
Сохранить изменения
"""
if self.id is None:
raise ObjectHasNoId
self._commit()
return self
def _commit(self):
k8s = {
'vdc': self.vdc.id,
'template': self.template.id,
'name': self.name,
'node_cpu': self.node_cpu,
'node_ram': self.node_ram,
'node_disk_size': self.node_disk_size,
'node_storage_profile': self.node_storage_profile.id,
'nodes_count': self.nodes_count,
'user_public_key': self.user_public_key
}
floating = None
if self.floating:
# keep/change or get a new IP
floating = self.floating.id or '0.0.0.0'
k8s['floating'] = floating
self._commit_object('v1/kubernetes', **k8s)
[документация] def destroy(self):
"""
Удалить объект
Raises:
ObjectHasNoId: Когда производится попытка удалить несуществующий
объект
"""
if self.id is None:
raise ObjectHasNoId
self._destroy_object('v1/kubernetes', self.id)
self.id = None
[документация] def get_dashbord_url(self):
"""
Получить ссылку на Dashboard для открытия консоли k8s
Returns:
str: Адрес дашборда
"""
url = self._call('GET', 'v1/kubernetes/{}/dashboard'.format(self.id))
uri = url['url']
return '{}{}'.format(self.endpoint_url, uri)