|
249 | 249 | description: Use out of band IP as `ansible host`
|
250 | 250 | type: boolean
|
251 | 251 | default: false
|
| 252 | + rename_variables: |
| 253 | + description: |
| 254 | + - Rename variables evaluated by nb_inventory, before writing them. |
| 255 | + - Each list entry contains a dict with a 'pattern' and a 'repl'. |
| 256 | + - Both 'pattern' and 'repl' are regular expressions. |
| 257 | + - The first matching expression is used, subsequent matches are ignored. |
| 258 | + - Internally `re.sub` is used. |
| 259 | + type: list |
| 260 | + elements: dict |
| 261 | + default: [] |
252 | 262 | """
|
253 | 263 |
|
254 | 264 | EXAMPLES = """
|
|
364 | 374 | import uuid
|
365 | 375 | import math
|
366 | 376 | import os
|
| 377 | +import re |
367 | 378 | import datetime
|
368 | 379 | from copy import deepcopy
|
369 | 380 | from functools import partial
|
@@ -1905,31 +1916,37 @@ def _setup_nested_groups(self, group, lookup, parent_lookup):
|
1905 | 1916 |
|
1906 | 1917 | return transformed_group_names
|
1907 | 1918 |
|
| 1919 | + def _set_variable(self, hostname, key, value): |
| 1920 | + for item in self.rename_variables: |
| 1921 | + if item["pattern"].match(key): |
| 1922 | + key = item["pattern"].sub(item["repl"], key) |
| 1923 | + break |
| 1924 | + |
| 1925 | + self.inventory.set_variable(hostname, key, value) |
| 1926 | + |
1908 | 1927 | def _fill_host_variables(self, host, hostname):
|
1909 | 1928 | extracted_primary_ip = self.extract_primary_ip(host=host)
|
1910 | 1929 | if extracted_primary_ip:
|
1911 |
| - self.inventory.set_variable(hostname, "ansible_host", extracted_primary_ip) |
| 1930 | + self._set_variable(hostname, "ansible_host", extracted_primary_ip) |
1912 | 1931 |
|
1913 | 1932 | if self.ansible_host_dns_name:
|
1914 | 1933 | extracted_dns_name = self.extract_dns_name(host=host)
|
1915 | 1934 | if extracted_dns_name:
|
1916 |
| - self.inventory.set_variable( |
1917 |
| - hostname, "ansible_host", extracted_dns_name |
1918 |
| - ) |
| 1935 | + self._set_variable(hostname, "ansible_host", extracted_dns_name) |
1919 | 1936 |
|
1920 | 1937 | extracted_primary_ip4 = self.extract_primary_ip4(host=host)
|
1921 | 1938 | if extracted_primary_ip4:
|
1922 |
| - self.inventory.set_variable(hostname, "primary_ip4", extracted_primary_ip4) |
| 1939 | + self._set_variable(hostname, "primary_ip4", extracted_primary_ip4) |
1923 | 1940 |
|
1924 | 1941 | extracted_primary_ip6 = self.extract_primary_ip6(host=host)
|
1925 | 1942 | if extracted_primary_ip6:
|
1926 |
| - self.inventory.set_variable(hostname, "primary_ip6", extracted_primary_ip6) |
| 1943 | + self._set_variable(hostname, "primary_ip6", extracted_primary_ip6) |
1927 | 1944 |
|
1928 | 1945 | extracted_oob_ip = self.extract_oob_ip(host=host)
|
1929 | 1946 | if extracted_oob_ip:
|
1930 |
| - self.inventory.set_variable(hostname, "oob_ip", extracted_oob_ip) |
| 1947 | + self._set_variable(hostname, "oob_ip", extracted_oob_ip) |
1931 | 1948 | if self.oob_ip_as_primary_ip:
|
1932 |
| - self.inventory.set_variable(hostname, "ansible_host", extracted_oob_ip) |
| 1949 | + self._set_variable(hostname, "ansible_host", extracted_oob_ip) |
1933 | 1950 |
|
1934 | 1951 | for attribute, extractor in self.group_extractors.items():
|
1935 | 1952 | extracted_value = extractor(host)
|
@@ -1965,9 +1982,9 @@ def _fill_host_variables(self, host, hostname):
|
1965 | 1982 | )
|
1966 | 1983 | ):
|
1967 | 1984 | for key, value in extracted_value.items():
|
1968 |
| - self.inventory.set_variable(hostname, key, value) |
| 1985 | + self._set_variable(hostname, key, value) |
1969 | 1986 | else:
|
1970 |
| - self.inventory.set_variable(hostname, attribute, extracted_value) |
| 1987 | + self._set_variable(hostname, attribute, extracted_value) |
1971 | 1988 |
|
1972 | 1989 | def _get_host_virtual_chassis_master(self, host):
|
1973 | 1990 | virtual_chassis = host.get("virtual_chassis", None)
|
@@ -2146,4 +2163,15 @@ def parse(self, inventory, loader, path, cache=True):
|
2146 | 2163 | self.ansible_host_dns_name = self.get_option("ansible_host_dns_name")
|
2147 | 2164 | self.racks = self.get_option("racks")
|
2148 | 2165 |
|
| 2166 | + # Compile regular expressions, if any |
| 2167 | + self.rename_variables = self.parse_rename_variables( |
| 2168 | + self.get_option("rename_variables") |
| 2169 | + ) |
| 2170 | + |
2149 | 2171 | self.main()
|
| 2172 | + |
| 2173 | + def parse_rename_variables(self, rename_variables): |
| 2174 | + return [ |
| 2175 | + {"pattern": re.compile(i["pattern"]), "repl": i["repl"]} |
| 2176 | + for i in rename_variables or () |
| 2177 | + ] |
0 commit comments