+ def add_vnf_conf_param_charm(self):
+ vnfd = self.descriptor.vnfd[0]
+ confparam = vnfd.config_parameter
+
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "mgmt_ip",
+ "description": "Management IP address",
+ "attribute": "../../../mgmt-interface, ip-address",
+ "parameter" : [{
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "ssh-hostname"
+ }]
+ })
+ confparam.config_parameter_source.append(src)
+
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "username",
+ "description": "SSH username",
+ "value": "fedora",
+ "parameter" : [{
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "ssh-username"
+ }]
+ })
+ confparam.config_parameter_source.append(src)
+
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "ssh_key",
+ "description": "SSH private key file",
+ "attribute": "../../../mgmt-interface/ssh-key, private-key-file",
+ "parameter" : [{
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "ssh-private-key"
+ }]
+ })
+ confparam.config_parameter_source.append(src)
+
+ # Check if pong
+ if 'pong_' in self.name:
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "service_ip",
+ "description": "IP on which Pong service is listening",
+ "attribute": "../../../connection-point[name='pong_vnfd/cp0'], ip-address",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "set-server",
+ "config_primitive_parameter_ref": "server-ip"
+ },
+ ]
+ })
+ confparam.config_parameter_source.append(src)
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "service_port",
+ "description": "Port on which server listens for incoming data packets",
+ "value": "5555",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "set-server",
+ "config_primitive_parameter_ref": "server-port"
+ },
+ ]
+ })
+ confparam.config_parameter_source.append(src)
+
+ else:
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "rate",
+ "description": "Rate of packet generation",
+ "value": "5",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "set-rate",
+ "config_primitive_parameter_ref": "rate"
+ },
+ ]
+ })
+ confparam.config_parameter_source.append(src)
+
+ req = confparam.create_config_parameter_request()
+ req.from_dict({
+ "name": "pong_ip",
+ "description": "IP on which Pong service is listening",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "set-server",
+ "config_primitive_parameter_ref": "server-ip"
+ },
+ ]
+ })
+ confparam.config_parameter_request.append(req)
+ req = confparam.create_config_parameter_request()
+ req.from_dict({
+ "name": "pong_port",
+ "description": "Port on which Pong service is listening",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "set-server",
+ "config_primitive_parameter_ref": "server-port"
+ },
+ ]
+ })
+ confparam.config_parameter_request.append(req)
+
+ def add_vnf_conf_param(self):
+ vnfd = self.descriptor.vnfd[0]
+ confparam = vnfd.config_parameter
+
+ def get_params(param):
+ # Check if pong
+ if 'pong_' in self.name:
+ params = [
+ {
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": param
+ },
+ {
+ "config_primitive_name_ref": "start-stop",
+ "config_primitive_parameter_ref": param
+ },
+ ]
+ else:
+ params = [
+ {
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": param
+ },
+ {
+ "config_primitive_name_ref": "set-rate",
+ "config_primitive_parameter_ref": param
+ },
+ {
+ "config_primitive_name_ref": "start-stop",
+ "config_primitive_parameter_ref": param
+ },
+ ]
+ return params
+
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "mgmt_ip",
+ "description": "Management address",
+ "attribute": "../../../mgmt-interface, ip-address",
+ "parameter" : get_params("mgmt_ip")
+ })
+ confparam.config_parameter_source.append(src)
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "mgmt_port",
+ "description": "Management port",
+ "descriptor": "../../../mgmt-interface/port",
+ "parameter" : get_params("mgmt_port")
+ })
+ confparam.config_parameter_source.append(src)
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "username",
+ "description": "Management username",
+ "value": "admin",
+ "parameter" : get_params("username")
+ })
+ confparam.config_parameter_source.append(src)
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "password",
+ "description": "Management password",
+ "value": "admin",
+ "parameter" : get_params("password")
+ })
+ confparam.config_parameter_source.append(src)
+
+ # Check if pong
+ if 'pong_' in self.name:
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "service_ip",
+ "description": "IP on which Pong service is listening",
+ "attribute": "../../../connection-point[name='pong_vnfd/cp0'], ip-address",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "service_ip"
+ },
+ ]
+ })
+ confparam.config_parameter_source.append(src)
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "service_port",
+ "description": "Port on which server listens for incoming data packets",
+ "value": "5555",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "service_port"
+ },
+ ]
+ })
+ confparam.config_parameter_source.append(src)
+
+ else:
+ src = confparam.create_config_parameter_source()
+ src.from_dict({
+ "name": "rate",
+ "description": "Rate of packet generation",
+ "value": "5",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "set-rate",
+ "config_primitive_parameter_ref": "rate"
+ },
+ ]
+ })
+ confparam.config_parameter_source.append(src)
+
+ req = confparam.create_config_parameter_request()
+ req.from_dict({
+ "name": "pong_ip",
+ "description": "IP on which Pong service is listening",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "pong_ip"
+ },
+ ]
+ })
+ confparam.config_parameter_request.append(req)
+ req = confparam.create_config_parameter_request()
+ req.from_dict({
+ "name": "pong_port",
+ "description": "Port on which Pong service is listening",
+ "parameter" : [
+ {
+ "config_primitive_name_ref": "config",
+ "config_primitive_parameter_ref": "pong_port"
+ },
+ ]
+ })
+ confparam.config_parameter_request.append(req)
+
+ def add_ping_vca_config(self):
+ vnfd = self.descriptor.vnfd[0]
+ # Add vnf configuration
+ vnf_config = vnfd.vnf_configuration
+
+ # vnf_config.config_attributes.config_delay = 10
+
+ # Select "script" configuration
+ vnf_config.script.script_type = 'rift'
+
+ # Add config primitive
+ prim = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "config",
+ "parameter": [
+ {"name": "mgmt_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "mgmt_port", "data_type": "INTEGER", "read_only": "true"},
+ {"name": "username", "data_type": "STRING", "read_only": "true"},
+ {"name": "password", "data_type": "STRING", "read_only": "true"},
+ {"name": "pong_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "pong_port", "data_type": "INTEGER","read_only": "true",
+ "default_value": "5555"},
+ ],
+ "user_defined_script": "ping_setup.py",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "set-rate",
+ "parameter": [
+ {"name": "mgmt_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "mgmt_port", "data_type": "INTEGER", "read_only": "true"},
+ {"name": "username", "data_type": "STRING", "read_only": "true"},
+ {"name": "password", "data_type": "STRING", "read_only": "true"},
+ {"name": "rate", "data_type": "INTEGER",
+ "default_value": "5"},
+ ],
+ "user_defined_script": "ping_rate.py",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "start-stop",
+ "parameter": [
+ {"name": "mgmt_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "mgmt_port", "data_type": "INTEGER", "read_only": "true"},
+ {"name": "username", "data_type": "STRING", "read_only": "true"},
+ {"name": "password", "data_type": "STRING", "read_only": "true"},
+ {"name": "start", "data_type": "BOOLEAN",
+ "default_value": "true"}
+ ],
+ "user_defined_script": "ping_start_stop.py",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ # Add initial config primitive
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 1,
+ "config_primitive_ref": "config",
+ }
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 2,
+ "config_primitive_ref": "set-rate",
+ },
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ if self.use_ns_init_conf is False:
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 3,
+ "config_primitive_ref": "start-stop",
+ },
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ def add_pong_vca_config(self):
+ vnfd = self.descriptor.vnfd[0]
+ # Add vnf configuration
+ vnf_config = vnfd.vnf_configuration
+
+ # Select "script" configuration
+ vnf_config.script.script_type = 'rift'
+
+ # Add config primitive
+ prim = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "config",
+ "parameter": [
+ {"name": "mgmt_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "mgmt_port", "data_type": "INTEGER", "read_only": "true"},
+ {"name": "username", "data_type": "STRING", "read_only": "true"},
+ {"name": "password", "data_type": "STRING", "read_only": "true"},
+ {"name": "service_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "service_port", "data_type": "INTEGER", "read_only": "true"},
+ ],
+ "user_defined_script": "pong_setup.py",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "start-stop",
+ "parameter": [
+ {"name": "mgmt_ip", "data_type": "STRING", "read_only": "true"},
+ {"name": "mgmt_port", "data_type": "INTEGER", "read_only": "true"},
+ {"name": "username", "data_type": "STRING", "read_only": "true"},
+ {"name": "password", "data_type": "STRING", "read_only": "true"},
+ {"name": "start", "data_type": "BOOLEAN",
+ "default_value": "true"}
+ ],
+ "user_defined_script": "pong_start_stop.py",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ # Add initial config primitive
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 1,
+ "config_primitive_ref": "config",
+ }
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ if self.use_ns_init_conf is False:
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 2,
+ "config_primitive_ref": "start-stop",
+ },
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ def add_charm_config(self):
+ vnfd = self.descriptor.vnfd[0]
+ # Add vnf configuration
+ vnf_config = vnfd.vnf_configuration
+
+ if 'pong_' in self.name:
+ mode = "pong"
+ else:
+ mode = "ping"
+
+ # Select "script" configuration
+ vnf_config.juju.charm = 'pingpong'
+
+ # Add config primitive
+ vnf_config.create_config_primitive()
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "start",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "stop",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "restart",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "config",
+ "parameter": [
+ {"name": "ssh-hostname", "data_type": "STRING"},
+ {"name": "ssh-username", "data_type": "STRING"},
+ {"name": "ssh-private-key", "data_type": "STRING"},
+ {"name": "mode", "data_type": "STRING",
+ "default_value": "{}".format(mode),
+ "read_only": "true"},
+ ],
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "set-server",
+ "parameter": [
+ {"name": "server-ip", "data_type": "STRING"},
+ {"name": "server-port", "data_type": "INTEGER"},
+ ],
+ })
+ vnf_config.config_primitive.append(prim)
+
+ if mode == 'ping':
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "set-rate",
+ "parameter": [
+ {"name": "rate", "data_type": "INTEGER",
+ "default_value": "5"},
+ ],
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "start-traffic",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ prim = VnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_ConfigPrimitive.from_dict({
+ "name": "stop-traffic",
+ })
+ vnf_config.config_primitive.append(prim)
+
+ # Add initial config primitive
+ vnf_config.create_initial_config_primitive()
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 1,
+ "config_primitive_ref": "config",
+ }
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 2,
+ "config_primitive_ref": "start",
+ }
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 3,
+ "config_primitive_ref": "set-server",
+ },
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ if mode == 'ping':
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 4,
+ "config_primitive_ref": "set-rate",
+ },
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ if self.use_ns_init_conf is False:
+ init_config = RwVnfdYang.YangData_Vnfd_VnfdCatalog_Vnfd_VnfConfiguration_InitialConfigPrimitive.from_dict(
+ {
+ "seq": 5,
+ "config_primitive_ref": "start-traffic",
+ },
+ )
+ vnf_config.initial_config_primitive.append(init_config)
+
+ def compose(self, image_name, vnf_descriptor_message, cloud_init="", cloud_init_file="",
+ endpoint=None, mon_params=[], mon_port=8888, mgmt_port=8888, num_vlr_count=1,
+ num_ivlr_count=1, num_vms=1, image_md5sum=None, mano_ut=False,
+ use_ns_init_conf=False, use_vca_conf=False, use_charm=False, use_static_ip=False,
+ multidisk=None, port_security=None, metadata_vdud=None, use_ipv6=False,
+ use_virtual_ip=False, vnfd_input_params=None, script_input_params=None, explicit_port_seq=False, mgmt_net=True):
+
+ self.mano_ut = mano_ut
+ self.use_ns_init_conf = use_ns_init_conf
+ self.use_vca_conf = use_vca_conf
+ self.use_charm = use_charm
+