##################################################################################
# Multi-vim built in types and plugins definitions.
##################################################################################

plugins:
  multivim:
    executor: central_deployment_agent
    #source: https://github.com/cloudify-cosmo/onap-multivim-plugin/archive/2.2.0.zip
    source: 
    package_name: onap-multivim-plugin
    package_version: '2.2.0'

node_types:
  onap.multivim.nodes.Server:
    derived_from: cloudify.nodes.Compute
    properties:
      server:
        default: {}
        description: >
          key-value server configuration as described in OpenStack compute create server API. (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
        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).
      image:
        default: ''
        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: ''
        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: '').
      management_network_name:
        default: ''
        description: >
          Cloudify's management network name.
          Every server should be connected to the management network.
          If the management network's name information is available in the Provider Context,
          this connection is made automatically and there's no need to override this property
          (See the Misc section for more information on the Openstack Provider Context).
          Otherwise, it is required to set the value of this property to the management network name as it was set in the bootstrap process.
          Note: When using Nova-net Openstack (see the Nova-net Support section),
          don't set this property. Defaults to '' (empty string).
      use_password:
        default: false
        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.
      multivim_config:
        default: {}
        description: >
          see Openstack Configuraion
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.nova_plugin.server.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        start:
          implementation: openstack.nova_plugin.server.start
          inputs:
            start_retry_interval:
              description: Polling interval until the server is active in seconds
              type: integer
              default: 30
            private_key_path:
              description: >
                Path to private key which matches the server's
                public key. Will be used to decrypt password in case
                the "use_password" property is set to "true"
              type: string
              default: ''
            multivim_config:
              default: {}
        stop:
          implementation: openstack.nova_plugin.server.stop
          inputs:
            multivim_config:
              default: {}
        delete:
          implementation: openstack.nova_plugin.server.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.nova_plugin.server.creation_validation
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}

  onap.multivim.nodes.WindowsServer:
    derived_from: onap.multivim.nodes.Server
    properties:
      use_password:
        default: true
        description: >
          Default changed for derived type
          because Windows instances need a password for agent installation
      os_family:
        default: windows
        description: >
          (updates the os_family default as a convenience)
      agent_config:
        type: cloudify.datatypes.AgentConfig
        default:
          port: 5985
        description: >
          (updates the defaults for the agent_config for Windows)

  onap.multivim.nodes.KeyPair:
    derived_from: cloudify.nodes.Root
    properties:
      keypair:
        default: {}
        description: >
          the keypair object as described by Openstack. This
          parameter can be used to override and pass parameters
          directly to Nova client.
          Note that in the case of keypair, the only nested parameter
          that can be used is "name".
      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.
      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
        description: >
          If use_external_resource is ``true`` and the resource is missing,
          create it instead of failing.
      resource_id:
        default: ''
        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.
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.nova_plugin.keypair.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.nova_plugin.keypair.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.nova_plugin.keypair.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.Subnet:
    derived_from: cloudify.nodes.Subnet
    properties:
      subnet:
        default: {}
        description: >
          key-value subnet configuration as described at http://developer.openstack.org/api-ref-networking-v2.html#subnets. (**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
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.neutron_plugin.subnet.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.neutron_plugin.subnet.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.neutron_plugin.subnet.creation_validation
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}

  onap.multivim.nodes.SecurityGroup:
    derived_from: cloudify.nodes.SecurityGroup
    properties:
      security_group:
        default: {}
        description: >
          key-value security_group configuration as described in http://developer.openstack.org/api-ref-networking-v2-ext.html#createSecGroup. (**DEPRECATED - Use the `args` input in create operation instead**)
      description:
        type: string
        default: ''
        description: >
          SecurityGroup description.
      create_if_missing:
        default: false
        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: ''
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
      rules:
        default: []
        description: >
          key-value security_group_rule configuration as described in http://developer.openstack.org/api-ref-networking-v2.html#security_groups
      disable_default_egress_rules:
        default: false
        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:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.neutron_plugin.security_group.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.neutron_plugin.security_group.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.neutron_plugin.security_group.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.Router:
    derived_from: cloudify.nodes.Router
    properties:
      router:
        default: {}
        description: >
          key-value router configuration as described in http://developer.openstack.org/api-ref-networking-v2.html#layer3. (**DEPRECATED - Use the `args` input in create operation instead**)
      external_network:
        default: ''
        description: >
          An external network name or ID.
          If given, the router will use this external network as a gateway.
      default_to_managers_external_network:
        default: true
        description: >
          A boolean which determines whether to use the Cloudify Manager's external network if no other external network was given (whether by a relationship, by the `external_network` property or by the nested `external_gateway_info` key in the `router` property). This is only relevant if the manager's external network appears in the Provider-context. Defaults to `true`.
      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
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.neutron_plugin.router.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.neutron_plugin.router.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.neutron_plugin.router.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.Port:
    derived_from: cloudify.nodes.Port
    properties:
      port:
        default: {}
        description: >
          key-value port configuration as described in http://developer.openstack.org/api-ref-networking-v2.html#ports. (**DEPRECATED - Use the `args` input in create operation instead**)
      fixed_ip:
        default: ''
        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
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.neutron_plugin.port.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.neutron_plugin.port.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.neutron_plugin.port.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.Network:
    derived_from: cloudify.nodes.Network
    properties:
      network:
        default: {}
        description: >
          key-value network configuration as described in http://developer.openstack.org/api-ref-networking-v2.html#networks. (**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
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.neutron_plugin.network.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.neutron_plugin.network.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.neutron_plugin.network.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.FloatingIP:
    derived_from: cloudify.nodes.VirtualIP
    properties:
      floatingip:
        default: {}
        description: >
          key-value floatingip configuration as described in http://developer.openstack.org/api-ref-networking-v2.html#layer3. (**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
        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: ''
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.neutron_plugin.floatingip.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.neutron_plugin.floatingip.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.neutron_plugin.floatingip.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.Volume:
    derived_from: cloudify.nodes.Volume
    properties:
      volume:
        default: {}
        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
        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).
      device_name:
        default: auto
        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*.
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
      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:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.cinder_plugin.volume.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
            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:
          implementation: openstack.cinder_plugin.volume.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.cinder_plugin.volume.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nova_net.nodes.FloatingIP:
    derived_from: cloudify.nodes.VirtualIP
    properties:
      floatingip:
        default: {}
        description: >
          key-value floatingip configuration as described in http://developer.openstack.org/api-ref-compute-v2-ext.html#ext-os-floating-ips. (**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
        description: >
          TODO: CREATE. THIS IS MISSING
      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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.nova_plugin.floatingip.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
        delete:
          implementation: openstack.nova_plugin.floatingip.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.nova_plugin.floatingip.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nova_net.nodes.SecurityGroup:
    derived_from: cloudify.nodes.SecurityGroup
    properties:
      security_group:
        default: {}
        description: >
          key-value security_group configuration as described in http://developer.openstack.org/api-ref-compute-v2-ext.html#ext-os-security-groups. (**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
        description: >
          TODO: CREATE. THIS IS MISSING
      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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
      rules:
        default: []
        description: >
          key-value security group rule as described in http://developer.openstack.org/api-ref-compute-v2-ext.html#ext-os-security-group-default-rules.
      description:
        description: security group description
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.nova_plugin.security_group.create
          inputs:
            args:
              default: {}
            multivim_config:
              default: {}
            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
        delete:
          implementation: openstack.nova_plugin.security_group.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.nova_plugin.security_group.creation_validation
          inputs:
            multivim_config:
              default: {}

  onap.multivim.nodes.Image:
    derived_from: cloudify.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: {}
      image_url:
        default: ''
        description: >
          The openstack resource URL for the image.
      use_external_resource:
        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
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: openstack.glance_plugin.image.create
          inputs:
            multivim_config:
              default: {}
        start:
          implementation: openstack.glance_plugin.image.start
          inputs:
            start_retry_interval:
              default: 30
            multivim_config:
              default: {}
        delete:
          implementation: openstack.glance_plugin.image.delete
          inputs:
            multivim_config:
              default: {}
      cloudify.interfaces.validation:
        creation:
          implementation: openstack.glance_plugin.image.creation_validation
          inputs:
            multivim_config:
              default: {}


  onap.multivim.nodes.Project:
    derived_from: cloudify.nodes.Root
    properties:
      project:
        default: {}
        description: >
          key-value project configuration.
      users:
        default: []
        description: >
          List of users assigned to this project in the following format:
            { name: string, roles: [string] }
      quota:
        default: {}
        description: |
          A dictionary mapping service names to quota definitions for a proejct

          e.g::

            quota:
              neutron: <quota>
              nova: <quota>
      use_external_resource:
        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
        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).
      multivim_config:
        default: {}
        description: >
          endpoints and authentication configuration for Openstack.
          Expected to contain the following nested fields:
          username, password, tenant_name, auth_url, region.
    interfaces:
      cloudify.interfaces.lifecycle:
        create: openstack.keystone_plugin.project.create
        start: openstack.keystone_plugin.project.start
        delete: openstack.keystone_plugin.project.delete
      cloudify.interfaces.validation:
        creation: openstack.keystone_plugin.project.creation_validation

