You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ariatosca.apache.org by "Tal Liron (JIRA)" <ji...@apache.org> on 2017/08/14 16:21:02 UTC

[jira] [Created] (ARIA-346) Policy-based approach for multi-cloud-platform support

Tal Liron created ARIA-346:
------------------------------

             Summary: Policy-based approach for multi-cloud-platform support
                 Key: ARIA-346
                 URL: https://issues.apache.org/jira/browse/ARIA-346
             Project: AriaTosca
          Issue Type: Story
            Reporter: Tal Liron


Let's start with a Proof-of-Concept before creating a PR to merge into ARIA.

The problem is this: it's currently hard to move a service template from one cloud infrastructure to another, e.g. from AWS to Cloudstack, let alone to container-based solutions like Docker and Kubernetes. The main reason is that all of our current solutions are based on inheriting new node types from {{tosca.nodes.Compute}}, and these have very different properties that map quite directly to the platform APIs. The same problem exists is for block storage nodes, networking, and security groups.

There are several problems with this approach:

1) This means that you can't just take the same service template and install it on both AWS and Openstack. You need to create a new template. Over time it means maintaining several versions of the same template.

2) By inheriting Compute, we are making it difficult for service template writers to create their own Compute sub-types. Because there's no multiple inheritance in TOSCA, they would have to derive their types from the correct platform types, again making it harder to maintain multiple versions.

3) Our approach ignores TOSCA 1.0's solutions: the capability types {{tosca.capabilities.Container}} and {{tosca.capabilities.OperatingSystem}}. These are admittedly generic, limited, and inflexible (based on explicit properties) but they are still part of TOSCA.

My idea is to try to solve this without inheriting from Compute and while using the existing capability types. How would this be done? By filling in the missing data in a policy rather than a new node type. The plugin would take into account the capabilities as they are.

For example, here's how we currently do an AWS VM node template:
{code}
toplogy_template:
  node_templates:
    my_vm:
      type: aria.aws.nodes.Instance
      properties:
        image_id: { get_input: image_id }
        instance_type: { get_input: instance_type }
        name: aria-aws-hello-world-instance
        parameters:
          key_name: { get_attribute: [ keypair, aws_resource_id ] }
{code}
What I suggest instead is something like this:
{code}
toplogy_template:
  node_templates:
    my_vm:
      type: tosca.nodes.Compute
      capabilities:
        os:
          properties:
            architecture: x86_64
            type: linux
            distribution: ubuntu
            version: 14.04
        host:
          properties:
            mem_size: 4 GB

policies:
  vm:
    type: aws.VM
    targets: my_vm
    properties:
      key_name: { get_attribute: [ keypair, aws_resource_id ] }
      image_ids:
        - id: 123456789
          architecture: x86_64
          type: linux
          distribution: ubuntu
          version: 14.04
        - id: 121232354325
          architecture: i686
          type: linux
          distribution: ubuntu
          version: 14.04
       ...          
{code}
In this case there is an explicit mapping of image IDs to the capability properties. Of course the basic aws.VM type could already have sensible defaults, making it easier to use.

As stated, we can start with a PoC for this and see where to go from there.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)