From 3a4b713a400f7c9b18814d85f11194256d0ff8db Mon Sep 17 00:00:00 2001 From: DeWayne Filppi Date: Fri, 3 Oct 2014 09:22:25 -0700 Subject: [PATCH 1/2] 2.7-3.0 porting guide initial --- guide/3.0/guide-porting.md | 245 ++++++++++++++++++ guide/images3/guide/porting-blueprint.png | Bin 0 -> 28055 bytes .../images3/guide/porting-deploy-install.png | Bin 0 -> 54908 bytes guide/images3/guide/porting-serverinvm.png | Bin 0 -> 9913 bytes 4 files changed, 245 insertions(+) create mode 100644 guide/3.0/guide-porting.md create mode 100755 guide/images3/guide/porting-blueprint.png create mode 100755 guide/images3/guide/porting-deploy-install.png create mode 100755 guide/images3/guide/porting-serverinvm.png diff --git a/guide/3.0/guide-porting.md b/guide/3.0/guide-porting.md new file mode 100644 index 000000000..92d78e80b --- /dev/null +++ b/guide/3.0/guide-porting.md @@ -0,0 +1,245 @@ +--- +layout: bt_wiki +title: Cloudify 3.0 Recipe Porting Guide +category: none +publish: true +abstract: Best practices for porting Cloudify 2.x recipes to Cloudify 3.0 +pageord: 100 + +--- +{%summary%} Best practices for porting recipes from Cloudify 2.x to Cloudify 3.0 blueprints{%endsummary%} + +# Cloudify 3.0 Recipe Porting Guide + +## Scope + +Cloudify recipes define configuration and functionality that can be categorized roughly into provisioning, installation, orchestration, management, and visualization. This guide, in concert with the capabilities of Cloudify 3.0, addresses provision, installation, a subset of 2.x orchestration, and a portion of management. + +## Development Topics + +Prior to digging into individual recipe functional categories, there are broad development environment topics to be discussed. + +### Recipe DSL: Groovy to YAML + +Cloudify adopts YAML (1.0) as its configuration language, replacing the groovy DSL of version 2.x. Familiarity with basic YAML is required to understand and create blueprints for Cloudify 3.0. Note that because YAML is a declarative (not procedural) language, actual code (formerly Groovy closures) is not allowed. Executable code is referenced as Python plugins, either user defined or built in. Getting a YAML plugin or equivalent for your development environment can help you see the structure easier, and catch formatting errors that a flat text editor doesn't. + +### Recipe Implementation: Groovy to Python (and bash) + +Cloudify 3.0 adopts Python 2.7 (and newer) as its implementation language, both internally and for Blueprint plugins. While not always necessary, if you need to write custom behavior to wire or orchestrate your system, you will likely need Python knowledge. This custom behavior includes custom commands or any recipe logic that relies on the ServiceContext object. Getting an IDE plugin for Python is important for making sense of and efficiently authoring Cloudify 3 Blueprint logic. + +### Blueprint concept: TOSCA + +Cloudify 3.0 is an implementation of the OASIS Topology and Orchestration Specification for Cloud Applications (TOSCA). TOSCA breaks a deployment architecture into a graph of nodes, where nodes represent any functional component (or even logical component) of the deployment architecture, such as VMs, routers, network, subnets, applications, etc. Contrast that with the idiosyncratic approach of Cloudify 2.x, which required the DSL to be modified to extend to new component types (storage, networking, etc...). TOSCA defines a type system that defines interfaces, behavior, and relationship between arbitrary components, implemented as YAML DSL. When you define a Cloudify 3 Blueprint, you define a graph of "nodes" (for example a Linux VM node with web server node contained in it), and the nodes behavior. It is good to have a basic understanding of TOSCA concepts prior to creating a blueprint. Paragraph 3.1 is a concise [introduction.](http://docs.oasis-open.org/tosca/TOSCA/v1.0/os/TOSCA-v1.0-os.html#_Toc356403644) + +### Porting Cloudify 2.x Recipes + +The central concept of Cloudify 3 is the TOSCA compatible "Blueprint" expressed as YAML. In Cloudify 2.x, the application and service recipe served the same purpose. A Blueprint is a complete description of the system to be managed, the rough equivalent of the combination of an application recipe along with all related service recipes. In Cloudify 3.0, there is no structural separation between overall orchestration (an "application") and the component parts ("the services"). Additionally, in Cloudify 2.x, infrastructure configurations (VMs, network, storage) were defined in the Cloud driver configuration and referred to symbolically. In Cloudify 3.0, the equivalent of the "cloud driver" configuration is specified in individual blueprints. + +{%tip title=Key Concept%} +application recipe + service recipes + cloud driver config = blueprint +{%endtip%} + +Like the Cloudify 2.x service recipe, the blueprint is organized in sections. There are two major sections in a blueprint: type definitions and the blueprint section which wires the types together. Many types are provided in Cloudify itself, especially foundational types (like "host"), but you'll typically want to define some types of your own. Refer to the [blueprint guide](http://getcloudify.org/guide/3.0/guide-blueprint.html) as an introduction to blueprint structure. + +Like the Cloudify 2.x service recipe, the blueprint is composed of a directory, possibly subdirectories, and supporting files (including the essential blueprint file, traditionally but not necessarily named "blueprint.yaml". Unlike in Cloudify 2.x, the blueprint isn't simply zipped and transferred to the target VM. Any blueprint files not explicitly referred to in the blueprint itself, are not transferred to the target node (even when the agent operates remotely). To get and use resources in the blueprint directory strucuture at runtime, they must be explicitly downloaded. + +The preferred way to port a Cloudify recipe is incrementally, testing as you go. As such, the process can be described via phases and steps. + +{%tip title=Tip} +Work and test incrementally +{%endtip%} + +#### Phase 1 - Evaluate Target Recipe + +In this phase, you assess the recipe you are targeting for porting, and identify what is necessary (and possible) to port. Cloudify 3.0 has some limitations, and additional possibilities, compared to version 2.7. + +{: .table .table-bordered} +| 2.7 | 3.0 | +|:--------------------------------|----------------:| +| VM lifecycle management | yes | +| Application lifecycle managment | yes | +| Application metrics | no (3.1) | +| Custom commands | yes (workflows) | +| Scaling | no | +| Visualization | no | +| Windows target platform | no | + +To summarize, you'll be focussing on the core deployment and management of your application. + +#### Phase 2 - Prepare Environment + +##### Step 1 - Install and Start Cloudify 3 Server + +In this phase, you need to make sure you have a environment suitable for blueprint development. The easiest way to get started is using the preconfigured Vagrant box with Cloudify 3.0 pre-installed. Refer to steps 1 and 2 in the [Getting Started Guide](http://getcloudify.org/guide/3.0/quickstart.html) to get an environment up and running. Your VM should be large enough to host at least a minimal representation of the stack you are standing up. The Cloudify manager itself takes 2 GB. You'll need something bigger. To modify the Vagrant VM size, edit the Vagrantfile, uncomment and modify the "config.vm.provider" section to look something like this (for a 4GB VM): + +```ruby +config.vm.provider "virtualbox" do |vb| + # Use VBoxManage to customize the VM. For example to change memory: + vb.customize ["modifyvm", :id, "--memory", "4096"] +end +``` + +In addition, modify the Vagrantfile by uncommenting the line that looks like this: + +```ruby +# config.vm.network "private_network", ip: "192.168.33.10" +``` + +This IP will be accessible from your host web browser so you can view the UI. + +After "upping" the VM, ssh to it and type "cfy help" to verify all is well. + +Like Cloudify 2.x, Cloudify 3.0 has a local cloud concept, which is helpful getting started with blueprint development. The Vagrant VM has the simple provider pre-installed and running. If you use one of the other methods to install the CLI, create a directory (e.g. cloudify), and in that directory run "cfy init simple_provider", and then "cfy bootstrap". + +{%tip title=Tip%} +Start with "simple provider" +{%endtip%} + +##### Step 2 - Start from a Blueprint Template + +Rather than starting from scratch, it's much easier to start from an existing blueprint template. You can use any of the sample blueprints, however these might be better used as reference examples rather than starting points. Instead, get the "blueprint-template" project from github [here](https://github.com/Gigaspaces/cloudify3-blueprints). It also has some associated code, but more focussed on illustrating how blueprints are built. + +The blueprint template illustrates the definition of types, interfaces, workflows, plugins, and nodes for a local cloud (simple provider) targeted blueprint. This rest of this guide will refer to it. + +For a sanity check, make sure you can deploy the blueprint-template project to Cloudify. Start your browser and point it at `http:///`. You'll see the Cloudify UI. Select the "blueprints" view and upload the template. + +![blueprints view](/guide/images3/guide/porting-blueprint.png "The Cloudify 3 Blueprints view") + +Once uploaded, create a deployment and then execute the "install" workflow. + +![install workflow](/guide/images3/guide/porting-deploy-install.png "Launching the install workflow") + +Rename the blueprint directory, and the name of the blueprint in the actual blueprint file (the name: attribute in the blueprint section of blueprint.yaml). + +#### Phase 3 Port The Recipe + +##### Step 1: Identify and configure VMs + +This step is very simple since you are starting with a simple provider (local cloud). Ultimately, the image, flavor, storage, and network configuration will need to be added to the blueprint, but not until later. For now, identify basic VM types, perhaps even taking names from the 2.x cloud driver config, and create nodes in the blueprint. In blueprint.yaml, a node is declared like so (in the "blueprint" section; ignore other sections for now): + +{%highlight yaml%} + - name: server_vm + type: cloudify.types.host + properties: + ip: 127.0.0.1 + cloudify_agent: + key: /home/vagrant/.ssh/cloudify_private_key + user: vagrant +{%endhighlight%} + +Rename the existing nodes,and/or add new ones as required for your stack. For now, we're just declaring concrete "hosts" rather than host "types". When we get to the point of configurating actual cloud VMS, we'll need the info from the cloud driver config. More on that later. At this point, you should comment out the lines provided as examples in the "blueprint" section. After taking this step, take time to deploy the new blueprint. + +##### Step 2: Port the services + +Now begins an iterative process of adding individual service functionality (to the limits of simple provider anyway). If you view your service dependencies (the application recipe from 2.x), you should start the process from services at the root of the dependency graph. In other words, if you have a database and an app server, start with the database and build upwards through the dependent services. It is important to test incrementally as features are added to the blueprint so that problems are discovered early. + +**Create A New Type for the Service** + +In the "types" section of the blueprint, create a new type, extending one of the cloudify bash plugin types, such as: cloudify.types.bash.db_server and cloudify.types.bash.app_server. Read the [bash plugin guide](http://getcloudify.org/guide/3.0/plugin-bash.html) for details. By declaring your own subtype of the Cloudify types, you can add your own configuration properties. These properties might include a URL to download binaries from, ports to open, etc... The equivalent in Cloudify 2.x would be anything in the services properties file. For a concrete example, from the [xap-singlenode](https://github.com/Gigaspaces/cloudify3-blueprints) blueprint, the "xap_type" type is the equivalent of the the ["xap_management" service](https://github.com/CloudifySource/cloudify-recipes/tree/master/services/xap9x/xap-management). + + + +Note that properties can be nested arbitrarily. Once you have a the type defined. Take the time to install the blueprint to verify your syntax is correct. If you want default values for the type, you can add a ": value" after a property entry. See the template for an example. + +**Create A New Blueprint Node for the Service** + +Thus far, you have only defined a type. By itself this has no impact on the actual deployment, only entries in the "blueprint" section actually get rendered on the target cloud. Like we created a node in the blueprint section for the VM, we need to create a node for the application, which runs on the VM. The template shows this for both "server" and "client" nodes. You can choose to override the default values for the properties you defined in the types area, if any. Note also that you can reuse the type definition, if applicable, for other nodes. For example, the xap-singlenode blueprint uses the xap_type definition for both xap_mgmt and xap_container nodes, since they are configured in a similar [manner](https://github.com/Gigaspaces/cloudify3-blueprints/blob/master/xap-singlenode/blueprint.yaml). + +*** Add The Node Relationship *** + +If you try to deploy the blueprint in it's current state, it will fail. It will fail because the new node requires a VM to run on. This is accomplished by defining a relationship. Cloudify 3 defines a three relationships: `depends_on, connected_to, and contained_in`. `connected_to` and `contained_in` are derived from `depends_on`. More on relationships [here](http://getcloudify.org/guide/3.0/reference-terminology.html#relationship). In this case, the "contained_in" relationship causes the orchestrator to wait for the hosting VM to be started, as well as indicating that associated logic be run on that VM. After adding the relationship, try installing the blueprint. You should see the VM with the node inside on the Cloudify UI, which will look something like this with your names substituted. + +![app in vm](/guide/images3/guide/porting-serverinvm.png "Blueprint with single server in VM") + +##### Step 3: Compose Service Relationships + +In Cloudify 2.x, the service context and related attributes API was frequently used by services to discover information about other services. In Cloudify 3.0, these concepts are replaced by the properties configured in the blueprint (equivalent to "details"), and the dynamic "runtime_properties" that contain properties set at runtime (equivalent to the attributes API data). + +The template blueprint has an example "client" service that retrieves data set at runtime by the "server" service already described. In the server service, the `server_scripts/install.sh` script set the IP address as a member of `runtime_properties`. The `install.sh` script call a utility function that uses the Cloudify REST API via `curl` to set the runtime properties for the server node. Once set, the IP address is ready to be discovered by other blueprint components. + +In order to fetch the IP address from the runtime_properties, a plugin needs to be created to access the `CloudifyContext` object at runtime. This is accomplished by defining a custom relationship type that gets activated as the orchestrator runs the install workflow. In the template, the first step is defining the relationship type: + +{%highlight yaml%} +relationships: + client_relationship: + derived_from: cloudify.relationships.connected_to + source_interfaces: + cloudify.interfaces.relationship_lifecycle: + - postconfigure: config_plugin.tasks.relationship_get_ip +{%endhighlight%} + +Note that the `derived_from` property is a `connected_to` relationship, since clearly this isn't a `contained_in` type of relationship. This configuration also shows how behavior (i.e. code) is tied to the relationship type. In this case, a plugin method is referred to called `relationship_get_ip`. This is the custom python code used to get the IP from the "server" blueprint node. However where did "config_plugin" get defined? Look up above the `relationships` section in the blueprint to the `plugins` section. There you will find that the symbol `config_plugin` is associated with a concrete filesystem path to the actual python code. + +{%highlight yaml%} + config_plugin: + derived_from: cloudify.plugins.agent_plugin + properties: + folder: config-plugin +{%endhighlight%} + +Now that the plugin and relationship are defined, the relationship can actually be used in the blueprint section to be used at runtime. + +{%highlight yaml%} + - name: client_app + type: client_type + properties: + dummy_prop: overridden + relationships: + - target: client_vm + type: cloudify.relationships.contained_in + - target: server + type: client_relationship +{%endhighlight%} + +After the relationship is set, the python code will be executed, passing the `CloudifyContext` object. The context is used to grab the runtime_properties (as set previously via the REST API), and then writes the result in a file for later consumption by lifecycle scripts. + +{%highlight groovy%} +@operation +def relationship_get_ip(ctx, **kwargs): + ':type ctx: CloudifyContext' + + # Get ip address of related node. + ip_address = ctx.related.runtime_properties['ip_address'] + + env_file_path = ctx.properties.get("env_file_path", "/tmp/ip") + + with open(env_file_path, 'a+') as env_file: + env_file.write("{}\n".format(ip_address)) +{%endhighlight} + +Note that this method of using a plugin and the file system for getting context info, is driven by the choice of the bash plugin. The upcoming python plugin (3.1) will permit the context to be passed directly to the lifecycle scripts. The process, in summary: + +* Write a python plugin to grab the runtime_properties you need +* Define the plugin in the plugins section of the blueprint +* Define a relationship that refers to the plugin +* Set the relationship in the "relationships" section of the blueprint node definition +* Finally, have your lifecycle script grab the info the plugin wrote to the filesystem + +##### Step 4: Port the Custom Commands + +Custom commands in Cloudify 2.x are defined in the service recipe and map a symbolic name to a script (or other action) to be executed remotely. Custom commands essentially define a runtime service interface. Cloudify 3.0 extends and formalizes this idea via `workflows`. A workflow in Cloudify 3 can perform complex operations across the entire blueprint. For a full description of the scope of workflows, refer to the workflow [guide](http://getcloudify.org/guide/3.0/guide-workflows.html). In the template blueprint, a simple workflow definition is presented that is equivalent to a custom command. + +A workflow is implemented via a python plugin, like any other logic in a blueprint. In the template blueprint, the workflow plugin is defined in a completely separate plugin module, but this is not required. The plugin definition in the blueprint is like any other plugin definition, however the implementation is significantly different, as it's goal is the construction of workflow that can be executed. For the simple workflow in the template blueprint, which simply executes an arbitrary script, the implementation is trivial. + +{%highligh python%} +@workflow +def simple_workflow(ctx, node_name, operation, **kwargs): + graph = ctx.graph_mode() + for node in ctx.nodes: + if node_name in node.id: + for instance in node.instances: + graph.add_task(instance.execute_operation(operation,kwargs)) + return graph.execute() +{%endhighlight} + +Note that the use of the "graph" workflow mode is unnecessary, as it is mainly used for assembling more complex workflows, or at least workflows that handle cancellation. Since workflows operate globally, notice how the node_name (node in the `blueprint` sense) is passed in as an argument. The workflow merely locates all instances of the supplied node name, and executes the named operation. + +To provide a task execution target for the workflow, an interface is defined on the server node. The interface is the closest analog for the Cloudify 2.7 custom command definition. The interface defines the "commands" available for a particular node in the topology. To provide high flexibility, the template blueprint workflow even takes the operation (i.e. interface method) as an argument. A "real" workflow probaby wouldn't need this level of flexibility. To recap the "custom command" to "workflow" process: + +* if your existing command is implemented in groovy, you may need to rewrite it in bash or python, unless you prepare the node with java/groovy. If you need/want to rewrite it in python, you'll probably want to simply implement it in a plugin operation. +* create a plugin operation that will implement the command logic, or call your script implementation. +* create an interface on the node in the blueprint that will map a command name to your plugin operation, and provide whatever configuration properties are needed. +* make sure the plugin is defined in the plugins section of the blueprint. If you just add the new operation to a pre-existing plugin module, no change is needed. +* write a workflow plugin to call the node interface you've defined. +* create a workflow definition in the blueprint that will map a workflow name to a workflow plugin implementation. + diff --git a/guide/images3/guide/porting-blueprint.png b/guide/images3/guide/porting-blueprint.png new file mode 100755 index 0000000000000000000000000000000000000000..349b31f960ba6405470fbabd7b33c6c9862838bf GIT binary patch literal 28055 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

