From 36eab6a1c3fec99421dc5616dfc32ad1e72bcc15 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Andr=C3=A9?= <martin.andre@kvhasia.com>
Date: Wed, 1 Jul 2015 22:19:51 +0900
Subject: [PATCH] Sort variables and remove duplicates for min env doc

The script generating docs/minimal-environment-vars.md now sorts
variables alphabetically per service and remove duplicates.

Update minimal-environment-vars.md.

Change-Id: I30cc674b6e9834f2a6c771bd30539a21af39b228
Closes-Bug: #1470504
---
 docs/minimal-environment-vars.md | 314 ++++++++++++++++---------------
 tools/min-env.sh                 |  20 +-
 2 files changed, 172 insertions(+), 162 deletions(-)

diff --git a/docs/minimal-environment-vars.md b/docs/minimal-environment-vars.md
index 6578248619..8e11781a3a 100644
--- a/docs/minimal-environment-vars.md
+++ b/docs/minimal-environment-vars.md
@@ -4,10 +4,10 @@ In order for each service to function, there is a minimum set of required variab
 
 # Barbican
 
-    KEYSTONE_ADMIN_TOKEN
+    BARBICAN_ADMIN_PASSWORD
     KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_PORT
-    BARBICAN_ADMIN_PASSWORD
+    KEYSTONE_ADMIN_TOKEN
 
 # Ceilometer-alarm
 
@@ -15,33 +15,33 @@ In order for each service to function, there is a minimum set of required variab
 
 # Ceilometer-api
 
-    CEILOMETER_DB_USER
+    ADMIN_TENANT_NAME
+    CEILOMETER_ADMIN_PASSWORD
+    CEILOMETER_API_SERVICE_HOST
     CEILOMETER_DB_NAME
     CEILOMETER_DB_PASSWORD
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_AUTH_PROTOCOL
+    CEILOMETER_DB_USER
+    CEILOMETER_KEYSTONE_USER
     KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_PORT
-    ADMIN_TENANT_NAME
-    CEILOMETER_KEYSTONE_USER
-    CEILOMETER_ADMIN_PASSWORD
-    CEILOMETER_API_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
+    KEYSTONE_AUTH_PROTOCOL
     PUBLIC_IP
 
 # Ceilometer-base
 
-    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_PORT
+    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_PUBLIC_SERVICE_HOST
     dump_vars
 
 # Ceilometer-central
 
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_AUTH_PROTOCOL
     KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_PORT
+    KEYSTONE_ADMIN_TOKEN
+    KEYSTONE_AUTH_PROTOCOL
 
 # Ceilometer-collector
 
@@ -59,116 +59,112 @@ In order for each service to function, there is a minimum set of required variab
 
 # Cinder-api
 
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_ADMIN_SERVICE_HOST
     ADMIN_TENANT_NAME
-    PUBLIC_IP
     CINDER_API_SERVICE_HOST
-    KEYSTONE_AUTH_PROTOCOL
-    KEYSTONE_ADMIN_SERVICE_PORT
-    CINDER_KEYSTONE_USER
-    CINDER_KEYSTONE_PASSWORD
     CINDER_API_SERVICE_LISTEN
     CINDER_API_SERVICE_PORT
+    CINDER_KEYSTONE_PASSWORD
+    CINDER_KEYSTONE_USER
+    KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_SERVICE_PORT
+    KEYSTONE_ADMIN_TOKEN
+    KEYSTONE_AUTH_PROTOCOL
+    PUBLIC_IP
 
 # Cinder-backup
 
+    CINDER_BACKUP_API_CLASS
     CINDER_BACKUP_DRIVER
     CINDER_BACKUP_MANAGER
-    CINDER_BACKUP_API_CLASS
     CINDER_BACKUP_NAME_TEMPLATE
 
 # Cinder-base
 
+    ADMIN_TENANT_NAME
+    CINDER_API_VERSION
+    CINDER_DB_NAME
     CINDER_DB_PASSWORD
+    CINDER_DB_USER
     CINDER_KEYSTONE_PASSWORD
