Blueprint Structure
Get the latest docs
You are looking at documentation for an older release. Not what you want? Go to the current release documentation.Remember the Python web server application you have just deployed?
Let’s see how it’s structured.
The blueprint contains a blueprint.yaml
file which describes our application stack; two scripts which install and uninstall the application and some application related files.
The scripts and application related files are not so interesting right now. What is interesting is the blueprint.yaml file.
This is our blueprint.yaml
file:
tosca_definitions_version: cloudify_dsl_1_3
imports:
- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
inputs:
webserver_port:
description: >
The HTTP web server port.
default: 8000
host_ip:
default: localhost
node_templates:
host:
type: cloudify.nodes.Compute
properties:
ip: { get_input: host_ip }
install_agent: false
http_web_server:
type: cloudify.nodes.WebServer
properties:
port: { get_input: webserver_port }
relationships:
- type: cloudify.relationships.contained_in
target: host
interfaces:
cloudify.interfaces.lifecycle:
create: install.py
delete: uninstall.py
outputs:
http_endpoint:
description: Web server external endpoint
value: { concat: ['http://', { get_property: [ host, ip ] },
':', { get_property: [http_web_server, port] }] }
You can see that our blueprint has a tosca_definitions_version
, and imports
, inputs
, node_templates
and outputs
sections.
- The
tosca_definitions_version
is the version of the blueprint’s DSL (Domain Specific Language). imports
is where you import additional yaml files to use in your blueprint.inputs
are somewhat like the blueprint’s configuration. You can set different inputs and use them across the blueprint.node_templates
contains your application’s resources and how they’re deployed.outputs
are pieces of information you can use after a blueprint was deployed.
There are additional sections which you can use, but we’ll ignore them for now.
So what did we do here? Let’s break this down
We defined two inputs: the machine’s IP (in this case, we’re running on our local machine so it’s localhost
.); and the port we’d like the server to be served on.
inputs:
webserver_port:
description: >
The HTTP web server port.
default: 8000
host_ip:
default: localhost
We defined node_templates, which contain two resources: a host
node (our local machine) and an http_web_server
node. The type of these resources are inherited from the file we imported in the imports
section. We’ll ignore that for now.
Properties are resource level configuration options. Our host contains an ip
property, which gets its value from one of our inputs using a built-in function called get_input
.
We’re not installing any agents here, so you can ignore install_agent
.
node_templates:
host:
type: cloudify.nodes.Compute
properties:
ip: { get_input: host_ip }
install_agent: false
...
We defined a port
property of our http_web_server
resource, which gets its value from the other input.
We used a relationship
to state that the http_web_server
is contained in the host
and declared the relevant scripts - install.py
and uninstall.py
to be executed when installing and uninstalling the application.
The install.py
and uninstall.py
files, as well as the Cloudify logo are resources provided alongside the blueprint.
You’ve seen the instances of these node_templates
during the Quickstart when running cfy local instances
.
node_templates:
...
http_web_server:
type: cloudify.nodes.WebServer
properties:
port: { get_input: webserver_port }
relationships:
- type: cloudify.relationships.contained_in
target: host
interfaces:
cloudify.interfaces.lifecycle:
create: install.py
delete: uninstall.py
Lastly, we defined an output, which provides us with the endpoint of our server. You’ve seen this output during the Quickstart when running cfy local outputs
.
outputs:
http_endpoint:
description: Web server external endpoint
value: { concat: ['http://', { get_property: [ host, ip ] },
':', { get_property: [http_web_server, port] }] }
What’s Next
If you want to learn more about blueprints, you can head off to the blueprints section.