tWxEAJCJ!R5R|iNV0EB-8wE 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ⅈq5sf$USUiHmJS#)SscoSq-1s~l7>I3!;gO< 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

*&b>*^M?9`YqvSlcqSKrLS1J8Lwv1ml0X`v{Fk8 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�&x2e_XSQJ$a}bd*==DXH~G>g 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 J%=3m%{vUr@R7C&) literal 0 HcmV?d00001 diff --git a/guide/images3/guide/porting-serverinvm.png b/guide/images3/guide/porting-serverinvm.png new file mode 100755 index 0000000000000000000000000000000000000000..44bac7b066c6bd4ecf8b035bea7615d645ff5801 GIT binary patch literal 9913 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 Date: Thu, 5 May 2016 15:39:29 -0700 Subject: [PATCH 2/2] updated source locations --- ...vices-openstack-TOSCA-orchestration-cloud-open-source.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2016-04-04-scaling-kubernetes-microservices-openstack-TOSCA-orchestration-cloud-open-source.html b/source/_posts/2016-04-04-scaling-kubernetes-microservices-openstack-TOSCA-orchestration-cloud-open-source.html index 2b1bb59ec..e0f75c40b 100644 --- a/source/_posts/2016-04-04-scaling-kubernetes-microservices-openstack-TOSCA-orchestration-cloud-open-source.html +++ b/source/_posts/2016-04-04-scaling-kubernetes-microservices-openstack-TOSCA-orchestration-cloud-open-source.html @@ -118,9 +118,9 @@

Defining the Policy

Conclusion

-

Thus ends the journey to a Cloudify managed hybrid cloud deployment including Kubernetes, Kubernetes deployed microservices, and external services outside of Kubernetes. Note also that the standard scale workflow in Cloudify works for Kubernetes itself, so in reality the suite of blueprints included can scale not only Kubernetes microservices, but Kubernetes itself. Watch this video to see the autoscaling in action. The code is on github. As always, comments are welcome.

+

Thus ends the journey to a Cloudify managed hybrid cloud deployment including Kubernetes, Kubernetes deployed microservices, and external services outside of Kubernetes. Note also that the standard scale workflow in Cloudify works for Kubernetes itself, so in reality the suite of blueprints included can scale not only Kubernetes microservices, but Kubernetes itself. Watch this video to see the autoscaling in action. The blueprint and plugin implementation are on github. As always, comments are welcome.

Stay tuned to this channel for more OpenStack, containers, security, and NFV posts throughout the month as we prepare for OpenStack Austin!

- \ No newline at end of file +