-    KEYSTONE_PUBLIC_SERVICE_HOST
-    RABBITMQ_SERVICE_HOST
+    CINDER_KEYSTONE_USER
     GLANCE_API_SERVICE_HOST
+    GLANCE_API_SERVICE_PORT
+    KEYSTONE_AUTH_PROTOCOL
+    KEYSTONE_PUBLIC_SERVICE_HOST
     MARIADB_SERVICE_HOST
+    PUBLIC_IP
     RABBITMQ_SERVICE_HOST
     RABBITMQ_SERVICE_PORT
-    RABBIT_USERID
     RABBIT_PASSWORD
-    GLANCE_API_SERVICE_HOST
-    GLANCE_API_SERVICE_PORT
-    ADMIN_TENANT_NAME
-    CINDER_DB_NAME
-    CINDER_DB_USER
-    CINDER_KEYSTONE_USER
-    PUBLIC_IP
-    KEYSTONE_AUTH_PROTOCOL
-    CINDER_API_VERSION
+    RABBIT_USERID
 
 # Cinder-scheduler
 
-    MARIADB_SERVICE_HOST
-    DB_ROOT_PASSWORD
     CINDER_DB_NAME
-    CINDER_DB_USER
     CINDER_DB_PASSWORD
+    CINDER_DB_USER
+    DB_ROOT_PASSWORD
     INIT_CINDER_DB
+    MARIADB_SERVICE_HOST
 
 # Cinder-volume
 
-    CINDER_VOLUME_API_LISTEN
-    ISCSI_HELPER
-    ISCSI_IP_ADDRESS
-    CINDER_VOLUME_GROUP
+    CINDER_ENABLED_BACKEND
     CINDER_LVM_LO_VOLUME_SIZE
+    CINDER_VOLUME_API_LISTEN
     CINDER_VOLUME_BACKEND_NAME
     CINDER_VOLUME_DRIVER
-    CINDER_ENABLED_BACKEND
-    CINDER_LVM_LO_VOLUME_SIZE
     CINDER_VOLUME_GROUP
+    ISCSI_HELPER
+    ISCSI_IP_ADDRESS
 
 # Designate-api
 
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_ADMIN_SERVICE_HOST
-    DESIGNATE_KEYSTONE_USER
-    DESIGNATE_KEYSTONE_PASSWORD
-    KEYSTONE_AUTH_PROTOCOL
     ADMIN_TENANT_NAME
     DESIGNATE_API_SERVICE_HOST
     DESIGNATE_API_SERVICE_PORT
+    DESIGNATE_KEYSTONE_PASSWORD
+    DESIGNATE_KEYSTONE_USER
+    KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_PORT
+    KEYSTONE_ADMIN_TOKEN
+    KEYSTONE_AUTH_PROTOCOL
 
 # Designate-backend-bind9
 
+    DESIGNATE_ALLOW_RECURSION
+    DESIGNATE_BIND9_RNDC_KEY
     DESIGNATE_MASTERNS
     DESIGNATE_SLAVENS
-    DESIGNATE_BIND9_RNDC_KEY
-    DESIGNATE_ALLOW_RECURSION
 
 # Designate-base
 
+    DEBUG_LOGGING
+    DESIGNATE_BACKEND
+    DESIGNATE_BIND9_RNDC_KEY
+    DESIGNATE_DB_NAME
     DESIGNATE_DB_PASSWORD
+    DESIGNATE_DB_USER
     DESIGNATE_KEYSTONE_PASSWORD
-    KEYSTONE_PUBLIC_SERVICE_HOST
-    RABBITMQ_SERVICE_HOST
-    DESIGNATE_BIND9_RNDC_KEY
-    DESIGNATE_BACKEND
-    KEYSTONE_PUBLIC_SERVICE_PORT
     DESIGNATE_KEYSTONE_USER
-    RABBIT_USERID
-    RABBIT_PASSWORD
-    DESIGNATE_DB_USER
-    DESIGNATE_DB_NAME
-    KEYSTONE_AUTH_PROTOCOL
+    DESIGNATE_POOLMAN_POOLID
     KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_PORT
