#
# Onpremises
#
from vcpsdk.plugins.spec import VcpSpecResource
CCI_VERSION = "1.0"
BUILD_VERSION = "20190408"
[ドキュメント]
class VcpSpecResourceOnpremises(VcpSpecResource):
"""
サンプルコード
.. code-block:: python
spec = sdk.get_spec("onpremises", "default")
#
# 変更できること
#
spec.network_if = 'eth9'
spec.user_name = 'ubuntu' # ssh login user
spec.ip_addresses = ['起動するnodeの静的なIPアドレス']
# 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__("onpresmies_cci_", None)
# クレデンシャル情報は、vcp_config から設定
self.onpresmies_cci_ = {
"cci_version": CCI_VERSION,
"ip_address_list": [],
"network_if": None,
"user_name": None,
}
def __str__(self):
text = """
========================
{provider_name}
------------------------
{unit_info}
""".format(
provider_name=self.unit_cci_["cloud_provider"], unit_info=super().__str__()
)
text += """
user_name: {user_name}
network_if: {network_if}
ip_address_list: {ip_address_list}
========================""".format_map(
self.onpresmies_cci_
)
return text
# build cci from property
[ドキュメント]
def cci(self, name):
"""
CCI生成
:param name: unit名
:return: CCI文字列
"""
my_cci = super().cci(name)
my_cci += """
cloud_provider: onpremises
cloud_params:
cci_version: "{cci_version}"
user_name: {user_name}
ip_address_list: {ip_address_list}
network_if: {network_if}""".format_map(
self.onpresmies_cci_
)
return my_cci
# property: network_if
@property
def network_if(self):
"""
onpremisesに依存する network_if
"""
return self.onpresmies_cci_["network_if"]
@network_if.setter
def network_if(self, v):
self.onpresmies_cci_["network_if"] = v
# property: user_name
@property
def user_name(self):
"""
onpremisesに依存する ssh login名
"""
return self.onpresmies_cci_["user_name"]
@user_name.setter
def user_name(self, v):
self.onpresmies_cci_["user_name"] = v
# property: ip_addresses
@property
def ip_addresses(self):
"""
onpremisesに依存する ip_address_list
"""
return self.onpresmies_cci_["ip_address_list"]
@ip_addresses.setter
def ip_addresses(self, v):
self.onpresmies_cci_["ip_address_list"] = 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)