updated guides to avoid connection: local (#44227)
- want they really need is `delegate_to: localhost` - also reduced 'local_action' usage in favor of same
This commit is contained in:
parent
ed22efb2a6
commit
893d59fabe
5 changed files with 149 additions and 160 deletions
|
@ -234,7 +234,6 @@ Ansible playbook.
|
|||
- Add the following to the new playbook file::
|
||||
|
||||
- name: test my new module
|
||||
connection: local
|
||||
hosts: localhost
|
||||
tasks:
|
||||
- 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
|
||||
hosts: cloud-vm
|
||||
connection: local
|
||||
tasks:
|
||||
- name: ensure VMs are created and running
|
||||
delegate_to: localhost
|
||||
cs_instance:
|
||||
api_key: your api key
|
||||
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
|
||||
|
||||
- name: ensure my ssh public key exists on Exoscale
|
||||
local_action: cs_sshkeypair
|
||||
cs_sshkeypair:
|
||||
name: my-ssh-key
|
||||
public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
|
||||
api_region: exoscale
|
||||
delegate_to: localhost
|
||||
|
||||
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:
|
||||
- block:
|
||||
- name: ensure my ssh public key
|
||||
local_action:
|
||||
module: cs_sshkeypair
|
||||
cs_sshkeypair:
|
||||
name: my-ssh-key
|
||||
public_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
|
||||
|
||||
- name: ensure my ssh public key
|
||||
local_action:
|
||||
module: cs_instance:
|
||||
cs_instance:
|
||||
display_name: "{{ inventory_hostname_short }}"
|
||||
template: Linux Debian 7 64-bit 20GB Disk
|
||||
service_offering: "{{ cs_offering }}"
|
||||
ssh_key: my-ssh-key
|
||||
state: running
|
||||
|
||||
delegate_to: localhost
|
||||
environment:
|
||||
CLOUDSTACK_DOMAIN: root/customers
|
||||
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
|
||||
hosts: cloud-vm
|
||||
connection: local
|
||||
tasks:
|
||||
- name: run all enclosed tasks from localhost
|
||||
delegate_to: localhost
|
||||
block:
|
||||
- name: ensure VMs are created and running
|
||||
cs_instance:
|
||||
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 }}"
|
||||
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.
|
||||
|
||||
|
@ -316,7 +318,6 @@ The playbook looks like the following:
|
|||
---
|
||||
- name: cloud base setup
|
||||
hosts: localhost
|
||||
connection: local
|
||||
tasks:
|
||||
- name: upload ssh public key
|
||||
cs_sshkeypair:
|
||||
|
@ -349,8 +350,9 @@ The playbook looks like the following:
|
|||
|
||||
- name: install VMs in the cloud
|
||||
hosts: cloud-vm
|
||||
connection: local
|
||||
tasks:
|
||||
- delegate_to: localhost
|
||||
block:
|
||||
- name: create and run VMs on CloudStack
|
||||
cs_instance:
|
||||
name: "{{ inventory_hostname_short }}"
|
||||
|
|
|
@ -177,9 +177,8 @@ examples to get you started:
|
|||
|
||||
# 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
|
||||
connection: local
|
||||
gather_facts: no
|
||||
tasks:
|
||||
- debug: msg="Container - {{ inventory_hostname }}"
|
||||
|
|
|
@ -24,20 +24,21 @@ package repositories, so you will likely need to install it via pip:
|
|||
|
||||
$ pip install pyrax
|
||||
|
||||
The following steps will often execute from the control machine against the Rackspace Cloud API, so it makes sense
|
||||
to add localhost to the inventory file. (Ansible may not require this manual step in the future):
|
||||
Ansible creates an implicit localhost that executes in the same context as the ``ansible-playbook`` and the other CLI tools.
|
||||
If for any reason you need or want to have it in your inventory you should do something like the following:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[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:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
- hosts: localhost
|
||||
connection: local
|
||||
gather_facts: False
|
||||
tasks:
|
||||
|
||||
|
@ -103,7 +104,7 @@ Here is a basic example of provisioning an instance in ad-hoc mode:
|
|||
|
||||
.. 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:
|
||||
|
||||
|
@ -111,8 +112,7 @@ Here's what it would look like in a playbook, assuming the parameters were defin
|
|||
|
||||
tasks:
|
||||
- name: Provision a set of instances
|
||||
local_action:
|
||||
module: rax
|
||||
rax:
|
||||
name: "{{ rax_name }}"
|
||||
flavor: "{{ rax_flavor }}"
|
||||
image: "{{ rax_image }}"
|
||||
|
@ -120,14 +120,14 @@ Here's what it would look like in a playbook, assuming the parameters were defin
|
|||
group: "{{ group }}"
|
||||
wait: yes
|
||||
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.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
- name: Add the instances we created (by public IP) to the group 'raxhosts'
|
||||
local_action:
|
||||
module: add_host
|
||||
add_host:
|
||||
hostname: "{{ item.name }}"
|
||||
ansible_host: "{{ item.rax_accessipv4 }}"
|
||||
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
|
||||
tasks:
|
||||
- name: Get facts about servers
|
||||
local_action:
|
||||
module: rax_facts
|
||||
rax_facts:
|
||||
credentials: ~/.raxpub
|
||||
name: "{{ inventory_hostname }}"
|
||||
region: "{{ rax_region }}"
|
||||
delegate_to: localhost
|
||||
- name: Map some facts
|
||||
set_fact:
|
||||
ansible_host: "{{ rax_accessipv4 }}"
|
||||
|
@ -418,21 +418,19 @@ Create an isolated cloud network and build a server
|
|||
|
||||
- name: Build Servers on an Isolated Network
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: False
|
||||
tasks:
|
||||
- name: Network create request
|
||||
local_action:
|
||||
module: rax_network
|
||||
rax_network:
|
||||
credentials: ~/.raxpub
|
||||
label: my-net
|
||||
cidr: 192.168.3.0/24
|
||||
region: IAD
|
||||
state: present
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Server create request
|
||||
local_action:
|
||||
module: rax
|
||||
rax:
|
||||
credentials: ~/.raxpub
|
||||
name: web%04d.example.org
|
||||
flavor: 2
|
||||
|
@ -449,6 +447,7 @@ Create an isolated cloud network and build a server
|
|||
wait: yes
|
||||
wait_timeout: 360
|
||||
register: rax
|
||||
delegate_to: localhost
|
||||
|
||||
.. _complete_environment:
|
||||
|
||||
|
@ -462,12 +461,10 @@ Build a complete webserver environment with servers, custom networks and load ba
|
|||
---
|
||||
- name: Build environment
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: False
|
||||
tasks:
|
||||
- name: Load Balancer create request
|
||||
local_action:
|
||||
module: rax_clb
|
||||
rax_clb:
|
||||
credentials: ~/.raxpub
|
||||
name: my-lb
|
||||
port: 80
|
||||
|
@ -483,8 +480,7 @@ Build a complete webserver environment with servers, custom networks and load ba
|
|||
register: clb
|
||||
|
||||
- name: Network create request
|
||||
local_action:
|
||||
module: rax_network
|
||||
rax_network:
|
||||
credentials: ~/.raxpub
|
||||
label: my-net
|
||||
cidr: 192.168.3.0/24
|
||||
|
@ -493,8 +489,7 @@ Build a complete webserver environment with servers, custom networks and load ba
|
|||
register: network
|
||||
|
||||
- name: Server create request
|
||||
local_action:
|
||||
module: rax
|
||||
rax:
|
||||
credentials: ~/.raxpub
|
||||
name: web%04d.example.org
|
||||
flavor: performance1-1
|
||||
|
@ -513,8 +508,7 @@ Build a complete webserver environment with servers, custom networks and load ba
|
|||
register: rax
|
||||
|
||||
- name: Add servers to web host group
|
||||
local_action:
|
||||
module: add_host
|
||||
add_host:
|
||||
hostname: "{{ item.name }}"
|
||||
ansible_host: "{{ item.rax_accessipv4 }}"
|
||||
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'
|
||||
|
||||
- name: Add servers to Load balancer
|
||||
local_action:
|
||||
module: rax_clb_nodes
|
||||
rax_clb_nodes:
|
||||
credentials: ~/.raxpub
|
||||
load_balancer_id: "{{ clb.balancer.id }}"
|
||||
address: "{{ item.rax_networks.private|first }}"
|
||||
|
@ -578,12 +571,10 @@ Using a Control Machine
|
|||
|
||||
- name: Create an exact count of servers
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: False
|
||||
tasks:
|
||||
- name: Server build requests
|
||||
local_action:
|
||||
module: rax
|
||||
rax:
|
||||
credentials: ~/.raxpub
|
||||
name: web%03d.example.org
|
||||
flavor: performance1-1
|
||||
|
@ -598,8 +589,7 @@ Using a Control Machine
|
|||
register: rax
|
||||
|
||||
- name: Add servers to in memory groups
|
||||
local_action:
|
||||
module: add_host
|
||||
add_host:
|
||||
hostname: "{{ item.name }}"
|
||||
ansible_host: "{{ item.rax_accessipv4 }}"
|
||||
ansible_ssh_pass: "{{ item.rax_adminpass }}"
|
||||
|
@ -613,9 +603,11 @@ Using a Control Machine
|
|||
hosts: new_web
|
||||
gather_facts: false
|
||||
tasks:
|
||||
- name: ensure we run all tasks from localhost
|
||||
delegate_to: localhost
|
||||
block:
|
||||
- name: Wait for rackconnnect automation to complete
|
||||
local_action:
|
||||
module: rax_facts
|
||||
rax_facts:
|
||||
credentials: ~/.raxpub
|
||||
id: "{{ rax_id }}"
|
||||
region: DFW
|
||||
|
@ -625,8 +617,7 @@ Using a Control Machine
|
|||
delay: 10
|
||||
|
||||
- name: Wait for managed cloud automation to complete
|
||||
local_action:
|
||||
module: rax_facts
|
||||
rax_facts:
|
||||
credentials: ~/.raxpub
|
||||
id: "{{ rax_id }}"
|
||||
region: DFW
|
||||
|
@ -640,10 +631,10 @@ Using a Control Machine
|
|||
gather_facts: false
|
||||
tasks:
|
||||
- name: Get facts about servers
|
||||
local_action:
|
||||
module: rax_facts
|
||||
rax_facts:
|
||||
name: "{{ inventory_hostname }}"
|
||||
region: DFW
|
||||
delegate_to: localhost
|
||||
- name: Map some facts
|
||||
set_fact:
|
||||
ansible_host: "{{ rax_accessipv4 }}"
|
||||
|
@ -668,8 +659,10 @@ Using Ansible Pull
|
|||
---
|
||||
- name: Ensure Rackconnect and Managed Cloud Automation is complete
|
||||
hosts: all
|
||||
connection: local
|
||||
tasks:
|
||||
- name: ensure we run all tasks from localhost
|
||||
delegate_to: localhost
|
||||
block:
|
||||
- name: Check for completed bootstrap
|
||||
stat:
|
||||
path: /etc/bootstrap_complete
|
||||
|
@ -706,7 +699,6 @@ Using Ansible Pull
|
|||
|
||||
- name: Base Configure Servers
|
||||
hosts: all
|
||||
connection: local
|
||||
roles:
|
||||
- role: users
|
||||
|
||||
|
@ -725,7 +717,6 @@ Using Ansible Pull with XenStore
|
|||
---
|
||||
- name: Ensure Rackconnect and Managed Cloud Automation is complete
|
||||
hosts: all
|
||||
connection: local
|
||||
tasks:
|
||||
- name: Check for completed bootstrap
|
||||
stat:
|
||||
|
@ -776,7 +767,6 @@ Using Ansible Pull with XenStore
|
|||
|
||||
- name: Base Configure Servers
|
||||
hosts: all
|
||||
connection: local
|
||||
roles:
|
||||
- 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
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: no
|
||||
tasks:
|
||||
- name: Clone the template
|
||||
|
|
Loading…
Reference in a new issue