-    DEBUG_LOGGING
-    DESIGNATE_POOLMAN_POOLID
+    KEYSTONE_AUTH_PROTOCOL
+    KEYSTONE_PUBLIC_SERVICE_HOST
+    KEYSTONE_PUBLIC_SERVICE_PORT
+    RABBITMQ_SERVICE_HOST
+    RABBIT_PASSWORD
+    RABBIT_USERID
 
 # Designate-central
 
-    MARIADB_SERVICE_HOST
     DB_ROOT_PASSWORD
     DESIGNATE_DB_NAME
-    DESIGNATE_DB_USER
     DESIGNATE_DB_PASSWORD
+    DESIGNATE_DB_USER
     INIT_DESIGNATE_DB
+    MARIADB_SERVICE_HOST
 
 # Designate-mdns
 
@@ -177,15 +173,14 @@ In order for each service to function, there is a minimum set of required variab
 
 # Designate-poolmanager
 
-    DESIGNATE_MASTERNS
     DESIGNATE_BACKEND
-    DESIGNATE_SLAVENS
-    DESIGNATE_MDNS_PORT
     DESIGNATE_DNS_PORT
-    DESIGNATE_POOLMAN_POOLID
-    DESIGNATE_POOLMAN_TARGETS
+    DESIGNATE_MASTERNS
+    DESIGNATE_MDNS_PORT
     DESIGNATE_POOLMAN_NSS
     DESIGNATE_POOLMAN_POOLID
+    DESIGNATE_POOLMAN_TARGETS
+    DESIGNATE_SLAVENS
 
 # Designate-sink
 
@@ -196,11 +191,11 @@ In order for each service to function, there is a minimum set of required variab
 # Galera
 
     DB_CLUSTER_BIND_ADDRESS
+    DB_CLUSTER_INIT_DB
     DB_CLUSTER_NAME
     DB_CLUSTER_NODES
-    DB_ROOT_PASSWORD
     DB_CLUSTER_WSREP_METHOD
-    DB_CLUSTER_INIT_DB
+    DB_ROOT_PASSWORD
 
 # Glance-api
 
@@ -219,7 +214,6 @@ In order for each service to function, there is a minimum set of required variab
 # Glance-base
 
     ADMIN_TENANT_NAME
-    GLANCE_DB_PASSWORD
     GLANCE_DB_NAME
     GLANCE_DB_PASSWORD
     GLANCE_DB_USER
@@ -242,43 +236,45 @@ In order for each service to function, there is a minimum set of required variab
 
 # Heat-api-cfn
 
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_ADMIN_SERVICE_HOST
-    HEAT_CFN_KEYSTONE_USER
-    HEAT_CFN_KEYSTONE_PASSWORD
-    KEYSTONE_AUTH_PROTOCOL
-    KEYSTONE_ADMIN_SERVICE_PORT
     ADMIN_TENANT_NAME
     HEAT_API_CFN_SERVICE_HOST
     HEAT_API_CFN_SERVICE_PORT
+    HEAT_CFN_KEYSTONE_PASSWORD
+    HEAT_CFN_KEYSTONE_USER
+    KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_SERVICE_PORT
+    KEYSTONE_ADMIN_TOKEN
+    KEYSTONE_AUTH_PROTOCOL
 
 # Heat-api
 
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_ADMIN_SERVICE_HOST
-    HEAT_KEYSTONE_USER
-    HEAT_KEYSTONE_PASSWORD
-    KEYSTONE_AUTH_PROTOCOL
     ADMIN_TENANT_NAME
     HEAT_API_SERVICE_HOST
+    HEAT_KEYSTONE_PASSWORD
+    HEAT_KEYSTONE_USER
+    KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
+    KEYSTONE_AUTH_PROTOCOL
     PUBLIC_IP
 
 # Heat-base
 
+    HEAT_API_CFN_SERVICE_PORT
+    HEAT_API_CFN_URL_HOST
     HEAT_DB_PASSWORD