relationships:
  onap.multivim.port_connected_to_security_group:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: openstack.neutron_plugin.port.connect_security_group
          inputs:
            multivim_config:
              default: {}

  onap.multivim.subnet_connected_to_router:
    derived_from: cloudify.relationships.connected_to
    target_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: openstack.neutron_plugin.router.connect_subnet
          inputs:
            multivim_config:
              default: {}
        unlink:
          implementation: openstack.neutron_plugin.router.disconnect_subnet
          inputs:
            multivim_config:
              default: {}

  onap.multivim.server_connected_to_floating_ip:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: openstack.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: ''
            multivim_config:
              default: {}
        unlink:
          implementation: openstack.nova_plugin.server.disconnect_floatingip
          inputs:
            multivim_config:
              default: {}

  onap.multivim.port_connected_to_floating_ip:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: openstack.neutron_plugin.floatingip.connect_port
          inputs:
            multivim_config:
              default: {}
        unlink:
          implementation: openstack.neutron_plugin.floatingip.disconnect_port
          inputs:
            multivim_config:
              default: {}

  onap.multivim.server_connected_to_security_group:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: openstack.nova_plugin.server.connect_security_group
          inputs:
            multivim_config:
              default: {}
        unlink:
          implementation: openstack.nova_plugin.server.disconnect_security_group
          inputs:
            multivim_config:
              default: {}

  onap.multivim.server_connected_to_port:
    derived_from: cloudify.relationships.connected_to
    source_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        unlink:
          implementation: openstack.neutron_plugin.port.detach
          inputs:
            multivim_config:
              default: {}

  onap.multivim.server_connected_to_keypair:
    derived_from: cloudify.relationships.connected_to

  onap.multivim.port_connected_to_subnet:
    derived_from: cloudify.relationships.connected_to

  onap.multivim.volume_attached_to_server:
    derived_from: cloudify.relationships.connected_to
    target_interfaces:
      cloudify.interfaces.relationship_lifecycle:
        establish:
          implementation: openstack.nova_plugin.server.attach_volume
          inputs:
            multivim_config:
              default: {}
            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
        unlink:
          implementation: openstack.nova_plugin.server.detach_volume
          inputs:
            multivim_config:
              default: {}
            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