DaffyDuke
2/27/2018 - 4:45 PM

TOSCA to Graph

TOSCA to Graph

package main

import (
        "fmt"
        "log"
        "os"

        "github.com/gonum/graph/encoding/dot"
        "github.com/owulveryck/toscalib"
        "github.com/owulveryck/toscalib/graph"
)

func main() {
        var t toscalib.ServiceTemplateDefinition
        err := t.Parse(os.Stdin)
        if err != nil {
                log.Fatal(err)
        }
        _, workflow := graph.GetGraphs(t)
        b, err := dot.Marshal(workflow, "G", "\t", "", true)
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println(string(b))
}
imgcat <(curl -s https://raw.githubusercontent.com/openstack/tosca-parser/master/toscaparser/tests/data/tosca_single_instance_wordpress_with_url_import.yaml | go run *go | dot -Tsvg)
tosca_definitions_version: tosca_simple_yaml_1_0

description: >
  TOSCA simple profile with wordpress, web server and mysql on the same server.

imports:
  - https://raw.githubusercontent.com/openstack/heat-translator/master/translator/tests/data/custom_types/wordpress.yaml

topology_template:
  inputs:
    cpus:
      type: integer
      description: Number of CPUs for the server.
      constraints:
        - valid_values: [ 1, 2, 4, 8 ]
      default: 1
    db_name:
      type: string
      description: The name of the database.
      default: wordpress
    db_user:
      type: string
      description: The user name of the DB user.
      default: wp_user
    db_pwd:
      type: string
      description: The WordPress database admin account password.
      default: wp_pass
    db_root_pwd:
      type: string
      description: Root password for MySQL.
    db_port:
      type: PortDef
      description: Port for the MySQL database.
      default: 3306

  node_templates:
    wordpress:
      type: tosca.nodes.WebApplication.WordPress
      requirements:
        - host: webserver
        - database_endpoint: mysql_database
      interfaces:
        Standard:
          create: wordpress/wordpress_install.sh
          configure:
            implementation: wordpress/wordpress_configure.sh
            inputs:
              wp_db_name: wordpress
              wp_db_user: wp_user
              wp_db_password: wp_pass

    mysql_database:
      type: tosca.nodes.Database
      properties:
        name: { get_input: db_name }
        user: { get_input: db_user }
        password: { get_input: db_pwd }
      capabilities:
        database_endpoint:
          properties:
            port: { get_input: db_port }
      requirements:
        - host:
            node: mysql_dbms
      interfaces:
        Standard:
          configure:
            implementation: mysql/mysql_database_configure.sh
            inputs:
              db_name: wordpress
              db_user: wp_user
              db_password: wp_pass
              db_root_password: passw0rd
    mysql_dbms:
      type: tosca.nodes.DBMS
      properties:
        root_password: { get_input: db_root_pwd }
        port: { get_input: db_port }
      requirements:
        - host: server
      interfaces:
        Standard:
          create:
            implementation: mysql/mysql_dbms_install.sh
            inputs:
              db_root_password: passw0rd
          start: mysql/mysql_dbms_start.sh
          configure:
            implementation: mysql/mysql_dbms_configure.sh
            inputs:
              db_port: 3366

    webserver:
      type: tosca.nodes.WebServer
      requirements:
        - host: server
      interfaces:
        Standard:
          create: webserver/webserver_install.sh
          start: webserver/webserver_start.sh
    server:
      type: tosca.nodes.Compute
      capabilities:
        host:
          properties:
            disk_size: 10 GB
            num_cpus: { get_input: cpus }
            mem_size: 4096 MB
        os:
          properties:
            architecture: x86_64
            type: Linux
            distribution: Ubuntu
            version: 14.04

  outputs:
    website_url:
      description: URL for Wordpress wiki.
      value: { get_attribute: [server, private_address] }
G 0 server start 1 server stop 0->1 17 mysql_dbms create mysql/mysql_dbms_install.sh 0->17 20 webserver create webserver/webserver_install.sh 0->20 2 server delete 1->2 26 STOP 2->26 3 server create 4 server configure 3->4 4->0 5 wordpress configure wordpress/wordpress_configure.sh 9 wordpress start 5->9 6 wordpress create wordpress/wordpress_install.sh 6->5 7 wordpress stop 8 wordpress delete 7->8 12 mysql_database stop 8->12 22 webserver stop 8->22 9->7 10 mysql_database create 13 mysql_database configure mysql/mysql_database_configure.sh 10->13 11 mysql_database start 11->6 11->12 14 mysql_database delete 12->14 13->11 18 mysql_dbms stop 14->18 15 mysql_dbms start mysql/mysql_dbms_start.sh 15->10 15->18 16 mysql_dbms configure mysql/mysql_dbms_configure.sh 16->15 17->16 19 mysql_dbms delete 18->19 19->1 24 webserver configure 20->24 21 webserver start webserver/webserver_start.sh 21->6 21->22 23 webserver delete 22->23 23->1 24->21 25 START 25->3