The Ansible plugin enables you to configure Cloudify resources with Ansible and provides an agentless method for executing operations on remote hosts.
Similar to the Script Plugin and the Fabric Plugin, there is no one node type associated with the Ansible plugin. Instead, you modify existing node types to perform one or more of their lifecycle operations using the Ansible plugin and any additional inputs that you provide.
Ansible Playbook Executor Node uses
ansible.cloudify_ansible.tasks.run as start
action.
Properties:
site_yaml_path: A path to yoursite.yamlormain.yamlin your Ansible Playbook.sources: Your Inventory sources. Either YAML or a path to a file. If not provided the inventory will be take from thesourcesruntime property.run_data: Variable values.options_config: Command-line options, such astagsorskip_tags.ansible_env_vars: A dictionary of environment variables to set. Default is{"ANSIBLE_HOST_KEY_CHECKING": "False"}.debug_level: Debug level.
Execute the equivalent of ansible-playbook on the Ansible Playbook provided
in the site_yaml_path input.
Inputs:
site_yaml_path: A path to yoursite.yamlormain.yamlin your Ansible Playbook.sources: Your Inventory sources. Either YAML or a path to a file. If not provided the inventory will be take from thesourcesruntime property.run_data: Variable values.options_config: Command-line options, such astagsorskip_tags.ansible_env_vars: A dictionary of environment variables to set.debug_level: Debug level, Default is 2.
In addition, you can provide additional key-word args parameters to the
AnsiblePlaybookFromFile class, such as options_config.
There are also two methods for generating the sources parameter automatically, see using compute nodes and Relationships.
For all inventory sources, we require these parameters:
ansible_host: The hostname or IP address of the host to SSH into.ansible_user: The username to SSH with.ansible_ssh_private_key_file: The private key file to SSH with.
In addition, we handle these parameters if provided (and highly recommend them):
ansible_become: A boolean value,trueorfalsewhether to assume the user privileges.ansible_ssh_common_args: Additional arguments to the SSH command like, we suggest,'-o StrictHostKeyChecking=no'.
For more information on the sources format in YAML, see Ansible Inventory YAML.
If your operation is mapped on the lifecycle operation of a node template
derived from cloudify.nodes.Compute, we will attempt to generate the sources
parameter from the node properties.
Provision some component on a VM.
compute_and_component:
type: cloudify.nodes.Compute
properties:
ip: { get_input: ip }
agent_config:
install_method: none
key: { get_input: private_key_path }
user: { get_input: username }
interfaces:
cloudify.interfaces.lifecycle:
start:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
site_yaml_path: resources/component/site.yamlUse the cloudify.ansible.relationships.connected_to_host relationship defined
in the plugin to populate the sources parameter, if the target node is derived
from cloudify.nodes.Compute.
Inputs:
group_name: Ansible node group namehostname: Hostnamehost_config: Host configuration:ansible_host: The hostname or IP address of the host to SSH into.ansible_user: The username to SSH with.ansible_ssh_private_key_file: The private key file to SSH with.ansible_become: A boolean value,trueorfalsewhether to assume the user privileges.ansible_ssh_common_args: Additional arguments to the SSH command, by default: '-o StrictHostKeyChecking=no'
component:
type: cloudify.nodes.Root
interfaces:
cloudify.interfaces.lifecycle:
start:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
site_yaml_path: resources/component/site.yaml
sources: { get_attribute: [ SELF, sources ] }
relationships:
- type: cloudify.ansible.relationships.connected_to_host
target: compute
compute:
type: cloudify.nodes.Compute
properties:
ip: { get_input: ip }
agent_config:
install_method: none
key: { get_input: private_key_path }
user: { get_input: username }Basic usage with no special node or relationship type behavior.
my_node:
type: cloudify.nodes.Root
interfaces:
cloudify.interfaces.lifecycle:
create:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
site_yaml_path: resources/my_ansible_playbook/site.yaml
sources:
webservers:
hosts:
web:
ansible_host: { get_input: ip }
ansible_user: { get_input: username }
ansible_ssh_private_key_file: { get_input: private_key_path }
ansible_become: true
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'Passing run_data at runtime:
component:
type: cloudify.nodes.Root
interfaces:
cloudify.interfaces.lifecycle:
create:
implementation: ansible.cloudify_ansible.tasks.run
inputs:
site_yaml_path: resources/my_ansible_playbook/site.yaml
sources:
foo_group:
hosts:
foo_host:
ansible_host: { get_input: ip }
ansible_user: { get_input: username }
ansible_ssh_private_key_file: { get_input: private_key_path }
ansible_become: true
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
run_data:
foo: barFor official blueprint examples using this Cloudify plugin, please see Cloudify Community Blueprints Examples.