vcpsdk.plugins.azure のソースコード

#
# Azure
#
from vcpsdk.plugins.spec import VcpSpecResource
import vcplib.occtr  # VcNodeの型チェックのため

CCI_VERSION = "1.2"
BUILD_VERSION = "20191001"


[ドキュメント] class VcpSpecResourceAzure(VcpSpecResource): """ サンプルコード .. code-block:: python spec = sdk.get_spec("azure", "small") # # 変更できること # # spec.num_nodes = 1 # spec.params_v = ['/opt:/opt'] # spec.params_e = ['USER_NAME=test'] # spec.ip_addresses = ['起動するnodeの静的なIPアドレス'] # Azure 依存パラメータ # https://www.terraform.io/docs/providers/azurerm/index.html # spec.vm_size = 'Standard_LRS' # Standard_LRS|Premium_LRS ... # spec.disk_size_gb = 40 # spec.managed_disk_type = "standard" # standard|io1|gp2|sc1|st1 # 追加で使用するVolume # spec.disks = ['azure-volume-abc'] # or # my_disks = disk_unit.find_nodes() # spec.disks = [my_disks[0]] # VC disk指定 # cloud上のイメージ設定 # spec.cloud_image = 'niivcp-20170616' # cloud上のタグ設定 spec.set_tag('key1', 'value1') spec.set_tag('key2', 'value2') # base containerにssh loginするためのssh公開鍵情報を設定 spec.set_ssh_pubkey('tmp/id_rsa.pub') """ 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__("azure_cci_", None) # credentail情報は、vcp_config から設定 self.azure_cci_ = {"cci_version": CCI_VERSION} self.azure_cci_["subscription_id"] = self.vcp_config_["azure"][ "subscription_id" ] self.azure_cci_["client_id"] = self.vcp_config_["azure"]["client_id"] self.azure_cci_["client_secret"] = self.vcp_config_["azure"]["client_secret"] self.azure_cci_["tenant_id"] = self.vcp_config_["azure"]["tenant_id"] self.unit_cci_["private_network"] = self.vcp_config_["azure"][ "private_network" ] # VPNネットワーク名 # flavorから初期化 self.azure_cci_["vm_size"] = self.flavor_["vm_size"] self.azure_cci_["disk_size_gb"] = self.flavor_["disk_size_gb"] self.azure_cci_["managed_disk_type"] = self.flavor_["managed_disk_type"] # cloud_image self.azure_cci_["cloud_image"] = "default" # 初期化 self.azure_cci_["ip_address_list"] = [] self.azure_cci_["ext_managed_disk"] = [] def __str__(self): text = """ ======================== {provider_name} ------------------------ {unit_info} """.format( provider_name=self.unit_cci_["cloud_provider"], unit_info=super().__str__() ) text += """ vm_size: {vm_size} disk_size_gb: {disk_size_gb} managed_disk_type: {managed_disk_type} ext_managed_disk: {ext_managed_disk} cloud_image: {cloud_image} ip_address_list: {ip_address_list}""".format_map( self.azure_cci_ ) text += """ tags: {} ========================""".format( self.cci_tags() ) return text
[ドキュメント] def cci(self, name): """ CCI生成 :param name: unit名 :return: CCI文字列 """ # yaml schema check self.cci_schema_.validate(self.azure_cci_, "azure") # azure my_cci = super().cci(name) my_cci += """ cloud_provider: azure cloud_params: cci_version: "{cci_version}" vm_size: {vm_size} disk_size_gb: {disk_size_gb} managed_disk_type: {managed_disk_type} cloud_image: {cloud_image} subscription_id: {subscription_id} client_id: {client_id} client_secret: {client_secret} tenant_id: {tenant_id} ip_address_list: {ip_address_list} ext_managed_disk: {ext_managed_disk}""".format_map( self.azure_cci_ ) # cloud tagのcci文字列生成 my_cci += self.cci_tags() return my_cci
# property: vm_size @property def vm_size(self): """ Azureに依存する vm_size .. note:: * VCP SDK flavorで設定可能 """ return self.azure_cci_["vm_size"] @vm_size.setter def vm_size(self, v): self.azure_cci_["vm_size"] = v # property: disk_size_gb @property def disk_size_gb(self): """ Azureに依存する disk_size_gb (単位:GB) .. note:: * VCP SDK flavorで設定可能 """ return self.azure_cci_["disk_size_gb"] @disk_size_gb.setter def disk_size_gb(self, v): self.azure_cci_["disk_size_gb"] = v # property: managed_disk_type @property def managed_disk_type(self): """ Azureに依存する managed_disk_type .. note:: * VCP SDK flavorで設定可能 """ return self.azure_cci_["managed_disk_type"] @managed_disk_type.setter def managed_disk_type(self, v): self.azure_cci_["managed_disk_type"] = v # property: disks @property def disks(self): """ Azureに依存する ext_managed_disk """ return self.azure_cci_["ext_managed_disk"] @disks.setter def disks(self, v): # ext_managed_disk は、/subscriptions/d47388de-3ed7-4...形式 と VcNode の2種類がある volumes = [] for volume in v: if isinstance(volume, vcplib.occtr.VcNode): # VcNode 指定 volume_id = "vcp:{vc_id}:{unit_name}:{disk_id}".format( vc_id=volume.vc.vcid, unit_name=volume.unit.name, disk_id=volume.id ) else: volume_id = volume # /subscriptions/d47388de-3ed7-4...指定 volumes.append(volume_id) self.azure_cci_["ext_managed_disk"] = volumes # property: ip_addresses @property def ip_addresses(self): return self.azure_cci_["ip_address_list"] @ip_addresses.setter def ip_addresses(self, v): """ 静的ip_address_list .. note:: `num_nodes` と `ip_addresses` は最後にセットされたほうが有効になる。 """ # num_nodesを上書きする if 0 < len(v): self.unit_cci_["num_nodes"] = len(v) self.azure_cci_["ip_address_list"] = v # # Azure CloudImage # # property: cloud_image @property def cloud_image(self): """ Azureに依存する cloud_image """ return self.azure_cci_["cloud_image"] @cloud_image.setter def cloud_image(self, v): self.azure_cci_["cloud_image"] = v @VcpSpecResource.num_nodes.setter def num_nodes(self, v): """ 起動するnodeの個数 .. note:: `num_nodes` と `ip_addresses` は最後にセットされたほうが有効になる。 """ self.unit_cci_["num_nodes"] = v self.azure_cci_["ip_address_list"] = [] 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)