+    HEAT_DOMAIN_PASS
     HEAT_KEYSTONE_PASSWORD
-    HEAT_API_CFN_URL_HOST
-    HEAT_API_CFN_SERVICE_PORT
     KEYSTONE_PUBLIC_SERVICE_HOST
     KEYSTONE_PUBLIC_SERVICE_PORT
-    RABBITMQ_SERVICE_HOST
     MARIADB_SERVICE_HOST
+    RABBITMQ_SERVICE_HOST
 
 # Heat-engine
 
     HEAT_DB_NAME
-    HEAT_DB_USER
     HEAT_DB_PASSWORD
+    HEAT_DB_USER
+    HEAT_DOMAIN_PASS
     INIT_HEAT_DB
 
 # Horizon
@@ -288,53 +284,52 @@ In order for each service to function, there is a minimum set of required variab
 # Keepalived
 
     KEEPALIVED_HOST_PRIORITIES
-    PUBLIC_IP
     PUBLIC_INTERFACE
+    PUBLIC_IP
 
 # Keystone
 
+    ADMIN_TENANT_NAME
+    INIT_KEYSTONE_DB
+    KEYSTONE_ADMIN_PASSWORD
+    KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_TOKEN
     KEYSTONE_DB_PASSWORD
-    KEYSTONE_ADMIN_PASSWORD
-    ADMIN_TENANT_NAME
     KEYSTONE_PUBLIC_SERVICE_HOST
-    KEYSTONE_ADMIN_SERVICE_HOST
     PUBLIC_IP
-    INIT_KEYSTONE_DB
 
 # Magnum-api
 
-    KEYSTONE_ADMIN_TOKEN
+    ADMIN_TENANT_NAME
     KEYSTONE_ADMIN_SERVICE_HOST
-    MAGNUM_KEYSTONE_USER
-    MAGNUM_KEYSTONE_PASSWORD
+    KEYSTONE_ADMIN_SERVICE_PORT
+    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_AUTH_PROTOCOL
-    ADMIN_TENANT_NAME
     MAGNUM_API_SERVICE_HOST
-    KEYSTONE_ADMIN_SERVICE_PORT
     MAGNUM_API_SERVICE_PORT
+    MAGNUM_KEYSTONE_PASSWORD
+    MAGNUM_KEYSTONE_USER
 
 # Magnum-base
 
-    MAGNUM_DB_PASSWORD
-    MAGNUM_KEYSTONE_PASSWORD
-    KEYSTONE_PUBLIC_SERVICE_HOST
-    KEYSTONE_PUBLIC_SERVICE_PORT
-    MAGNUM_KEYSTONE_USER
     ADMIN_TENANT_NAME
-    MAGNUM_DB_USER
-    MAGNUM_DB_NAME
+    DEBUG_LOGGING
     KEYSTONE_AUTH_PROTOCOL
+    KEYSTONE_PUBLIC_SERVICE_HOST
     KEYSTONE_PUBLIC_SERVICE_PORT
+    MAGNUM_DB_NAME
+    MAGNUM_DB_PASSWORD
+    MAGNUM_DB_USER
+    MAGNUM_KEYSTONE_PASSWORD
+    MAGNUM_KEYSTONE_USER
     RABBITMQ_SERVICE_HOST
     VERBOSE_LOGGING
-    DEBUG_LOGGING
 
 # Magnum-conductor
 
     MAGNUM_DB_NAME
-    MAGNUM_DB_USER
     MAGNUM_DB_PASSWORD
+    MAGNUM_DB_USER
 
 # Mariadb
 
@@ -346,70 +341,78 @@ In order for each service to function, there is a minimum set of required variab
 
 # Neutron-agents
 
-    VERBOSE_LOGGING
+    ADMIN_TENANT_NAME
     DEBUG_LOGGING
-    MECHANISM_DRIVERS
-    DHCP_DRIVER
-    USE_NAMESPACES
     DELETE_NAMESPACES
-    NEUTRON_LOG_DIR
+    DHCP_DRIVER
     DNSMASQ_CONFIG_FILE
