updated guides to avoid connection: local (#44227)

- want they really need is `delegate_to: localhost`
 - also reduced 'local_action' usage in favor of same
pull/44778/head
Brian Coca 6 years ago committed by GitHub
parent ed22efb2a6
commit 893d59fabe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -234,7 +234,6 @@ Ansible playbook.
- Add the following to the new playbook file:: - Add the following to the new playbook file::
- name: test my new module - name: test my new module
connection: local
hosts: localhost hosts: localhost
tasks: tasks:
- name: run the new module - name: run the new module

@ -74,9 +74,9 @@ and fulfill the missing data by either setting ENV variables or tasks params:
--- ---
- name: provision our VMs - name: provision our VMs
hosts: cloud-vm hosts: cloud-vm
connection: local
tasks: tasks:
- name: ensure VMs are created and running - name: ensure VMs are created and running
delegate_to: localhost
cs_instance: cs_instance:
api_key: your api key api_key: your api key
api_secret: your api secret api_secret: your api secret
@ -111,10 +111,11 @@ By passing the argument ``api_region`` with the CloudStack modules, the region w
.. code-block:: yaml .. code-block:: yaml
- name: ensure my ssh public key exists on Exoscale - name: ensure my ssh public key exists on Exoscale
local_action: cs_sshkeypair cs_sshkeypair:
name: my-ssh-key name: my-ssh-key
public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
api_region: exoscale api_region: exoscale
delegate_to: localhost
Or by looping over a regions list if you want to do the task in every region: Or by looping over a regions list if you want to do the task in every region:
@ -144,20 +145,19 @@ Below you see an example how it can be used in combination with Ansible's block
tasks: tasks:
- block: - block:
- name: ensure my ssh public key - name: ensure my ssh public key
local_action: cs_sshkeypair:
module: cs_sshkeypair
name: my-ssh-key name: my-ssh-key
public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- name: ensure my ssh public key - name: ensure my ssh public key
local_action: cs_instance:
module: cs_instance:
display_name: "{{ inventory_hostname_short }}" display_name: "{{ inventory_hostname_short }}"
template: Linux Debian 7 64-bit 20GB Disk template: Linux Debian 7 64-bit 20GB Disk
service_offering: "{{ cs_offering }}" service_offering: "{{ cs_offering }}"
ssh_key: my-ssh-key ssh_key: my-ssh-key
state: running state: running
delegate_to: localhost
environment: environment:
CLOUDSTACK_DOMAIN: root/customers CLOUDSTACK_DOMAIN: root/customers
CLOUDSTACK_PROJECT: web-app CLOUDSTACK_PROJECT: web-app
@ -241,8 +241,10 @@ Now to the fun part. We create a playbook to create our infrastructure we call i
--- ---
- name: provision our VMs - name: provision our VMs
hosts: cloud-vm hosts: cloud-vm
connection: local
tasks: tasks:
- name: run all enclosed tasks from localhost
delegate_to: localhost
block:
- name: ensure VMs are created and running - name: ensure VMs are created and running
cs_instance: cs_instance:
name: "{{ inventory_hostname_short }}" name: "{{ inventory_hostname_short }}"
@ -262,7 +264,7 @@ Now to the fun part. We create a playbook to create our infrastructure we call i
cs_staticnat: vm="{{ inventory_hostname_short }}" ip_address="{{ public_ip }}" cs_staticnat: vm="{{ inventory_hostname_short }}" ip_address="{{ public_ip }}"
when: public_ip is defined when: public_ip is defined
In the above play we defined 3 tasks and use the group ``cloud-vm`` as target to handle all VMs in the cloud but instead SSH to these VMs, we use ``connection=local`` to execute the API calls locally from our workstation. In the above play we defined 3 tasks and use the group ``cloud-vm`` as target to handle all VMs in the cloud but instead SSH to these VMs, we use ``delegate_to: localhost`` to execute the API calls locally from our workstation.
In the first task, we ensure we have a running VM created with the Debian template. If the VM is already created but stopped, it would just start it. If you like to change the offering on an existing VM, you must add ``force: yes`` to the task, which would stop the VM, change the offering and start the VM again. In the first task, we ensure we have a running VM created with the Debian template. If the VM is already created but stopped, it would just start it. If you like to change the offering on an existing VM, you must add ``force: yes`` to the task, which would stop the VM, change the offering and start the VM again.
@ -316,7 +318,6 @@ The playbook looks like the following:
--- ---
- name: cloud base setup - name: cloud base setup
hosts: localhost hosts: localhost
connection: local
tasks: tasks:
- name: upload ssh public key - name: upload ssh public key
cs_sshkeypair: cs_sshkeypair:
@ -349,8 +350,9 @@ The playbook looks like the following:
- name: install VMs in the cloud - name: install VMs in the cloud
hosts: cloud-vm hosts: cloud-vm
connection: local
tasks: tasks:
- delegate_to: localhost
block:
- name: create and run VMs on CloudStack - name: create and run VMs on CloudStack
cs_instance: cs_instance:
name: "{{ inventory_hostname_short }}" name: "{{ inventory_hostname_short }}"

@ -177,9 +177,8 @@ examples to get you started:
# Simple playbook to invoke with the above example: # Simple playbook to invoke with the above example:
- name: Test docker_inventory - name: Test docker_inventory, this will not connect to any hosts
hosts: all hosts: all
connection: local
gather_facts: no gather_facts: no
tasks: tasks:
- debug: msg="Container - {{ inventory_hostname }}" - debug: msg="Container - {{ inventory_hostname }}"

@ -24,20 +24,21 @@ package repositories, so you will likely need to install it via pip:
$ pip install pyrax $ pip install pyrax
The following steps will often execute from the control machine against the Rackspace Cloud API, so it makes sense Ansible creates an implicit localhost that executes in the same context as the ``ansible-playbook`` and the other CLI tools.
to add localhost to the inventory file. (Ansible may not require this manual step in the future): If for any reason you need or want to have it in your inventory you should do something like the following:
.. code-block:: ini .. code-block:: ini
[localhost] [localhost]
localhost ansible_connection=local localhost ansible_connection=local ansilbe_python_interpreter=/usr/local/bin/python2
For more information see :ref:`Implicit Localhost <implicit_localhost>`
In playbook steps, we'll typically be using the following pattern: In playbook steps, we'll typically be using the following pattern:
.. code-block:: yaml .. code-block:: yaml
- hosts: localhost - hosts: localhost
connection: local
gather_facts: False gather_facts: False
tasks: tasks:
@ -103,7 +104,7 @@ Here is a basic example of provisioning an instance in ad-hoc mode:
.. code-block:: bash .. code-block:: bash
$ ansible localhost -m rax -a "name=awx flavor=4 image=ubuntu-1204-lts-precise-pangolin wait=yes" -c local $ ansible localhost -m rax -a "name=awx flavor=4 image=ubuntu-1204-lts-precise-pangolin wait=yes"
Here's what it would look like in a playbook, assuming the parameters were defined in variables: Here's what it would look like in a playbook, assuming the parameters were defined in variables:
@ -111,8 +112,7 @@ Here's what it would look like in a playbook, assuming the parameters were defin
tasks: tasks:
- name: Provision a set of instances - name: Provision a set of instances
local_action: rax:
module: rax
name: "{{ rax_name }}" name: "{{ rax_name }}"
flavor: "{{ rax_flavor }}" flavor: "{{ rax_flavor }}"
image: "{{ rax_image }}" image: "{{ rax_image }}"
@ -120,14 +120,14 @@ Here's what it would look like in a playbook, assuming the parameters were defin
group: "{{ group }}" group: "{{ group }}"
wait: yes wait: yes
register: rax register: rax
delegate_to: localhost
The rax module returns data about the nodes it creates, like IP addresses, hostnames, and login passwords. By registering the return value of the step, it is possible used this data to dynamically add the resulting hosts to inventory (temporarily, in memory). This facilitates performing configuration actions on the hosts in a follow-on task. In the following example, the servers that were successfully created using the above task are dynamically added to a group called "raxhosts", with each nodes hostname, IP address, and root password being added to the inventory. The rax module returns data about the nodes it creates, like IP addresses, hostnames, and login passwords. By registering the return value of the step, it is possible used this data to dynamically add the resulting hosts to inventory (temporarily, in memory). This facilitates performing configuration actions on the hosts in a follow-on task. In the following example, the servers that were successfully created using the above task are dynamically added to a group called "raxhosts", with each nodes hostname, IP address, and root password being added to the inventory.
.. code-block:: yaml .. code-block:: yaml
- name: Add the instances we created (by public IP) to the group 'raxhosts' - name: Add the instances we created (by public IP) to the group 'raxhosts'
local_action: add_host:
module: add_host
hostname: "{{ item.name }}" hostname: "{{ item.name }}"
ansible_host: "{{ item.rax_accessipv4 }}" ansible_host: "{{ item.rax_accessipv4 }}"
ansible_ssh_pass: "{{ item.rax_adminpass }}" ansible_ssh_pass: "{{ item.rax_adminpass }}"
@ -303,11 +303,11 @@ This can be achieved with the ``rax_facts`` module and an inventory file similar
gather_facts: False gather_facts: False
tasks: tasks:
- name: Get facts about servers - name: Get facts about servers
local_action: rax_facts:
module: rax_facts
credentials: ~/.raxpub credentials: ~/.raxpub
name: "{{ inventory_hostname }}" name: "{{ inventory_hostname }}"
region: "{{ rax_region }}" region: "{{ rax_region }}"
delegate_to: localhost
- name: Map some facts - name: Map some facts
set_fact: set_fact:
ansible_host: "{{ rax_accessipv4 }}" ansible_host: "{{ rax_accessipv4 }}"
@ -418,21 +418,19 @@ Create an isolated cloud network and build a server
- name: Build Servers on an Isolated Network - name: Build Servers on an Isolated Network
hosts: localhost hosts: localhost
connection: local
gather_facts: False gather_facts: False
tasks: tasks:
- name: Network create request - name: Network create request
local_action: rax_network:
module: rax_network
credentials: ~/.raxpub credentials: ~/.raxpub
label: my-net label: my-net
cidr: 192.168.3.0/24 cidr: 192.168.3.0/24
region: IAD region: IAD
state: present state: present
delegate_to: localhost
- name: Server create request - name: Server create request
local_action: rax:
module: rax
credentials: ~/.raxpub credentials: ~/.raxpub
name: web%04d.example.org name: web%04d.example.org
flavor: 2 flavor: 2
@ -449,6 +447,7 @@ Create an isolated cloud network and build a server
wait: yes wait: yes
wait_timeout: 360 wait_timeout: 360
register: rax register: rax
delegate_to: localhost
.. _complete_environment: .. _complete_environment:
@ -462,12 +461,10 @@ Build a complete webserver environment with servers, custom networks and load ba
--- ---
- name: Build environment - name: Build environment
hosts: localhost hosts: localhost
connection: local
gather_facts: False gather_facts: False
tasks: tasks:
- name: Load Balancer create request - name: Load Balancer create request
local_action: rax_clb:
module: rax_clb
credentials: ~/.raxpub credentials: ~/.raxpub
name: my-lb name: my-lb
port: 80 port: 80
@ -483,8 +480,7 @@ Build a complete webserver environment with servers, custom networks and load ba
register: clb register: clb
- name: Network create request - name: Network create request
local_action: rax_network:
module: rax_network
credentials: ~/.raxpub credentials: ~/.raxpub
label: my-net label: my-net
cidr: 192.168.3.0/24 cidr: 192.168.3.0/24
@ -493,8 +489,7 @@ Build a complete webserver environment with servers, custom networks and load ba
register: network register: network
- name: Server create request - name: Server create request
local_action: rax:
module: rax
credentials: ~/.raxpub credentials: ~/.raxpub
name: web%04d.example.org name: web%04d.example.org
flavor: performance1-1 flavor: performance1-1
@ -513,8 +508,7 @@ Build a complete webserver environment with servers, custom networks and load ba
register: rax register: rax
- name: Add servers to web host group - name: Add servers to web host group
local_action: add_host:
module: add_host
hostname: "{{ item.name }}" hostname: "{{ item.name }}"
ansible_host: "{{ item.rax_accessipv4 }}" ansible_host: "{{ item.rax_accessipv4 }}"
ansible_ssh_pass: "{{ item.rax_adminpass }}" ansible_ssh_pass: "{{ item.rax_adminpass }}"
@ -524,8 +518,7 @@ Build a complete webserver environment with servers, custom networks and load ba
when: rax.action == 'create' when: rax.action == 'create'
- name: Add servers to Load balancer - name: Add servers to Load balancer
local_action: rax_clb_nodes:
module: rax_clb_nodes
credentials: ~/.raxpub credentials: ~/.raxpub
load_balancer_id: "{{ clb.balancer.id }}" load_balancer_id: "{{ clb.balancer.id }}"
address: "{{ item.rax_networks.private|first }}" address: "{{ item.rax_networks.private|first }}"
@ -578,12 +571,10 @@ Using a Control Machine
- name: Create an exact count of servers - name: Create an exact count of servers
hosts: localhost hosts: localhost
connection: local
gather_facts: False gather_facts: False
tasks: tasks:
- name: Server build requests - name: Server build requests
local_action: rax:
module: rax
credentials: ~/.raxpub credentials: ~/.raxpub
name: web%03d.example.org name: web%03d.example.org
flavor: performance1-1 flavor: performance1-1
@ -598,8 +589,7 @@ Using a Control Machine
register: rax register: rax
- name: Add servers to in memory groups - name: Add servers to in memory groups
local_action: add_host:
module: add_host
hostname: "{{ item.name }}" hostname: "{{ item.name }}"
ansible_host: "{{ item.rax_accessipv4 }}" ansible_host: "{{ item.rax_accessipv4 }}"
ansible_ssh_pass: "{{ item.rax_adminpass }}" ansible_ssh_pass: "{{ item.rax_adminpass }}"
@ -613,9 +603,11 @@ Using a Control Machine
hosts: new_web hosts: new_web
gather_facts: false gather_facts: false
tasks: tasks:
- name: ensure we run all tasks from localhost
delegate_to: localhost
block:
- name: Wait for rackconnnect automation to complete - name: Wait for rackconnnect automation to complete
local_action: rax_facts:
module: rax_facts
credentials: ~/.raxpub credentials: ~/.raxpub
id: "{{ rax_id }}" id: "{{ rax_id }}"
region: DFW region: DFW
@ -625,8 +617,7 @@ Using a Control Machine
delay: 10 delay: 10
- name: Wait for managed cloud automation to complete - name: Wait for managed cloud automation to complete
local_action: rax_facts:
module: rax_facts
credentials: ~/.raxpub credentials: ~/.raxpub
id: "{{ rax_id }}" id: "{{ rax_id }}"
region: DFW region: DFW
@ -640,10 +631,10 @@ Using a Control Machine
gather_facts: false gather_facts: false
tasks: tasks:
- name: Get facts about servers - name: Get facts about servers
local_action: rax_facts:
module: rax_facts
name: "{{ inventory_hostname }}" name: "{{ inventory_hostname }}"
region: DFW region: DFW
delegate_to: localhost
- name: Map some facts - name: Map some facts
set_fact: set_fact:
ansible_host: "{{ rax_accessipv4 }}" ansible_host: "{{ rax_accessipv4 }}"
@ -668,8 +659,10 @@ Using Ansible Pull
--- ---
- name: Ensure Rackconnect and Managed Cloud Automation is complete - name: Ensure Rackconnect and Managed Cloud Automation is complete
hosts: all hosts: all
connection: local
tasks: tasks:
- name: ensure we run all tasks from localhost
delegate_to: localhost
block:
- name: Check for completed bootstrap - name: Check for completed bootstrap
stat: stat:
path: /etc/bootstrap_complete path: /etc/bootstrap_complete
@ -706,7 +699,6 @@ Using Ansible Pull
- name: Base Configure Servers - name: Base Configure Servers
hosts: all hosts: all
connection: local
roles: roles:
- role: users - role: users
@ -725,7 +717,6 @@ Using Ansible Pull with XenStore
--- ---
- name: Ensure Rackconnect and Managed Cloud Automation is complete - name: Ensure Rackconnect and Managed Cloud Automation is complete
hosts: all hosts: all
connection: local
tasks: tasks:
- name: Check for completed bootstrap - name: Check for completed bootstrap
stat: stat:
@ -776,7 +767,6 @@ Using Ansible Pull with XenStore
- name: Base Configure Servers - name: Base Configure Servers
hosts: all hosts: all
connection: local
roles: roles:
- role: users - role: users

@ -70,7 +70,6 @@ In this use case / example, we will be selecting a virtual machine template and
--- ---
- name: Create a VM from a template - name: Create a VM from a template
hosts: localhost hosts: localhost
connection: local
gather_facts: no gather_facts: no
tasks: tasks:
- name: Clone the template - name: Clone the template

Loading…
Cancel
Save