--- - name: Test IP address parsing - extract last two octets hosts: localhost gather_facts: false vars: test_ip: "192.168.1.100" tasks: - name: Method 1 - Using split and join ansible.builtin.set_fact: last_two_octets_1: "{{ test_ip.split('.')[-2:] | join('.') }}" - name: Display results ansible.builtin.debug: msg: | Original IP: {{ test_ip }} Method 1 (split + join): {{ last_two_octets_1 }} - name: Test with different IP addresses ansible.builtin.set_fact: test_ips: - "10.0.0.1" - "172.16.254.1" - "192.168.100.200" - "8.8.8.8" - name: Process multiple IPs ansible.builtin.set_fact: results: "{{ results | default([]) + [{'ip': item, 'last_two': item.split('.')[-2:] | join('.')}] }}" loop: "{{ test_ips }}" - name: Display all results ansible.builtin.debug: msg: "{{ results }}" # New tasks for 3-digit formatting - name: Method 1 - Format last octet to 3 digits using zfill ansible.builtin.set_fact: last_two_octets_3digits_1: "{{ test_ip.split('.')[-2] }}.{{ (test_ip.split('.')[-1] | int) | string | zfill(3) }}" - name: Method 2 - Format last octet to 3 digits using format ansible.builtin.set_fact: last_two_octets_3digits_2: "{{ test_ip.split('.')[-2] }}.{{ '%03d' % (test_ip.split('.')[-1] | int) }}" - name: Method 3 - Format last octet to 3 digits using sprintf ansible.builtin.set_fact: last_two_octets_3digits_3: "{{ test_ip.split('.')[-2] }}.{{ (test_ip.split('.')[-1] | int) | string | sprintf('%03d') }}" - name: Display 3-digit formatting results ansible.builtin.debug: msg: | Original IP: {{ test_ip }} Method 1 (zfill): {{ last_two_octets_3digits_1 }} Method 2 (format): {{ last_two_octets_3digits_2 }} Method 3 (sprintf): {{ last_two_octets_3digits_3 }} - name: Test 3-digit formatting with different IPs ansible.builtin.set_fact: test_ips_3digits: - "10.0.0.1" - "172.16.254.1" - "192.168.100.200" - "8.8.8.8" - "192.168.1.10" - "10.0.0.255" - name: Process multiple IPs with 3-digit formatting ansible.builtin.set_fact: results_3digits: "{{ results_3digits | default([]) + [{'ip': item, 'last_two_3digits': item.split('.')[-2] + '.' + ('%03d' % (item.split('.')[-1] | int))}] }}" loop: "{{ test_ips_3digits }}" - name: Display all 3-digit results ansible.builtin.debug: msg: "{{ results_3digits }}" # VM ID creation without dot separator - name: Create vm_id using format (no dot separator) ansible.builtin.set_fact: vm_id: "{{ test_ip.split('.')[-2] }}{{ '%03d' % (test_ip.split('.')[-1] | int) }}" - name: Create vm_id using sprintf (no dot separator) ansible.builtin.set_fact: vm_id_sprintf: "{{ test_ip.split('.')[-2] }}{{ (test_ip.split('.')[-1] | int) | string | sprintf('%03d') }}" - name: Display vm_id results ansible.builtin.debug: msg: | Original IP: {{ test_ip }} VM ID (format): {{ vm_id }} VM ID (sprintf): {{ vm_id_sprintf }} - name: Test vm_id with different IPs ansible.builtin.set_fact: vm_id_results: "{{ vm_id_results | default([]) + [{'ip': item, 'vm_id': item.split('.')[-2] + ('%03d' % (item.split('.')[-1] | int))}] }}" loop: "{{ test_ips_3digits }}" - name: Display all vm_id results ansible.builtin.debug: msg: "{{ vm_id_results }}"