-    PUBLIC_IP
-    NEUTRON_FLAT_NETWORK_NAME
-    NEUTRON_FLAT_NETWORK_INTERFACE
     KEYSTONE_AUTH_PROTOCOL
     KEYSTONE_PUBLIC_SERVICE_HOST
-    ADMIN_TENANT_NAME
-    NEUTRON_KEYSTONE_USER
+    MECHANISM_DRIVERS
     NEUTRON_KEYSTONE_PASSWORD
+    NEUTRON_KEYSTONE_USER
+    NEUTRON_LOG_DIR
     NEUTRON_SHARED_SECRET
     NOVA_METADATA_API_SERVICE_HOST
     NOVA_METADATA_API_SERVICE_PORT
+    USE_NAMESPACES
+    VERBOSE_LOGGING
+    cfg
 
 # Neutron-base
 
-    NEUTRON_KEYSTONE_PASSWORD
-    NEUTRON_API_PASTE_CONFIG
     KEYSTONE_PUBLIC_SERVICE_HOST
+    NEUTRON_API_PASTE_CONFIG
+    NEUTRON_KEYSTONE_PASSWORD
     RABBITMQ_SERVICE_HOST
 
+# Neutron-linuxbridge-agent
+
+    NEUTRON_FLAT_NETWORK_INTERFACE
+    NEUTRON_FLAT_NETWORK_NAME
+    PUBLIC_IP
+
+# Neutron-openvswitch-agent
+
+    NEUTRON_FLAT_NETWORK_INTERFACE
+    NEUTRON_FLAT_NETWORK_NAME
+    PUBLIC_IP
+
 # Neutron-server
 
-    KEYSTONE_ADMIN_TOKEN
+    ADMIN_TENANT_NAME
     KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_AUTH_PROTOCOL
-    NOVA_API_SERVICE_HOST
-    NOVA_KEYSTONE_USER
-    NOVA_KEYSTONE_PASSWORD
     NEUTRON_DB_NAME
-    NEUTRON_DB_USER
     NEUTRON_DB_PASSWORD
-    NEUTRON_KEYSTONE_USER
+    NEUTRON_DB_USER
     NEUTRON_KEYSTONE_PASSWORD
-    ADMIN_TENANT_NAME
+    NEUTRON_KEYSTONE_USER
     NEUTRON_SERVER_SERVICE_HOST
+    NOVA_API_SERVICE_HOST
+    NOVA_KEYSTONE_PASSWORD
+    NOVA_KEYSTONE_USER
     PUBLIC_IP
-    NEUTRON_DB_PASSWORD
 
 # Nova-base
 
-    KEYSTONE_ADMIN_TOKEN
-    NOVA_DB_PASSWORD
-    RABBITMQ_SERVICE_HOST
+    DEBUG_LOGGING
+    FLAT_INTERFACE
     GLANCE_API_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_PUBLIC_SERVICE_HOST
-    PUBLIC_IP
+    NOVA_DB_PASSWORD
     PUBLIC_INTERFACE
-    FLAT_INTERFACE
-    DEBUG_LOGGING
+    PUBLIC_IP
+    RABBITMQ_SERVICE_HOST
     VERBOSE_LOGGING
-    NEUTRON_SHARED_SECRET
 
 # Nova-compute
 
-    NOVA_VNCSERVER_PROXYCLIENT_ADDRESS
-    NOVA_NOVNC_PROXY_PORT
     NOVA_NOVNC_BASE_ADDRESS
+    NOVA_NOVNC_PROXY_PORT
+    NOVA_VNCSERVER_PROXYCLIENT_ADDRESS
 
 # Nova-libvirt
 
@@ -421,22 +424,22 @@ In order for each service to function, there is a minimum set of required variab
 
 # Nova-api
 
-    KEYSTONE_ADMIN_TOKEN
-    KEYSTONE_ADMIN_SERVICE_HOST
-    NOVA_KEYSTONE_USER
-    NOVA_KEYSTONE_PASSWORD
     ADMIN_TENANT_NAME
+    KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
     NOVA_API_SERVICE_HOST
