Integrating Cloudify with Configuration Management Tools
It is common to rely on a configuration management tool to deploy and configure part or all of your deployments, such as Salt, Ansible, Chef, or Puppet.
There is no single appropriate way to integrate Cloudify with a CM. You will want to take advantage of specific features of your own CM, meaning that a one-size-fits-all plugin is impossible. For example, you might use a standalone executions model such as Ansible ad-hoc commands for their CM, while others use a service model such as Puppet Server.
Cloudify enables you to orchestrate your repeated actions as they relate to your preferred CM, via the Script plugin or Fabric plugin. For example, if you have an existing Puppet server that operates on the server-agent model, you can use a relationship to add the private IP of the VM to the main manifest, as shown below.
relationships:
cloudify.relationships.compute_managed_by_puppet:
derived_from: cloudify.relationships.depends_on
target_interfaces:
cloudify.interfaces.relationship_lifecycle:
establish:
implementation: fabric.fabric_plugin.tasks.run_task
inputs:
tasks_file:
default: script.py
task_name:
# this is a python function that opens the main manifest file
# and adds the vm to the appropriate group
default: add_vm_to_manifest
fabric_env: *puppet_server_fabric_env
unlink:
implementation: fabric.fabric_plugin.tasks.run_script
inputs:
tasks_file:
default: script.py
task_name:
# this is a python function that opens the main manifest file
# and removes the vm from the appropriate group
default: remove_vm_from_manifest
fabric_env: *puppet_server_fabric_env
node_templates:
puppet_server:
type: cloudify.nodes.Compute
properties:
agent_config:
install_method: none
ip: 192.168.122.2
new_vm:
type: cloudify.nodes.Compute
relationships:
- type: cloudify.relationships.compute_managed_by_puppet
target: puppet_server
Another approach is to use the CM’s standalone command from the Script plugin, as follows.
new_vm:
type: cloudify.nodes.Compute
new_application:
type: cloudify.nodes.Application
interfaces:
cloudify.interfaces.lifecycle:
create:
implementation: fabric.fabric_plugin.tasks.run_commands
inputs:
commands:
- puppet apply ~/path/to/puppet/module/manifest
fabric_env: *puppet_server_fabric_env
You can use the following examples to explore further.
https://github.com/cloudify-examples/puppet-server-agent-blueprint
https://github.com/cloudify-examples/puppet-application-blueprint
https://github.com/cloudify-examples/ansible-blueprint
https://github.com/cloudify-examples/windows-ansible-blueprint