Skip to content

Instantly share code, notes, and snippets.

@wilpig
Created October 18, 2021 19:08
Show Gist options
  • Save wilpig/8e46fa06e7a9f1cf9987793104e6eb24 to your computer and use it in GitHub Desktop.
Save wilpig/8e46fa06e7a9f1cf9987793104e6eb24 to your computer and use it in GitHub Desktop.
- name: LTM Configuration Management A Devices
hosts: all
connection: local
gather_facts: false
# strategy: free
vars:
provider:
server: "{{ inventory_hostname }}"
user: "{{ f5svc_username }}"
password: "{{ f5svc_password }}"
server_port: "443"
validate_certs: "no"
transport: rest
wip: 'testwip.gslb.vumc.org'
# wip: 'tableau.gslb.vumc.org'
test:
- Test_1
- Test_2
dc1:
- DC1
- VUH
collections:
- f5networks.f5_modules
tasks:
# - include_tasks: irules.yml
- name: Collect BIG-IP information
bigip_device_info:
provider: "{{ provider }}"
gather_subset:
- gtm-servers
- gtm-a-pools
- gtm-a-wide-ips
delegate_to: localhost
# - debug:
# var: ansible_facts
# - debug:
# var: ansible_facts.net_gtm_a_wide_ips|json_query(wquery)|first
- set_fact:
servers: "{{ (servers|default([]) + ansible_facts.net_gtm_servers|json_query(query))|flatten }}"
vars:
query: "[?contains(datacenter, '{{ item }}')].addresses[*].deviceName"
loop: '{{ test }}'
# - debug:
# var: servers
# Find name of the pool of the WIP
- set_fact:
pool: "{{ ansible_facts.net_gtm_a_wide_ips|json_query(wquery)|first|json_query('[*].name')|first }}"
vars:
wquery: "[?name==`{{ wip }}`].pools[*].{name: name}"
# - debug:
# var: ansible_facts.net_gtm_a_pools|json_query(query)|first|sort(attribute='member_order')
# vars:
# query: "[?name==`{{ pool }}`].members[*]"
# - debug:
# var: ansible_facts.net_gtm_a_pools|json_query(query)|first|sort(attribute='member_order')
# vars:
# query: "[?name==`{{ pool }}`].members[*].{name: name, member_order: member_order, partition: partition, subPath: subPath}"
- name: checking members in generic server pools
set_fact:
members: "{{ members|default([]) + [{ 'server_name': item.name.split(':')[0], 'virtual_server': item.name.split(':')[1], 'member_order': item.member_order, 'partition': item.partition }] }}"
when: item.subPath == None
loop: "{{ ansible_facts.net_gtm_a_pools|json_query(query)|first|sort(attribute='member_order')|reverse }}"
vars:
query: "[?name==`{{ pool }}`].members[*].{name: name, member_order: member_order, partition: partition, subPath: subPath}"
- name: checking members of vips
set_fact:
members: "{{ members|default([]) + [{ 'server_name': item.name.split(':')[0], 'virtual_server': item.name.split(':')[1]|default(item.subPath.split(':')[1]+'/'+item.name), 'member_order': item.member_order, 'partition': item.partition }] }}"
when: item.subPath != None
loop: "{{ ansible_facts.net_gtm_a_pools|json_query(query)|first|sort(attribute='member_order')|reverse }}"
vars:
query: "[?name==`{{ pool }}`].members[*].{name: name, member_order: member_order, partition: partition, subPath: subPath}"
# Reverse the order of the pool members
- set_fact:
sorted_members: "{{ sorted_members|default([]) + [{ 'server_name': item.server_name, 'virtual_server': item.virtual_server, 'member_order': idx, 'partition': item.partition }] }}"
loop: "{{ members|reverse }}"
loop_control:
index_var: idx
- debug:
var: members
- debug:
var: sorted_members
- meta: end_play
# Update the order of the pool members on the GTM
- name: Add GTM pool members aggregate, remove non aggregates
bigip_gtm_pool_member:
pool: '{{ pool }}'
type: a
aggregate: "{{ members }}"
provider: "{{ provider }}"
delegate_to: localhost
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment