Hi,
I'm looking for some help in setting up a Linode Nodebalancer, but I think 
my question is more about how to build a more dynamic playbook using the 
'linode.cloud.nodebalancer' module from Ansible Galaxy.  

So I could hardcode my playbook to use two nodes (hosts) and thier private 
IPs for the setup.  But what if I want to have three hosts or more behind 
the nodebalancer?  An example playbook looks like this:

---
- name: Create single linode nodebalancer
  hosts: localhost
  tasks:

    - name: Create a Linode NodeBalancer
      linode.cloud.nodebalancer:
        label: "{{ nb_label }}"
        region: "{{ nb_region }}"
        tags: nb_tags
        state: present
        configs:
          - port: 80
            protocol: http
            algorithm: roundrobin
            nodes:
              - label: 'test-node1'
                address: 192.168.10.3:80
               - label: 'test-node2'
                 address: 192.168.175.221:80

So I think could do do a loop over the nodes: block, but the role doesn't 
seem to support a 'state: present' or 'state:absent' flag, so I *think* 
that I have to run my task with all my definitions setup ahead of time.  
Which kind of ruins the ideal of idempotency.  

So would this be the way to do a loop, starting with creating the linodes 
and setting facts: 
   
---
- name: Create linode using linode.cloud.instance
  linode.cloud.instance:
    label: "{{ linode.name }}"
    type: "{{ linode.type | default(def_type) }}"
    region: "{{ linode.region | default(def_region) }}"
    image: "{{ linode.image | default(def_image) }}"
    authorized_keys: "{{ ssh_keys }}"
    root_pass: "{{ password }}"
    state: present
    private_ip: true
    wait: true
  register: my_linode

- name: "Found one or more linodes"
  debug:
    msg="Name={{ my_linode.instance.label }}, ID={{ my_linode.instance.id 
}}, IP(s)= {{ my_linode.i\
nstance.ipv4 }}"
  when: my_linode|length > 0


- name: "Set a fact of private IPs"
  set_fact:
    private_ips: "{{ private_ips }} + [ { label: {{ 
my_linode.instance.label }} , IP: {{ my_linode.\
instance.ipv4[1] }} } ]"



- name: Create a Linode NodeBalancer using loop
      linode.cloud.nodebalancer:
        label: "{{ nb_label }}"
        region: "{{ nb_region }}"
        tags: nb_tags
        state: present
        configs:
          - port: 80
            protocol: http
            algorithm: roundrobin
            nodes:
              - label: {{ item.label }}
                address: {{ item.IP}}
             loop:
                 private_ips

Or do I need to do something funkier?  This is honestly where my ansible-fu 
fails me...

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/93926f40-c532-4adb-960d-c092dc09bb06n%40googlegroups.com.

Reply via email to