+    NOVA_DB_NAME
     NOVA_EC2_API_SERVICE_HOST
+    NOVA_KEYSTONE_PASSWORD
+    NOVA_KEYSTONE_USER
     PUBLIC_IP
-    NOVA_DB_NAME
 
 # Nova-conductor
 
+    INIT_NOVA_DB
     NOVA_DB_NAME
-    NOVA_DB_USER
     NOVA_DB_PASSWORD
-    INIT_NOVA_DB
+    NOVA_DB_USER
 
 # Nova-consoleauth
 
@@ -444,29 +447,38 @@ In order for each service to function, there is a minimum set of required variab
 
 # Nova-novncproxy
 
-    PUBLIC_IP
-    NOVA_NOVNC_PROXY_SERVICE_HOST
-    NOVA_NOVNC_PROXY_PORT
     NOVA_NOVNC_BASE_ADDRESS
+    NOVA_NOVNC_PROXY_PORT
+    NOVA_NOVNC_PROXY_SERVICE_HOST
     NOVA_VNCSERVER_LISTEN_ADDRESS
     NOVA_VNCSERVER_PROXYCLIENT_ADDRESS
+    PUBLIC_IP
 
 # Nova-scheduler
 
     NOVA_DB_NAME
 
+# Ovs-base
+
+    None
+
+# Ovs-db-server
+
+    None
+
+# Ovs-vswitchd
+
+    None
+
 # Rabbitmq
 
-    RABBITMQ_CLUSTER_COOKIE
-    RABBITMQ_CLUSTER_NODES
-    RABBITMQ_LOG_BASE
     RABBITMQ_PASS
     RABBITMQ_USER
 
 # Swift-account
 
-    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
     SWIFT_ADMIN_PASSWORD
 
 # Swift-base
@@ -475,14 +487,14 @@ In order for each service to function, there is a minimum set of required variab
 
 # Swift-container
 
-    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
     SWIFT_ADMIN_PASSWORD
 
 # Swift-object
 
-    KEYSTONE_ADMIN_TOKEN
     KEYSTONE_ADMIN_SERVICE_HOST
+    KEYSTONE_ADMIN_TOKEN
     SWIFT_ADMIN_PASSWORD
 
 # Swift-proxy-server
@@ -491,8 +503,8 @@ In order for each service to function, there is a minimum set of required variab
 
 # Zaqar
 
-    ZAQAR_KEYSTONE_PASSWORD
-    ZAQAR_SERVER_SERVICE_HOST
     KEYSTONE_ADMIN_SERVICE_HOST
     KEYSTONE_ADMIN_TOKEN
     PUBLIC_IP
+    ZAQAR_KEYSTONE_PASSWORD
+    ZAQAR_SERVER_SERVICE_HOST
diff --git a/tools/min-env.sh b/tools/min-env.sh
index f5fecec454..96f76f316c 100755
--- a/tools/min-env.sh
+++ b/tools/min-env.sh
@@ -34,22 +34,20 @@ function write_env_var {
 
 function find_vars {
     local img_location=$1
-    local empty=true
-    scripts=$(find ${img_location} -name *.sh | sort -t / -k 4)
+    local all_vars=''
+    local scripts=$(find ${img_location} -name *.sh | sort -t / -k 4)
 
     for script in $scripts; do
         local vars=$(awk '/^check_required_vars/,/([^\\] *$)/' $script)
-        vars=$(echo "$vars" | sed 's/check_required_vars//' | sed 's/\\//g')
-
-        if [ ! -z "$vars" ]; then
-            empty=false
-            for v in $vars; do
-                write_env_var $v
-            done
-        fi
+        all_vars="$all_vars $(echo "$vars" | sed 's/check_required_vars//' | sed 's/\\//g')"
     done
 
-    if $empty; then
+    if [ -n "${all_vars// }" ]; then
+        all_vars=$(echo "${all_vars[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
+        for v in $all_vars; do
+            write_env_var $v
+        done
+    else
         echo "    None" >> "$DOC"
     fi
 }
-- 
GitLab