#
# MDX2 Disk
#
from vcpsdk.plugins.spec_disk import VcpSpecResourceDisk
CCI_VERSION = "1.0"
BUILD_VERSION = "20251001"
[ドキュメント]
class VcpSpecResourceMdx2Disk(VcpSpecResourceDisk):
"""
サンプルコード
.. code-block:: python
spec = sdk.get_spec("mdx2_disk", "small")
#
# 変更できること
#
# spec.cloud_image = '5fed0361-58f9-41d7-8281-64c9cd8efeb2' # mdxII-Ubuntu-22.04-Server
# spec.num_disks = 1
# spec.type = "tripleo"
# spec.size = 25 # ※スナップショットから作成する場合は、サイズを変更するとインスタンスへのアタッチに失敗する場合あり
# cloud上のタグ設定
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')
"""
version = CCI_VERSION + "+" + BUILD_VERSION
def __init__(self, provider_name, flavor, config_dir):
# flavor から spec を設定
super().__init__(provider_name, flavor, config_dir)
# spec attributes名の設定チェックの回避
super().__setattr__("mdx2_cci_", None)
# credentail情報は、vcp_config から設定
self.mdx2_cci_ = {"cci_version": CCI_VERSION}
# FIXME: テンプレートでは mdx2_disk 等と指定するため、provider_nameが利用できない(vcp_configで_diskの分も定義すれば良いが)
self.mdx2_cci_["user_name"] = self.vcp_config_["mdx2"]["user_name"]
self.mdx2_cci_["password"] = self.vcp_config_["mdx2"]["password"]
# VPNネットワーク名
self.unit_cci_["private_network"] = self.vcp_config_["mdx2"][
"private_network"
]
# flavorから初期化
self.mdx2_cci_["type"] = self.flavor_["type"]
self.mdx2_cci_["size"] = self.flavor_["size"]
self.mdx2_cci_["cloud_image"] = "default"
self.mdx2_cci_["tags"] = {}
def __str__(self):
text = """
========================
{provider_name}
------------------------
{unit_info}""".format(
provider_name=self.unit_cci_["cloud_provider"], unit_info=super().__str__()
)
text += """
size: {size}
type: {type}
cloud_image: {cloud_image}""".format_map(
self.mdx2_cci_
)
text += """
tags: {}
========================""".format(
self.tags_cci_
)
return text
[ドキュメント]
def cci(self, name):
"""
CCI生成
:param name: unit名
:return: CCI文字列
"""
# cloud parameter 情報
my_cci = super().cci(name)
# yaml schema check
self.cci_schema_.validate(self.mdx2_cci_, "mdx2_disk")
# cloud_params
my_cci += """
cloud_provider: mdx2
cloud_params:
cci_version: "{cci_version}"
size: {size}
type: {type}
user_name: "{user_name}"
password: {password}
cloud_image: {cloud_image}""".format_map(
self.mdx2_cci_
)
my_cci += self.cci_tags()
return my_cci
# property: size
@property
def size(self):
"""
MDX2に依存するdisk size (単位:GB)
.. note::
* VCP SDK flavorで設定可能
"""
return self.mdx2_cci_["size"]
@size.setter
def size(self, v):
self.mdx2_cci_["size"] = v
# property: type
@property
def type(self):
"""
MDX2に依存するdisk type
.. note::
* VCP SDK flavorで設定可能
"""
return self.mdx2_cci_["type"]
@type.setter
def type(self, v):
self.mdx2_cci_["type"] = v
# property: cloud_image
@property
def cloud_image(self):
"""
MDX2に依存するAMIのイメージ名
"""
return self.mdx2_cci_["cloud_image"]
@cloud_image.setter
def cloud_image(self, v):
self.mdx2_cci_["cloud_image"] = v
def __setattr__(self, name, value):
"""
spec の attributes に不正な値を設定した場合に例外を発生
:param name: attributes名
:param value: 設定値
"""
if not hasattr(self, name):
raise AttributeError("spec resource has no attributes!! [{}]".format(name))
super().__setattr__(name, value)