workaround for Tosca bug
diff --git a/xos/tosca/custom_types/xos.yaml b/xos/tosca/custom_types/xos.yaml
index 044f281..b102b2a 100644
--- a/xos/tosca/custom_types/xos.yaml
+++ b/xos/tosca/custom_types/xos.yaml
@@ -1,269 +1 @@
-tosca_definitions_version: tosca_simple_yaml_1_0
-
-node_types:
- # I wanted to make this the base of all XOS node types, but doing so throws
- # InvalidTypeError: Type "tosca.nodes.XOS" is not a valid type
- tosca.nodes.XOS:
- derived_from: tosca.nodes.Root
- properties:
- no-delete:
- type: boolean
- default: false
- description: do not allow Tosca to delete this object
- no-create:
- type: boolean
- default: false
- description: do not allow Tosca to create this object
-
- tosca.nodes.Service:
- derived_from: tosca.nodes.Root
- capabilities:
- scalable:
- type: tosca.capabilities.Scalable
- service:
- type: tosca.capabilities.xos.Service
-# properties:
-# persistent:
-# type: boolean
-# required: false
-# default: false
-# description: prevent this resource from being deleted
-
- tosca.nodes.User:
- derived_from: tosca.nodes.Root
-
- capabilities:
- user:
- type: tosca.capabilities.xos.User
-
- properties:
- password:
- type: string
- required: true
- firstname:
- type: string
- required: true
- lastname:
- type: string
- required: true
- phone:
- type: string
- required: false
- user_url:
- type: string
- required: false
- public_key:
- type: string
- required: false
- is_active:
- type: boolean
- default: true
- is_admin:
- type: boolean
- default: false
- login_page:
- type: string
- required: false
-
- tosca.nodes.NetworkTemplate:
- derived_from: tosca.nodes.Root
-
- capabilities:
- network_template:
- type: tosca.capabilities.xos.NetworkTemplate
-
- properties:
- visibility:
- type: string
- default: private
- translation:
- type: string
- default: none
- shared_network_name:
- type: string
- required: false
- shared_network_id:
- type: string
- required: false
- topology_kind:
- type: string
- default: BigSwitch
- controller_kind:
- type: string
- required: false
-
- tosca.nodes.XOSNetwork:
- derived_from: tosca.nodes.Root
-
- capabilities:
- network:
- type: tosca.capabilities.xos.Network
-
- properties:
- ports:
- type: string
- required: false
- labels:
- type: string
- required: false
- permit_all_slices:
- type: boolean
- default: false
- permitted_slices:
- type: string
- required: false
-
- tosca.nodes.Deployment:
- derived_from: tosca.nodes.Root
- capabilities:
- deployment:
- type: tosca.capabilities.xos.Deployment
-
- tosca.nodes.Controller:
- derived_from: tosca.nodes.Root
- capabilities:
- controller:
- type: tosca.capabilities.xos.Controller
- properties:
- backend_type:
- type: string
- required: false
- version:
- type: string
- required: false
- auth_url:
- type: string
- required: false
- admin_user:
- type: string
- required: false
- admin_password:
- type: string
- required: false
- admin_tenant:
- type: string
- required: false
- domain:
- type: string
- required: false
-
- tosca.nodes.Site:
- derived_from: tosca.nodes.Root
- capabilities:
- site:
- type: tosca.capabilities.xos.Site
- properties:
- display_name:
- type: string
- required: false
- description: name of the site
- site_url:
- type: string
- required: false
- enabled:
- type: boolean
- default: true
- hosts_nodes:
- type: boolean
- default: true
- hosts_users:
- type: boolean
- default: true
- is_public:
- type: boolean
- default: true
- # location, longitude, latitude
-
- tosca.nodes.Slice:
- derived_from: tosca.nodes.Root
- capability:
- slice:
- type: tosca.capabilities.xos.Slice
-
- tosca.relationships.MemberOfSlice:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Slice ]
-
- tosca.relationships.MemberOfService:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Service ]
-
- tosca.relationships.MemberOfSite:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Site ]
-
- tosca.relationships.TenantOfService:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Service ]
-
- tosca.relationships.ControllerDeployment:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Deployment ]
-
- tosca.relationships SiteDeployment:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Deployment ]
-
- tosca.relationships.UsesController:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Controller ]
-
- tosca.relationships.ConnectsToNetwork:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Network ]
-
-# tosca.relationships.OwnsNetwork:
-# derived_from: tosca.relationships.Root
-# valid_target_types: [ tosca.capabilities.xos.Network ]
-
- tosca.relationships.UsesNetworkTemplate:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.NetworkTemplate ]
-
- tosca.relationships.AdminPrivilege:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Slice, tosca.capabiltys.xos.Site ]
-
- tosca.relationships.AccessPrivilege:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabilities.xos.Slice, tosca.capabiltys.xos.Site ]
-
- tosca.relationships.PIPrivilege:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabiltys.xos.Site ]
-
- tosca.relationships.TechPrivilege:
- derived_from: tosca.relationships.Root
- valid_target_types: [ tosca.capabiltys.xos.Site ]
-
- tosca.capabilities.xos.Service:
- derived_from: tosca.capabilities.Root
- description: An XOS Service
-
- tosca.capabilities.xos.Deployment:
- derived_from: tosca.capabilities.Root
- description: An XOS Deployment
-
- tosca.capabilities.xos.Controller:
- derived_from: tosca.capabilities.Root
- description: An XOS Controller
-
- tosca.capabilities.xos.Site:
- derived_from: tosca.capabilities.Root
- description: An XOS Site
-
- tosca.capabilities.xos.Slice:
- derived_from: tosca.capabilities.Root
- description: An XOS Slice
-
- tosca.capabilities.xos.NetworkTemplate:
- derived_from: tosca.capabilities.Root
- description: An XOS network template
-
- tosca.capabilities.xos.Network:
- derived_from: tosca.capabilities.Root
- description: An XOS network
-
- tosca.capabilities.xos.User:
- derived_from: tosca.capabilities.Root
- description: An XOS user
+# this file intentionally left blank
diff --git a/xos/tosca/definitions/TOSCA_definition_1_0.yaml b/xos/tosca/definitions/TOSCA_definition_1_0.yaml
new file mode 100644
index 0000000..c21f0bc
--- /dev/null
+++ b/xos/tosca/definitions/TOSCA_definition_1_0.yaml
@@ -0,0 +1,721 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+##########################################################################
+# The content of this file reflects TOSCA Simple Profile in YAML version
+# 1.0.0. It describes the definition for TOSCA types including Node Type,
+# Relationship Type, Capability Type and Interfaces.
+##########################################################################
+tosca_definitions_version: tosca_simple_yaml_1_0
+
+##########################################################################
+# Node Type.
+# A Node Type is a reusable entity that defines the type of one or more
+# Node Templates.
+##########################################################################
+tosca.nodes.Root:
+ description: >
+ The TOSCA root node all other TOSCA base node types derive from.
+ attributes:
+ tosca_id:
+ type: string
+ tosca_name:
+ type: string
+ state:
+ type: string
+ capabilities:
+ feature:
+ type: tosca.capabilities.Node
+ requirements:
+ - dependency:
+ capability: tosca.capabilities.Node
+ node: tosca.nodes.Root
+ relationship: tosca.relationships.DependsOn
+ occurrences: [ 0, UNBOUNDED ]
+ interfaces:
+ Standard:
+ type: tosca.interfaces.node.lifecycle.Standard
+
+tosca.nodes.Compute:
+ derived_from: tosca.nodes.Root
+ attributes:
+ private_address:
+ type: string
+ public_address:
+ type: string
+ capabilities:
+ host:
+ type: tosca.capabilities.Container
+ binding:
+ type: tosca.capabilities.network.Bindable
+ os:
+ type: tosca.capabilities.OperatingSystem
+ scalable:
+ type: tosca.capabilities.Scalable
+ requirements:
+ - local_storage:
+ capability: tosca.capabilities.Attachment
+ node: tosca.nodes.BlockStorage
+ relationship: tosca.relationships.AttachesTo
+ occurrences: [0, UNBOUNDED]
+
+tosca.nodes.SoftwareComponent:
+ derived_from: tosca.nodes.Root
+ properties:
+ # domain-specific software component version
+ component_version:
+ type: version
+ required: false
+ description: >
+ Software component version.
+ admin_credential:
+ type: tosca.datatypes.Credential
+ required: false
+ requirements:
+ - host:
+ capability: tosca.capabilities.Container
+ node: tosca.nodes.Compute
+ relationship: tosca.relationships.HostedOn
+
+tosca.nodes.DBMS:
+ derived_from: tosca.nodes.SoftwareComponent
+ properties:
+ port:
+ required: no
+ type: integer
+ description: >
+ The port the DBMS service will listen to for data and requests.
+ root_password:
+ required: no
+ type: string
+ description: >
+ The root password for the DBMS service.
+ capabilities:
+ host:
+ type: tosca.capabilities.Container
+ valid_source_types: [tosca.nodes.Database]
+
+tosca.nodes.Database:
+ derived_from: tosca.nodes.Root
+ properties:
+ user:
+ required: no
+ type: string
+ description: >
+ User account name for DB administration
+ name:
+ required: no
+ type: string
+ description: >
+ The name of the database.
+ password:
+ required: no
+ type: string
+ description: >
+ The password for the DB user account
+ requirements:
+ - host:
+ capability: tosca.capabilities.Container
+ node: tosca.nodes.DBMS
+ relationship: tosca.relationships.HostedOn
+ capabilities:
+ database_endpoint:
+ type: tosca.capabilities.Endpoint.Database
+
+tosca.nodes.WebServer:
+ derived_from: tosca.nodes.SoftwareComponent
+ capabilities:
+ data_endpoint:
+ type: tosca.capabilities.Endpoint
+ admin_endpoint:
+ type: tosca.capabilities.Endpoint.Admin
+ host:
+ type: tosca.capabilities.Container
+ valid_source_types: [tosca.nodes.WebApplication]
+
+tosca.nodes.WebApplication:
+ derived_from: tosca.nodes.Root
+ properties:
+ context_root:
+ type: string
+ required: false
+ requirements:
+ - host:
+ capability: tosca.capabilities.Container
+ node: tosca.nodes.WebServer
+ relationship: tosca.relationships.HostedOn
+ capabilities:
+ app_endpoint:
+ type: tosca.capabilities.Endpoint
+
+tosca.nodes.BlockStorage:
+ derived_from: tosca.nodes.Root
+ properties:
+ size:
+ type: integer
+ constraints:
+ - greater_or_equal: 1
+ volume_id:
+ type: string
+ required: false
+ snapshot_id:
+ type: string
+ required: false
+ attributes:
+ volume_id:
+ type: string
+ capabilities:
+ attachment:
+ type: tosca.capabilities.Attachment
+
+tosca.nodes.network.Network:
+ derived_from: tosca.nodes.Root
+ description: >
+ The TOSCA Network node represents a simple, logical network service.
+ properties:
+ ip_version:
+ type: integer
+ required: no
+ default: 4
+ constraints:
+ - valid_values: [ 4, 6 ]
+ description: >
+ The IP version of the requested network. Valid values are 4 for ipv4
+ or 6 for ipv6.
+ cidr:
+ type: string
+ required: no
+ description: >
+ The cidr block of the requested network.
+ start_ip:
+ type: string
+ required: no
+ description: >
+ The IP address to be used as the start of a pool of addresses within
+ the full IP range derived from the cidr block.
+ end_ip:
+ type: string
+ required: no
+ description: >
+ The IP address to be used as the end of a pool of addresses within
+ the full IP range derived from the cidr block.
+ gateway_ip:
+ type: string
+ required: no
+ description: >
+ The gateway IP address.
+ network_name:
+ type: string
+ required: no
+ description: >
+ An identifier that represents an existing Network instance in the
+ underlying cloud infrastructure or can be used as the name of the
+ newly created network. If network_name is provided and no other
+ properties are provided (with exception of network_id), then an
+ existing network instance will be used. If network_name is provided
+ alongside with more properties then a new network with this name will
+ be created.
+ network_id:
+ type: string
+ required: no
+ description: >
+ An identifier that represents an existing Network instance in the
+ underlying cloud infrastructure. This property is mutually exclusive
+ with all other properties except network_name. This can be used alone
+ or together with network_name to identify an existing network.
+ segmentation_id:
+ type: string
+ required: no
+ description: >
+ A segmentation identifier in the underlying cloud infrastructure.
+ E.g. VLAN ID, GRE tunnel ID, etc..
+ dhcp_enabled:
+ type: boolean
+ required: no
+ default: true
+ description: >
+ Indicates should DHCP service be enabled on the network or not.
+ capabilities:
+ link:
+ type: tosca.capabilities.network.Linkable
+
+tosca.nodes.network.Port:
+ derived_from: tosca.nodes.Root
+ description: >
+ The TOSCA Port node represents a logical entity that associates between
+ Compute and Network normative types. The Port node type effectively
+ represents a single virtual NIC on the Compute node instance.
+ properties:
+ ip_address:
+ type: string
+ required: no
+ description: >
+ Allow the user to set a static IP.
+ order:
+ type: integer
+ required: no
+ default: 0
+ constraints:
+ - greater_or_equal: 0
+ description: >
+ The order of the NIC on the compute instance (e.g. eth2).
+ is_default:
+ type: boolean
+ required: no
+ default: false
+ description: >
+ If is_default=true this port will be used for the default gateway
+ route. Only one port that is associated to single compute node can
+ set as is_default=true.
+ ip_range_start:
+ type: string
+ required: no
+ description: >
+ Defines the starting IP of a range to be allocated for the compute
+ instances that are associated with this Port.
+ ip_range_end:
+ type: string
+ required: no
+ description: >
+ Defines the ending IP of a range to be allocated for the compute
+ instances that are associated with this Port.
+ attributes:
+ ip_address:
+ type: string
+ requirements:
+ - binding:
+ description: >
+ Binding requirement expresses the relationship between Port and
+ Compute nodes. Effectevely it indicates that the Port will be
+ attached to specific Compute node instance
+ capability: tosca.capabilities.network.Bindable
+ relationship: tosca.relationships.network.BindsTo
+ - link:
+ description: >
+ Link requirement expresses the relationship between Port and Network
+ nodes. It indicates which network this port will connect to.
+ capability: tosca.capabilities.network.Linkable
+ relationship: tosca.relationships.network.LinksTo
+
+tosca.nodes.ObjectStorage:
+ derived_from: tosca.nodes.Root
+ description: >
+ The TOSCA ObjectStorage node represents storage that provides the ability
+ to store data as objects (or BLOBs of data) without consideration for the
+ underlying filesystem or devices
+ properties:
+ name:
+ type: string
+ required: yes
+ description: >
+ The logical name of the object store (or container).
+ size:
+ type: scalar-unit.size
+ required: no
+ constraints:
+ - greater_or_equal: 0 GB
+ description: >
+ The requested initial storage size.
+ maxsize:
+ type: scalar-unit.size
+ required: no
+ constraints:
+ - greater_or_equal: 0 GB
+ description: >
+ The requested maximum storage size.
+ capabilities:
+ storage_endpoint:
+ type: tosca.capabilities.Endpoint
+
+##########################################################################
+# Relationship Type.
+# A Relationship Type is a reusable entity that defines the type of one
+# or more relationships between Node Types or Node Templates.
+##########################################################################
+tosca.relationships.Root:
+ description: >
+ The TOSCA root Relationship Type all other TOSCA base Relationship Types
+ derive from.
+ attributes:
+ tosca_id:
+ type: string
+ tosca_name:
+ type: string
+ interfaces:
+ Configure:
+ type: tosca.interfaces.relationship.Configure
+
+tosca.relationships.DependsOn:
+ derived_from: tosca.relationships.Root
+
+tosca.relationships.HostedOn:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.Container ]
+
+tosca.relationships.ConnectsTo:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.Endpoint ]
+ credential:
+ type: tosca.datatypes.Credential
+ required: false
+
+tosca.relationships.AttachesTo:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.Attachment ]
+ properties:
+ location:
+ required: true
+ type: string
+ constraints:
+ - min_length: 1
+ device:
+ required: false
+ type: string
+
+tosca.relationships.network.LinksTo:
+ derived_from: tosca.relationships.DependsOn
+ valid_target_types: [ tosca.capabilities.network.Linkable ]
+
+tosca.relationships.network.BindsTo:
+ derived_from: tosca.relationships.DependsOn
+ valid_target_types: [ tosca.capabilities.network.Bindable ]
+
+##########################################################################
+# Capability Type.
+# A Capability Type is a reusable entity that describes a kind of
+# capability that a Node Type can declare to expose.
+##########################################################################
+tosca.capabilities.Root:
+ description: >
+ The TOSCA root Capability Type all other TOSCA base Capability Types
+ derive from.
+
+tosca.capabilities.Node:
+ derived_from: tosca.capabilities.Root
+
+tosca.capabilities.Container:
+ derived_from: tosca.capabilities.Root
+ properties:
+ num_cpus:
+ required: no
+ type: integer
+ constraints:
+ - greater_or_equal: 1
+ cpu_frequency:
+ required: no
+ type: scalar-unit.frequency
+ constraints:
+ - greater_or_equal: 0.1 GHz
+ disk_size:
+ required: no
+ type: scalar-unit.size
+ constraints:
+ - greater_or_equal: 0 MB
+ mem_size:
+ required: no
+ type: scalar-unit.size
+ constraints:
+ - greater_or_equal: 0 MB
+
+tosca.capabilities.Endpoint:
+ derived_from: tosca.capabilities.Root
+ properties:
+ protocol:
+ type: string
+ default: tcp
+ port:
+ type: tosca.datatypes.network.PortDef
+ required: false
+ secure:
+ type: boolean
+ default: false
+ url_path:
+ type: string
+ required: false
+ port_name:
+ type: string
+ required: false
+ network_name:
+ type: string
+ required: false
+ initiator:
+ type: string
+ default: source
+ constraints:
+ - valid_values: [source, target, peer]
+ ports:
+ type: map
+ required: false
+ constraints:
+ - min_length: 1
+ entry_schema:
+ type: tosca.datatypes.network.PortDef
+ attributes:
+ public_address:
+ type: string
+ private_address:
+ type: string
+
+tosca.capabilities.Endpoint.Admin:
+ derived_from: tosca.capabilities.Endpoint
+ properties:
+ secure: true
+
+tosca.capabilities.Scalable:
+ derived_from: tosca.capabilities.Root
+ properties:
+ min_instances:
+ type: integer
+ required: yes
+ default: 1
+ description: >
+ This property is used to indicate the minimum number of instances
+ that should be created for the associated TOSCA Node Template by
+ a TOSCA orchestrator.
+ max_instances:
+ type: integer
+ required: yes
+ default: 1
+ description: >
+ This property is used to indicate the maximum number of instances
+ that should be created for the associated TOSCA Node Template by
+ a TOSCA orchestrator.
+ default_instances:
+ type: integer
+ required: no
+ description: >
+ An optional property that indicates the requested default number
+ of instances that should be the starting number of instances a
+ TOSCA orchestrator should attempt to allocate.
+ The value for this property MUST be in the range between the values
+ set for min_instances and max_instances properties.
+
+tosca.capabilities.Endpoint.Database:
+ derived_from: tosca.capabilities.Endpoint
+
+tosca.capabilities.Attachment:
+ derived_from: tosca.capabilities.Root
+
+tosca.capabilities.network.Linkable:
+ derived_from: tosca.capabilities.Root
+ description: >
+ A node type that includes the Linkable capability indicates that it can
+ be pointed by tosca.relationships.network.LinksTo relationship type, which
+ represents an association relationship between Port and Network node types.
+
+tosca.capabilities.network.Bindable:
+ derived_from: tosca.capabilities.Root
+ description: >
+ A node type that includes the Bindable capability indicates that it can
+ be pointed by tosca.relationships.network.BindsTo relationship type, which
+ represents a network association relationship between Port and Compute node
+ types.
+
+tosca.capabilities.OperatingSystem:
+ derived_from: tosca.capabilities.Root
+ properties:
+ architecture:
+ required: yes
+ default: x86_64
+ type: string
+ description: >
+ The host Operating System (OS) architecture.
+ type:
+ required: yes
+ type: string
+ description: >
+ The host Operating System (OS) type.
+ distribution:
+ required: no
+ type: string
+ description: >
+ The host Operating System (OS) distribution. Examples of valid values
+ for an “type” of “Linux” would include:
+ debian, fedora, rhel and ubuntu.
+ version:
+ required: no
+ type: string
+ description: >
+ The host Operating System version.
+
+##########################################################################
+ # Interfaces Type.
+ # The Interfaces element describes a list of one or more interface
+ # definitions for a modelable entity (e.g., a Node or Relationship Type)
+ # as defined within the TOSCA Simple Profile specification.
+##########################################################################
+tosca.interfaces.node.lifecycle.Standard:
+ create:
+ description: Standard lifecycle create operation.
+ configure:
+ description: Standard lifecycle configure operation.
+ start:
+ description: Standard lifecycle start operation.
+ stop:
+ description: Standard lifecycle stop operation.
+ delete:
+ description: Standard lifecycle delete operation.
+
+tosca.interfaces.relationship.Configure:
+ pre_configure_source:
+ description: Operation to pre-configure the source endpoint.
+ pre_configure_target:
+ description: Operation to pre-configure the target endpoint.
+ post_configure_source:
+ description: Operation to post-configure the source endpoint.
+ post_configure_target:
+ description: Operation to post-configure the target endpoint.
+ add_target:
+ description: Operation to add a target node.
+ remove_target:
+ description: Operation to remove a target node.
+ add_source: >
+ description: Operation to notify the target node of a source node which
+ is now available via a relationship.
+ description:
+ target_changed: >
+ description: Operation to notify source some property or attribute of the
+ target changed
+
+##########################################################################
+ # Data Type.
+ # A Datatype is a complex data type declaration which contains other
+ # complex or simple data types.
+##########################################################################
+tosca.datatypes.network.NetworkInfo:
+ properties:
+ network_name:
+ type: string
+ network_id:
+ type: string
+ addresses:
+ type: list
+ entry_schema:
+ type: string
+
+tosca.datatypes.network.PortInfo:
+ properties:
+ port_name:
+ type: string
+ port_id:
+ type: string
+ network_id:
+ type: string
+ mac_address:
+ type: string
+ addresses:
+ type: list
+ entry_schema:
+ type: string
+
+tosca.datatypes.network.PortDef:
+ type: integer
+ constraints:
+ - in_range: [ 1, 65535 ]
+
+tosca.datatypes.network.PortSpec:
+ properties:
+ protocol:
+ type: string
+ required: true
+ default: tcp
+ constraints:
+ - valid_values: [ udp, tcp, igmp ]
+ target:
+ type: list
+ entry_schema:
+ type: PortDef
+ target_range:
+ type: range
+ constraints:
+ - in_range: [ 1, 65535 ]
+ source:
+ type: list
+ entry_schema:
+ type: PortDef
+ source_range:
+ type: range
+ constraints:
+ - in_range: [ 1, 65535 ]
+
+tosca.datatypes.Credential:
+ properties:
+ protocol:
+ type: string
+ token_type:
+ type: string
+ token:
+ type: string
+ keys:
+ type: map
+ entry_schema:
+ type: string
+ user:
+ type: string
+ required: false
+
+##########################################################################
+ # Artifact Type.
+ # An Artifact Type is a reusable entity that defines the type of one or more
+ # files which Node Types or Node Templates can have dependent relationships
+ # and used during operations such as during installation or deployment.
+##########################################################################
+tosca.artifacts.Root:
+ description: >
+ The TOSCA Artifact Type all other TOSCA Artifact Types derive from
+ properties:
+ version: version
+
+tosca.artifacts.File:
+ derived_from: tosca.artifacts.Root
+
+tosca.artifacts.Deployment:
+ derived_from: tosca.artifacts.Root
+ description: TOSCA base type for deployment artifacts
+
+tosca.artifacts.Deployment.Image:
+ derived_from: tosca.artifacts.Deployment
+
+tosca.artifacts.Deployment.Image.VM:
+ derived_from: tosca.artifacts.Deployment.Image
+
+tosca.artifacts.Implementation:
+ derived_from: tosca.artifacts.Root
+ description: TOSCA base type for implementation artifacts
+
+tosca.artifacts.impl.Bash:
+ derived_from: tosca.artifacts.Implementation
+ description: Script artifact for the Unix Bash shell
+ mime_type: application/x-sh
+ file_ext: [ sh ]
+
+tosca.artifacts.impl.Python:
+ derived_from: tosca.artifacts.Implementation
+ description: Artifact for the interpreted Python language
+ mime_type: application/x-python
+ file_ext: [ py ]
+
+tosca.artifacts.Deployment.Image.Container.Docker:
+ derived_from: tosca.artifacts.Deployment.Image
+ description: Docker container image
+
+tosca.artifacts.Deployment.Image.VM.ISO:
+ derived_from: tosca.artifacts.Deployment.Image
+ description: Virtual Machine (VM) image in ISO disk format
+ mime_type: application/octet-stream
+ file_ext: [ iso ]
+
+tosca.artifacts.Deployment.Image.VM.QCOW2:
+ derived_from: tosca.artifacts.Deployment.Image
+ description: Virtual Machine (VM) image in QCOW v2 standard disk format
+ mime_type: application/octet-stream
+ file_ext: [ qcow2 ]
diff --git a/xos/tosca/definitions/xos.yaml b/xos/tosca/definitions/xos.yaml
new file mode 100644
index 0000000..2651739
--- /dev/null
+++ b/xos/tosca/definitions/xos.yaml
@@ -0,0 +1,276 @@
+# XXX for some reason, we can't use 'derived_from' to derive from a type that's
+# defined in an import. I think this is probably a bug in the Tosca
+# implementation. For now, we'll just concatenate the 1.0 definition yaml with
+# this file and use that for the definition.
+#
+# When the bug is fixed, go back to making this an import.
+
+#tosca_definitions_version: tosca_simple_yaml_1_0
+
+#node_types:
+
+tosca.nodes.XOS:
+ derived_from: tosca.nodes.Root
+ properties:
+ no-delete:
+ type: boolean
+ default: false
+ description: do not allow Tosca to delete this object
+ no-create:
+ type: boolean
+ default: false
+ description: do not allow Tosca to create this object
+
+tosca.nodes.Service:
+ derived_from: tosca.nodes.Root
+ capabilities:
+ scalable:
+ type: tosca.capabilities.Scalable
+ service:
+ type: tosca.capabilities.xos.Service
+ properties:
+ view_url:
+ type: string
+ required: false
+
+tosca.nodes.VcpeService:
+ derived_from: tosca.nodes.Service
+
+tosca.nodes.User:
+ derived_from: tosca.nodes.Root
+
+ capabilities:
+ user:
+ type: tosca.capabilities.xos.User
+
+ properties:
+ password:
+ type: string
+ required: true
+ firstname:
+ type: string
+ required: true
+ lastname:
+ type: string
+ required: true
+ phone:
+ type: string
+ required: false
+ user_url:
+ type: string
+ required: false
+ public_key:
+ type: string
+ required: false
+ is_active:
+ type: boolean
+ default: true
+ is_admin:
+ type: boolean
+ default: false
+ login_page:
+ type: string
+ required: false
+
+tosca.nodes.NetworkTemplate:
+ derived_from: tosca.nodes.Root
+
+ capabilities:
+ network_template:
+ type: tosca.capabilities.xos.NetworkTemplate
+
+ properties:
+ visibility:
+ type: string
+ default: private
+ translation:
+ type: string
+ default: none
+ shared_network_name:
+ type: string
+ required: false
+ shared_network_id:
+ type: string
+ required: false
+ topology_kind:
+ type: string
+ default: BigSwitch
+ controller_kind:
+ type: string
+ required: false
+
+tosca.nodes.XOSNetwork:
+ derived_from: tosca.nodes.Root
+
+ capabilities:
+ network:
+ type: tosca.capabilities.xos.Network
+
+ properties:
+ ports:
+ type: string
+ required: false
+ labels:
+ type: string
+ required: false
+ permit_all_slices:
+ type: boolean
+ default: false
+ permitted_slices:
+ type: string
+ required: false
+
+tosca.nodes.Deployment:
+ derived_from: tosca.nodes.Root
+ capabilities:
+ deployment:
+ type: tosca.capabilities.xos.Deployment
+
+tosca.nodes.Controller:
+ derived_from: tosca.nodes.Root
+ capabilities:
+ controller:
+ type: tosca.capabilities.xos.Controller
+ properties:
+ backend_type:
+ type: string
+ required: false
+ version:
+ type: string
+ required: false
+ auth_url:
+ type: string
+ required: false
+ admin_user:
+ type: string
+ required: false
+ admin_password:
+ type: string
+ required: false
+ admin_tenant:
+ type: string
+ required: false
+ domain:
+ type: string
+ required: false
+
+tosca.nodes.Site:
+ derived_from: tosca.nodes.Root
+ capabilities:
+ site:
+ type: tosca.capabilities.xos.Site
+ properties:
+ display_name:
+ type: string
+ required: false
+ description: name of the site
+ site_url:
+ type: string
+ required: false
+ enabled:
+ type: boolean
+ default: true
+ hosts_nodes:
+ type: boolean
+ default: true
+ hosts_users:
+ type: boolean
+ default: true
+ is_public:
+ type: boolean
+ default: true
+ # location, longitude, latitude
+
+tosca.nodes.Slice:
+ derived_from: tosca.nodes.Root
+ capability:
+ slice:
+ type: tosca.capabilities.xos.Slice
+
+tosca.relationships.MemberOfSlice:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Slice ]
+
+tosca.relationships.MemberOfService:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Service ]
+
+tosca.relationships.MemberOfSite:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Site ]
+
+tosca.relationships.TenantOfService:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Service ]
+
+tosca.relationships.ControllerDeployment:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Deployment ]
+
+tosca.relationships SiteDeployment:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Deployment ]
+
+tosca.relationships.UsesController:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Controller ]
+
+tosca.relationships.ConnectsToNetwork:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Network ]
+
+# tosca.relationships.OwnsNetwork:
+# derived_from: tosca.relationships.Root
+# valid_target_types: [ tosca.capabilities.xos.Network ]
+
+tosca.relationships.UsesNetworkTemplate:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.NetworkTemplate ]
+
+tosca.relationships.AdminPrivilege:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Slice, tosca.capabiltys.xos.Site ]
+
+tosca.relationships.AccessPrivilege:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabilities.xos.Slice, tosca.capabiltys.xos.Site ]
+
+tosca.relationships.PIPrivilege:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabiltys.xos.Site ]
+
+tosca.relationships.TechPrivilege:
+ derived_from: tosca.relationships.Root
+ valid_target_types: [ tosca.capabiltys.xos.Site ]
+
+tosca.capabilities.xos.Service:
+ derived_from: tosca.capabilities.Root
+ description: An XOS Service
+
+tosca.capabilities.xos.Deployment:
+ derived_from: tosca.capabilities.Root
+ description: An XOS Deployment
+
+tosca.capabilities.xos.Controller:
+ derived_from: tosca.capabilities.Root
+ description: An XOS Controller
+
+tosca.capabilities.xos.Site:
+ derived_from: tosca.capabilities.Root
+ description: An XOS Site
+
+tosca.capabilities.xos.Slice:
+ derived_from: tosca.capabilities.Root
+ description: An XOS Slice
+
+tosca.capabilities.xos.NetworkTemplate:
+ derived_from: tosca.capabilities.Root
+ description: An XOS network template
+
+tosca.capabilities.xos.Network:
+ derived_from: tosca.capabilities.Root
+ description: An XOS network
+
+tosca.capabilities.xos.User:
+ derived_from: tosca.capabilities.Root
+ description: An XOS user
diff --git a/xos/tosca/destroy.py b/xos/tosca/destroy.py
index fd86fdc..5743234 100644
--- a/xos/tosca/destroy.py
+++ b/xos/tosca/destroy.py
@@ -1,6 +1,9 @@
import os
import sys
+# XXX - deal with what I think is a bug in OpenStack's tosca engine
+os.system("cat definitions/TOSCA_definition_1_0.yaml definitions/xos.yaml > /opt/tosca/translator/toscalib/elements/TOSCA_definition_1_0.yaml")
+
# add the parent directory to sys.path
import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
diff --git a/xos/tosca/run.py b/xos/tosca/run.py
index aa284e0..d82aa4d 100644
--- a/xos/tosca/run.py
+++ b/xos/tosca/run.py
@@ -1,6 +1,9 @@
import os
import sys
+# XXX - deal with what I think is a bug in OpenStack's tosca engine
+os.system("cat definitions/TOSCA_definition_1_0.yaml definitions/xos.yaml > /opt/tosca/translator/toscalib/elements/TOSCA_definition_1_0.yaml")
+
# add the parent directory to sys.path
import os,sys,inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))