From ce17b057e4bd5dfaa2cc72991736a1b82704488c Mon Sep 17 00:00:00 2001 From: Brett Holman Date: Tue, 23 Jan 2024 11:47:35 -0700 Subject: [PATCH] Revert "Use grep for faster parsing of cloud config in ds-identify (#4327)" RH-Author: Ani Sinha RH-MergeRequest: 122: Revert "Use grep for faster parsing of cloud config in ds-identify (#4327)" RH-Jira: RHEL-22248 RH-Acked-by: Emanuele Giuseppe Esposito RH-Acked-by: Jon Maloy RH-Commit: [1/1] f14ebd0055aad9340249e83381cf976debdbe38d This reverts commit 816e05d4830f5e789f1f85ef926e2849156bff3a. Reopens LP: 2030729 Fixes GH-4794 (cherry picked from commit 8ff94fe9493ad88344eb8bbf2f023c6ba2db5206) Signed-off-by: Ani Sinha --- tests/unittests/test_ds_identify.py | 146 +--------------------------- tools/ds-identify | 31 +++--- 2 files changed, 15 insertions(+), 162 deletions(-) diff --git a/tests/unittests/test_ds_identify.py b/tests/unittests/test_ds_identify.py index ca206fb5..ba0bf779 100644 --- a/tests/unittests/test_ds_identify.py +++ b/tests/unittests/test_ds_identify.py @@ -57,146 +57,6 @@ BLKID_UEFI_UBUNTU = [ ] -DEFAULT_CLOUD_CONFIG = """\ -# The top level settings are used as module -# and base configuration. -# A set of users which may be applied and/or used by various modules -# when a 'default' entry is found it will reference the 'default_user' -# from the distro configuration specified below -users: - - default - -# If this is set, 'root' will not be able to ssh in and they -# will get a message to login instead as the default $user -disable_root: true - -# This will cause the set+update hostname module to not operate (if true) -preserve_hostname: false - -# If you use datasource_list array, keep array items in a single line. -# If you use multi line array, ds-identify script won't read array items. -# Example datasource config -# datasource: -# Ec2: -# metadata_urls: [ 'blah.com' ] -# timeout: 5 # (defaults to 50 seconds) -# max_wait: 10 # (defaults to 120 seconds) - -# The modules that run in the 'init' stage -cloud_init_modules: - - migrator - - seed_random - - bootcmd - - write-files - - growpart - - resizefs - - disk_setup - - mounts - - set_hostname - - update_hostname - - update_etc_hosts - - ca-certs - - rsyslog - - users-groups - - ssh - -# The modules that run in the 'config' stage -cloud_config_modules: - - wireguard - - snap - - ubuntu_autoinstall - - ssh-import-id - - keyboard - - locale - - set-passwords - - grub-dpkg - - apt-pipelining - - apt-configure - - ubuntu-advantage - - ntp - - timezone - - disable-ec2-metadata - - runcmd - - byobu - -# The modules that run in the 'final' stage -cloud_final_modules: - - package-update-upgrade-install - - fan - - landscape - - lxd - - ubuntu-drivers - - write-files-deferred - - puppet - - chef - - ansible - - mcollective - - salt-minion - - reset_rmc - - refresh_rmc_and_interface - - rightscale_userdata - - scripts-vendor - - scripts-per-once - - scripts-per-boot - - scripts-per-instance - - scripts-user - - ssh-authkey-fingerprints - - keys-to-console - - install-hotplug - - phone-home - - final-message - - power-state-change - -# System and/or distro specific settings -# (not accessible to handlers/transforms) -system_info: - # This will affect which distro class gets used - distro: ubuntu - # Default user name + that default users groups (if added/used) - default_user: - name: ubuntu - lock_passwd: True - gecos: Ubuntu - groups: [adm, audio, cdrom, floppy, lxd, netdev, plugdev, sudo, video] - sudo: ["ALL=(ALL) NOPASSWD:ALL"] - shell: /bin/bash - network: - renderers: ['netplan', 'eni', 'sysconfig'] - activators: ['netplan', 'eni', 'network-manager', 'networkd'] - # Automatically discover the best ntp_client - ntp_client: auto - # Other config here will be given to the distro class and/or path classes - paths: - cloud_dir: /var/lib/cloud/ - templates_dir: /etc/cloud/templates/ - package_mirrors: - - arches: [i386, amd64] - failsafe: - primary: http://archive.ubuntu.com/ubuntu - security: http://security.ubuntu.com/ubuntu - search: - primary: - - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/ - - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/ - - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/ - security: [] - - arches: [arm64, armel, armhf] - failsafe: - primary: http://ports.ubuntu.com/ubuntu-ports - security: http://ports.ubuntu.com/ubuntu-ports - search: - primary: - - http://%(ec2_region)s.ec2.ports.ubuntu.com/ubuntu-ports/ - - http://%(availability_zone)s.clouds.ports.ubuntu.com/ubuntu-ports/ - - http://%(region)s.clouds.ports.ubuntu.com/ubuntu-ports/ - security: [] - - arches: [default] - failsafe: - primary: http://ports.ubuntu.com/ubuntu-ports - security: http://ports.ubuntu.com/ubuntu-ports - ssh_svcname: ssh -""" - POLICY_FOUND_ONLY = "search,found=all,maybe=none,notfound=disabled" POLICY_FOUND_OR_MAYBE = "search,found=all,maybe=all,notfound=disabled" DI_DEFAULT_POLICY = "search,found=all,maybe=all,notfound=disabled" @@ -279,10 +139,6 @@ class DsIdentifyBase(CiTestCase): if files is None: files = {} - cloudcfg = "etc/cloud/cloud.cfg" - if cloudcfg not in files: - files[cloudcfg] = DEFAULT_CLOUD_CONFIG - if rootd is None: rootd = self.tmp_dir() @@ -1305,7 +1161,7 @@ VALID_CFG = { # Also include a datasource list of more than just # [NoCloud, None], because that would automatically select # NoCloud without checking - "etc/cloud/cloud.cfg": dedent( + "/etc/cloud/cloud.cfg": dedent( """\ datasource_list: [ Azure, Openstack, NoCloud, None ] datasource: diff --git a/tools/ds-identify b/tools/ds-identify index 7a537278..ec2cc18a 100755 --- a/tools/ds-identify +++ b/tools/ds-identify @@ -777,24 +777,21 @@ check_config() { if [ "$1" = "$files" -a ! -f "$1" ]; then return 1 fi - local line="" ret="" found=0 found_fn="" oifs="$IFS" out="" - out=$(grep "$key\"\?:" "$@" 2>/dev/null) - IFS=${CR} - for line in $out; do - # drop '# comment' - line=${line%%#*} - # if more than one file was 'grep'ed, then grep will output filename: - # but if only one file, line will not be prefixed. - if [ $# -eq 1 ]; then - found_fn="$1" - else - found_fn="${line%%:*}" - line=${line#*:} - fi - ret=${line#*: }; - found=$((found+1)) + local fname="" line="" ret="" found=0 found_fn="" + # shellcheck disable=2094 + for fname in "$@"; do + [ -f "$fname" ] || continue + while read line; do + line=${line%%#*} + case "$line" in + $key:\ *|"${key}":) + ret=${line#*:}; + ret=${ret# }; + found=$((found+1)) + found_fn="$fname";; + esac + done <"$fname" done - IFS="$oifs" if [ $found -ne 0 ]; then _RET="$ret" _RET_fname="$found_fn" -- 2.41.0