#
# Sakura Disk
#
from vcpsdk.plugins.spec_disk import VcpSpecResourceDisk
CCI_VERSION = "1.0"
BUILD_VERSION = "20190930"
[ドキュメント]
class VcpSpecResourceSakuraDisk(VcpSpecResourceDisk):
"""
サンプルコード
.. code-block:: python
spec = sdk.get_spec("sakura_disk", "small")
#
# 変更できること
#
# spec.num_disks = 1
# さくらのクラウド依存
# https://sacloud.github.io/terraform-provider-sakuracloud/
# spec.cloud_image = 'archive-001'
# spec.sakuracloud_disk_plan = "ssd" # ssd/hdd
# spec.sakuracloud_disk_size = 40 # 20GB,40GB,100GB,250GB,500GB,1TB
"""
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__("sakura_cci_", None)
# credentail情報は、vcp_config から設定
self.sakura_cci_ = {"cci_version": CCI_VERSION}
self.sakura_cci_["secret"] = self.vcp_config_["sakura"]["secret"]
self.sakura_cci_["token"] = self.vcp_config_["sakura"]["token"]
# flavorから初期化
self.sakura_cci_["sakuracloud_disk_plan"] = self.flavor_[
"sakuracloud_disk_plan"
]
self.sakura_cci_["sakuracloud_disk_size"] = self.flavor_[
"sakuracloud_disk_size"
]
self.sakura_cci_["cloud_image"] = "default"
def __str__(self):
text = """
========================
{provider_name}
------------------------
{unit_info}""".format(
provider_name=self.unit_cci_["cloud_provider"], unit_info=super().__str__()
)
text += """
sakuracloud_disk_plan: {sakuracloud_disk_plan}
sakuracloud_disk_size: {sakuracloud_disk_size}
cloud_image: {cloud_image}""".format_map(
self.sakura_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.sakura_cci_, "sakura_disk")
# cloud_params
my_cci += """
cloud_provider: sakura
cloud_params:
cci_version: "{cci_version}"
sakuracloud_disk_plan: {sakuracloud_disk_plan}
sakuracloud_disk_size: {sakuracloud_disk_size}
cloud_image: {cloud_image}
secret: {secret}
token: {token}""".format_map(
self.sakura_cci_
)
# cloud tagのcci文字列生成
my_cci += self.cci_tags()
return my_cci
# property: sakuracloud_disk_size
@property
def sakuracloud_disk_size(self):
"""
Sakuraに依存するdisk size
.. note::
* VCP SDK flavorで設定可能
"""
return self.sakura_cci_["sakuracloud_disk_size"]
@sakuracloud_disk_size.setter
def sakuracloud_disk_size(self, v):
"""
指定可能なデスクサイズ
- 20GB,40GB,100GB,250GB,500GB,1TB
"""
availables = [20, 40, 100, 250, 500, 1000]
if v in availables:
self.sakura_cci_["sakuracloud_disk_size"] = v
else:
raise AttributeError(
"bad disk size [{}], availables {}".format(v, availables)
)
# property: sakuracloud_disk_plan
@property
def sakuracloud_disk_plan(self):
"""
Sakuraに依存するdisk type
.. note::
* VCP SDK flavorで設定可能
"""
return self.sakura_cci_["sakuracloud_disk_plan"]
@sakuracloud_disk_plan.setter
def sakuracloud_disk_plan(self, v):
self.sakura_cci_["sakuracloud_disk_plan"] = v
# property: cloud_image
@property
def cloud_image(self):
"""
Sakuraに依存するアーカイブのイメージ名
"""
return self.sakura_cci_["cloud_image"]
@cloud_image.setter
def cloud_image(self, v):
self.sakura_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)