From 1ded3f9890148b974d2f65c6f3df1bbdbfbaed43 Mon Sep 17 00:00:00 2001 From: jctanner Date: Mon, 15 Oct 2018 21:40:51 -0400 Subject: [PATCH] Handle non-ascii characters in foreman.py (#46779) * Handle non-ascii characters in foreman.py * Add test to validate non-ascii results --- contrib/inventory/foreman.py | 22 ++++++++++--- .../targets/inventory_foreman_script/runme.sh | 31 +++++++++++++++++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/contrib/inventory/foreman.py b/contrib/inventory/foreman.py index 99200168f67..7c431933e07 100755 --- a/contrib/inventory/foreman.py +++ b/contrib/inventory/foreman.py @@ -46,6 +46,8 @@ if LooseVersion(requests.__version__) < LooseVersion('1.1.0'): from requests.auth import HTTPBasicAuth +from ansible.module_utils._text import to_text + def json_format_dict(data, pretty=False): """Converts a dict to a JSON object and dumps it as a formatted string""" @@ -285,20 +287,32 @@ class ForemanInventory(object): group = 'hostgroup' val = host.get('%s_title' % group) or host.get('%s_name' % group) if val: - safe_key = self.to_safe('%s%s_%s' % (self.group_prefix, group, val.lower())) + safe_key = self.to_safe('%s%s_%s' % ( + to_text(self.group_prefix), + group, + to_text(val).lower() + )) self.inventory[safe_key].append(dns_name) # Create ansible groups for environment, location and organization for group in ['environment', 'location', 'organization']: val = host.get('%s_name' % group) if val: - safe_key = self.to_safe('%s%s_%s' % (self.group_prefix, group, val.lower())) + safe_key = self.to_safe('%s%s_%s' % ( + to_text(self.group_prefix), + group, + to_text(val).lower() + )) self.inventory[safe_key].append(dns_name) for group in ['lifecycle_environment', 'content_view']: val = host.get('content_facet_attributes', {}).get('%s_name' % group) if val: - safe_key = self.to_safe('%s%s_%s' % (self.group_prefix, group, val.lower())) + safe_key = self.to_safe('%s%s_%s' % ( + to_text(self.group_prefix), + group, + to_text(val).lower() + )) self.inventory[safe_key].append(dns_name) params = self._resolve_params(host_params) @@ -307,7 +321,7 @@ class ForemanInventory(object): # attributes. groupby = dict() for k, v in params.items(): - groupby[k] = self.to_safe(str(v)) + groupby[k] = self.to_safe(to_text(v)) # The name of the ansible groups is given by group_patterns: for pattern in self.group_patterns: diff --git a/test/integration/targets/inventory_foreman_script/runme.sh b/test/integration/targets/inventory_foreman_script/runme.sh index 86298f872c5..72add9e7b41 100755 --- a/test/integration/targets/inventory_foreman_script/runme.sh +++ b/test/integration/targets/inventory_foreman_script/runme.sh @@ -6,6 +6,11 @@ export FOREMAN_HOST="${FOREMAN_HOST:-localhost}" export FOREMAN_PORT="${FOREMAN_PORT:-8080}" export FOREMAN_INI_PATH="${OUTPUT_DIR}/foreman.ini" + +############################################ +# SMOKETEST WITH SIMPLE INI +############################################ + cat > "$FOREMAN_INI_PATH" < "$FOREMAN_INI_PATH" <