# # Copyright (c) 2017 GigaSpaces Technologies Ltd. All rights reserved. # # 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. # tosca_definitions_version: tosca_simple_yaml_1_0 topology_template: policies: cloudify-openstack-plugin: description: >- openstack plugin executes operations. type: aria.Plugin properties: version: 2.0.1 data_types: aria.openstack.datatypes.Config: description: >- openstack configuration properties: username: type: string password: type: string tenant_name: type: string auth_url: type: string region: type: string required: false nova_url: type: string required: false neutron_url: type: string required: false aria.openstack.datatypes.Rules: description: >- openstack security group rules properties: remote_ip_prefix: type: string default: 0.0.0.0/0 port: type: integer default: # source: https://developer.openstack.org/api-ref/compute/ aria.openstack.datatypes.Server: description: >- openstack Server args. properties: security_groups: type: list entry_schema: string required: false availability_zone: type: string required: false userdata: type: string required: false aria.openstack.datatypes.Keypair: description: >- openstack keypair args. properties: public_key: type: string required: false type: type: string required: false user_id: type: string required: false # source: https://developer.openstack.org/api-ref/block-storage/v2/index.html aria.openstack.datatypes.Volume: description: >- openstack volume args. properties: size: type: integer required: false description: type: string required: false availability_zone: type: string required: false consistencygroup_id: type: string required: false volume_type: type: string required: false snapshot_id: type: string required: false source_replica: type: string required: false tenant_id: type: string required: false # source: https://developer.openstack.org/api-ref/image/ aria.openstack.datatypes.Image: description: >- openstack image args. properties: id: type: string required: false min_disk: type: integer required: false min_ram: type: integer required: false name: type: string required: false protected: type: boolean required: false tags: type: list entry_schema: string required: false visibility: type: string required: false # source: https://developer.openstack.org/api-ref/identity/v3/ aria.openstack.datatypes.Project: description: >- openstack image args. properties: is_domain: type: boolean required: false description: type: string required: false domain_id: type: string required: false name: type: string required: false enabled: type: boolean required: false parent_id: type: string required: false # source: https://developer.openstack.org/api-ref/networking/v2/index.html aria.openstack.datatypes.Subnet: description: >- openstack subnet args. properties: network_id: type: string required: false ip_version: type: integer required: false default: 4 cidr: type: string required: false gateway_ip: type: string required: false dns_nameservers: type: list entry_schema: string required: false enable_dhcp: type: boolean required: false tenant_id: type: string required: false aria.openstack.datatypes.Port: description: >- openstack port args properties: network_id: type: string required: false admin_state_up: type: boolean required: false status: type: string required: false mac_address: type: string required: false device_id: type: string required: false device_owner: type: string required: false tenant_id: type: string required: false aria.openstack.datatypes.Network: description: >- openstack network args properties: admin_state_up: type: boolean required: false status: type: string required: false subnets: type: list entry_schema: string required: false shared: type: boolean required: false tenant_id: type: string required: false aria.openstack.datatypes.SecurityGroup: description: >- openstack network args properties: admin_state_up: type: boolean required: false port_security_enabled: type: boolean required: false project_id: type: string required: false qos_policy_id: type: string required: false segments: type: list entry_schema: string required: false shared: type: boolean required: false vlan_transparent: type: boolean required: false tenant_id: type: string required: false aria.openstack.datatypes.Router: description: >- openstack network args properties: bgpvpn_id: type: string required: false router_id: type: string required: false aria.openstack.datatypes.FloatingIP: description: >- openstack network args properties: tenant_id: type: string required: false project_id: type: string required: false floating_network_id: type: string required: false floating_network_name: type: string required: false fixed_ip_address: type: string required: false floating_ip_address: type: string required: false port_id: type: string required: false subnet_id: type: string required: false interface_types: aria.openstack.interfaces.validation: derived_from: tosca.interfaces.Root creation: description: >- creation operation for the openstack validation interface deletion: description: >- deletion operation for the openstack validation interface node_types: aria.openstack.nodes.Server: derived_from: tosca.nodes.Compute properties: server: default: {} type: aria.openstack.datatypes.Server required: false ip: default: type: string os_family: description: >- Property specifying what type of operating system family this compute node will run. default: linux type: string use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). image: default: '' type: string description: >- The image for the server. May receive either the ID or the name of the image. note: This property is currently optional for backwards compatibility, but will be modified to become a required property in future versions (Default: ''). flavor: default: '' type: string description: >- The flavor for the server. May receive either the ID or the name of the flavor. note: This property is currently optional for backwards compatibility, but will be modified to become a required property in future versions (Default: ''). use_password: default: false type: boolean description: >- A boolean describing whether this server image supports user-password authentication. Images that do should post the administrator user's password to the Openstack metadata service (e.g. via cloudbase); The password would then be retrieved by the plugin, decrypted using the server's keypair and then saved in the server's runtime properties. management_network_name: type: string description: >- The current implementation of the openstack plugin requires this field. The value of this field should be set to the openstack name of a network this server is attached to. openstack_config: type: aria.openstack.datatypes.Config required: false description: >- see Openstack Configuraion interfaces: Standard: create: implementation: cloudify-openstack-plugin > nova_plugin.server.create inputs: args: required: false default: {} type: aria.openstack.datatypes.Server start: implementation: cloudify-openstack-plugin > nova_plugin.server.start inputs: start_retry_interval: default: 30 type: integer private_key_path: type: string default: '' required: true stop: cloudify-openstack-plugin > nova_plugin.server.stop delete: cloudify-openstack-plugin > nova_plugin.server.delete Validation: type: aria.openstack.interfaces.validation creation: implementation: cloudify-openstack-plugin > nova_plugin.server.creation_validation inputs: args: required: false default: {} type: aria.openstack.datatypes.Server requirements: - floating_ip: capability: tosca.capabilities.Node node: aria.openstack.nodes.FloatingIP relationship: aria.openstack.server_connected_to_floating_ip occurrences: [ 0, UNBOUNDED ] - security_group: capability: tosca.capabilities.Node node: aria.openstack.nodes.SecurityGroup relationship: aria.openstack.server_connected_to_security_group occurrences: [ 0, UNBOUNDED ] - port: capability: tosca.capabilities.Node node: aria.openstack.nodes.Port relationship: aria.openstack.server_connected_to_port occurrences: [ 0, UNBOUNDED ] - key_pair: capability: tosca.capabilities.Node node: aria.openstack.nodes.KeyPair relationship: aria.openstack.server_connected_to_keypair occurrences: [ 0, UNBOUNDED ] capabilities: openstack_container: type: Node aria.openstack.nodes.WindowsServer: derived_from: aria.openstack.nodes.Server properties: use_password: default: true type: boolean description: >- Default changed for derived type because Windows instances need a password for agent installation os_family: default: windows type: string description: >- (updates the os_family default as a convenience) aria.openstack.nodes.KeyPair: derived_from: tosca.nodes.Root properties: keypair: default: {} type: aria.openstack.datatypes.Keypair required: false description: >- the path (on the machine the plugin is running on) to where the private key should be stored. If use_external_resource is set to "true", the existing private key is expected to be at this path. private_key_path: description: > the path (on the machine the plugin is running on) to where the private key should be stored. If use_external_resource is set to "true", the existing private key is expected to be at this path. type: string use_external_resource: type: boolean default: false description: >- a boolean describing whether this resource should be created or rather that it already exists on Openstack and should be used as-is. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- the name that will be given to the resource on Openstack (excluding optional prefix). If not provided, a default name will be given instead. If use_external_resource is set to "true", this exact value (without any prefixes applied) will be looked for as either the name or id of an existing keypair to be used. openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: implementation: cloudify-openstack-plugin > nova_plugin.keypair.create inputs: args: required: false default: {} type: aria.openstack.datatypes.Keypair delete: cloudify-openstack-plugin > nova_plugin.keypair.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > nova_plugin.keypair.creation_validation capabilities: keypair: type: tosca.capabilities.Node aria.openstack.nodes.Subnet: derived_from: tosca.nodes.Root properties: subnet: type: aria.openstack.datatypes.Subnet required: false default: cidr: 172.16.0.0/16 use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: implementation: cloudify-openstack-plugin > neutron_plugin.subnet.create inputs: args: required: false type: aria.openstack.datatypes.Subnet default: cidr: 172.16.0.0/16 delete: cloudify-openstack-plugin > neutron_plugin.subnet.delete Validation: type: aria.openstack.interfaces.validation creation: implementation: cloudify-openstack-plugin > neutron_plugin.subnet.creation_validation inputs: args: type: aria.openstack.datatypes.Subnet required: false default: cidr: 172.16.0.0/16 requirements: - router: capability: tosca.capabilities.Node node: aria.openstack.nodes.Router relationship: aria.openstack.subnet_connected_to_router occurrences: [ 0, UNBOUNDED ] - network: capability: tosca.capabilities.Node node: aria.openstack.nodes.Network capabilities: subnet: type: tosca.capabilities.Node aria.openstack.nodes.SecurityGroup: derived_from: tosca.nodes.Root properties: security_group: type: aria.openstack.datatypes.SecurityGroup required: false default: {} description: type: string default: '' description: >- SecurityGroup description. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false rules: default: [] type: list entry_schema: aria.openstack.datatypes.Rules disable_default_egress_rules: default: false type: boolean description: >- a flag for removing the default rules which https://wiki.openstack.org/wiki/Neutron/SecurityGroups#Behavior. If not set to `true`, these rules will remain, and exist alongside any additional rules passed using the `rules` property. interfaces: Standard: create: implementation: cloudify-openstack-plugin > neutron_plugin.security_group.create inputs: args: type: aria.openstack.datatypes.SecurityGroup required: false default: {} delete: cloudify-openstack-plugin > neutron_plugin.security_group.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > neutron_plugin.security_group.creation_validation capabilities: security: type: tosca.capabilities.Node aria.openstack.nodes.Router: derived_from: tosca.nodes.Root properties: router: type: aria.openstack.datatypes.Router required: false default: {} external_network: default: '' type: string description: >- An external network name or ID. If given, the router will use this external network as a gateway. use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). type: string openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: implementation: cloudify-openstack-plugin > neutron_plugin.router.create inputs: args: default: {} type: aria.openstack.datatypes.Router required: false delete: cloudify-openstack-plugin > neutron_plugin.router.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > neutron_plugin.router.creation_validation capabilities: gateway: type: tosca.capabilities.Node aria.openstack.nodes.Port: derived_from: tosca.nodes.Root properties: port: type: aria.openstack.datatypes.Port required: false default: {} fixed_ip: default: '' type: string description: >- may be used to request a specific fixed IP for the port. If the IP is unavailable (either already taken or does not belong to a subnet the port is on) an error will be raised. use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: implementation: cloudify-openstack-plugin > neutron_plugin.port.create inputs: args: default: {} type: aria.openstack.datatypes.Port required: false delete: cloudify-openstack-plugin > neutron_plugin.port.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > neutron_plugin.port.creation_validation requirements: - security_group: capability: tosca.capabilities.Node node: aria.openstack.nodes.SecurityGroup relationship: aria.openstack.port_connected_to_security_group occurrences: [ 0, UNBOUNDED ] - floating_ip: capability: tosca.capabilities.Node node: aria.openstack.nodes.FloatingIP relationship: aria.openstack.port_connected_to_floating_ip occurrences: [ 0, UNBOUNDED ] - subnet: capability: tosca.capabilities.Node node: aria.openstack.nodes.Subnet relationship: aria.openstack.port_connected_to_subnet - network: capability: tosca.capabilities.Node node: aria.openstack.nodes.Network occurrences: [ 0, UNBOUNDED ] capabilities: entry_point: type: tosca.capabilities.Node aria.openstack.nodes.Network: derived_from: tosca.nodes.Root properties: network: type: aria.openstack.datatypes.Network required: false default: {} use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: implementation: cloudify-openstack-plugin > neutron_plugin.network.create inputs: args: default: {} type: aria.openstack.datatypes.Network required: false delete: cloudify-openstack-plugin > neutron_plugin.network.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > neutron_plugin.network.creation_validation capabilities: address_space: type: tosca.capabilities.Node aria.openstack.nodes.FloatingIP: derived_from: tosca.nodes.Root attributes: floating_ip_address: type: string properties: floatingip: type: aria.openstack.datatypes.FloatingIP required: false default: {} use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: description: IP address of the floating IP default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: implementation: cloudify-openstack-plugin > neutron_plugin.floatingip.create inputs: args: default: {} type: aria.openstack.datatypes.FloatingIP required: false delete: cloudify-openstack-plugin > neutron_plugin.floatingip.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > neutron_plugin.floatingip.creation_validation capabilities: address: type: tosca.capabilities.Node aria.openstack.nodes.Volume: derived_from: tosca.nodes.Root properties: volume: default: {} type: aria.openstack.datatypes.Volume description: >- key-value volume configuration as described in http://developer.openstack.org/api-ref-blockstorage-v1.html#volumes-v1. (**DEPRECATED - Use the `args` input in create operation instead**) use_external_resource: type: boolean default: false description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). device_name: default: auto type: string description: >- The device name this volume will be attached to. Default value is *auto*, which means openstack will auto-assign a device. Note that if you do explicitly set a value, this value may not be the actual device name assigned. Sometimes the device requested will not be available and openstack will assign it to a different device, this is why we recommend using *auto*. openstack_config: type: aria.openstack.datatypes.Config required: false boot: type: boolean default: false description: >- If a Server instance is connected to this Volume by a relationship, this volume will be used as the boot volume for that Server. interfaces: Standard: create: implementation: cloudify-openstack-plugin > cinder_plugin.volume.create inputs: args: default: {} type: aria.openstack.datatypes.Volume required: false status_attempts: description: >- Number of times to check for the creation's status before failing type: integer default: 20 status_timeout: description: >- Interval (in seconds) between subsequent inquiries of the creation's status type: integer default: 15 delete: cloudify-openstack-plugin > cinder_plugin.volume.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > cinder_plugin.volume.creation_validation requirements: - server: capability: tosca.capabilities.Node node: aria.openstack.nodes.Server relationship: aria.openstack.volume_attached_to_server aria.openstack.nodes.Image: derived_from: tosca.nodes.Root properties: image: description: >- Required parameters are (container_format, disk_format). Accepted types are available on http://docs.openstack.org/developer/glance/formats.html To create an image from the local file its path should be added in data parameter. default: {} type: map entry_schema: string image_url: default: '' type: string description: >- The openstack resource URL for the image. use_external_resource: default: false type: boolean description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: cloudify-openstack-plugin > glance_plugin.image.create start: implementation: cloudify-openstack-plugin > glance_plugin.image.start inputs: start_retry_interval: default: 30 type: integer delete: cloudify-openstack-plugin > glance_plugin.image.delete Validation: type: aria.openstack.interfaces.validation creation: cloudify-openstack-plugin > glance_plugin.image.creation_validation aria.openstack.nodes.Project: derived_from: tosca.nodes.Root properties: project: default: {} type: aria.openstack.datatypes.Project description: >- key-value project configuration. users: default: [] type: list entry_schema: string description: >- List of users assigned to this project in the following format: { name: string, roles: [string] } quota: default: {} type: map entry_schema: string description: | A dictionary mapping service names to quota definitions for a proejct e.g:: quota: neutron: nova: use_external_resource: default: false type: boolean description: >- a boolean for setting whether to create the resource or use an existing one. See the using existing resources section. create_if_missing: default: false type: boolean description: >- If use_external_resource is ``true`` and the resource is missing, create it instead of failing. resource_id: default: '' type: string description: >- name to give to the new resource or the name or ID of an existing resource when the ``use_external_resource`` property is set to ``true`` (see the using existing resources section). Defaults to '' (empty string). openstack_config: type: aria.openstack.datatypes.Config required: false interfaces: Standard: create: openstack.keystone_plugin.project.create start: openstack.keystone_plugin.project.start delete: openstack.keystone_plugin.project.delete Validation: type: aria.openstack.interfaces.validation creation: openstack.keystone_plugin.project.creation_validation relationship_types: aria.openstack.port_connected_to_security_group: derived_from: ConnectsTo interfaces: Configure: add_source: cloudify-openstack-plugin > neutron_plugin.port.connect_security_group aria.openstack.subnet_connected_to_router: derived_from: ConnectsTo interfaces: Configure: add_target: cloudify-openstack-plugin > neutron_plugin.router.connect_subnet remove_target: cloudify-openstack-plugin > neutron_plugin.router.disconnect_subnet aria.openstack.server_connected_to_floating_ip: derived_from: ConnectsTo interfaces: Configure: add_source: implementation: cloudify-openstack-plugin > nova_plugin.server.connect_floatingip inputs: fixed_ip: description: > The fixed IP to be associated with the floating IP. If omitted, Openstack will choose which port to associate. type: string default: '' remove_source: cloudify-openstack-plugin > nova_plugin.server.disconnect_floatingip aria.openstack.port_connected_to_floating_ip: derived_from: ConnectsTo interfaces: Configure: add_source: cloudify-openstack-plugin > neutron_plugin.floatingip.connect_port remove_source: cloudify-openstack-plugin > neutron_plugin.floatingip.disconnect_port aria.openstack.server_connected_to_security_group: derived_from: ConnectsTo interfaces: Configure: add_source: cloudify-openstack-plugin > nova_plugin.server.connect_security_group remove_source: cloudify-openstack-plugin > nova_plugin.server.disconnect_security_group aria.openstack.server_connected_to_port: derived_from: ConnectsTo interfaces: Configure: remove_source: cloudify-openstack-plugin > neutron_plugin.port.detach aria.openstack.server_connected_to_keypair: derived_from: ConnectsTo aria.openstack.port_connected_to_subnet: derived_from: ConnectsTo aria.openstack.volume_attached_to_server: derived_from: ConnectsTo interfaces: Configure: add_target: implementation: cloudify-openstack-plugin > nova_plugin.server.attach_volume inputs: status_attempts: description: > Number of times to check for the attachment's status before failing type: integer default: 10 status_timeout: description: > Interval (in seconds) between subsequent inquiries of the attachment's status type: integer default: 2 remove_target: implementation: cloudify-openstack-plugin > nova_plugin.server.detach_volume inputs: status_attempts: description: > Number of times to check for the detachment's status before failing type: integer default: 10 status_timeout: description: > Interval (in seconds) between subsequent inquiries of the detachment's status type: integer default: 2