From e1b5b149f26df2028f65652ac0d4a9509b23fe4c Mon Sep 17 00:00:00 2001
From: "Swapnil Kulkarni (coolsvap)" <me@coolsvap.net>
Date: Tue, 17 May 2016 23:06:59 +0530
Subject: [PATCH] Make passwords.yml file generation configurable

partially implements blueprint multiple-clouds

Change-Id: I676c4245e6f058ffbed345970ee78d1750dd0f2f
---
 kolla/cmd/genpwd.py | 14 ++++++++++++--
 tools/kolla-ansible | 27 ++++++++++++++++-----------
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/kolla/cmd/genpwd.py b/kolla/cmd/genpwd.py
index 70dbc0357c..ad77a77c0f 100755
--- a/kolla/cmd/genpwd.py
+++ b/kolla/cmd/genpwd.py
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import argparse
 import os
 import random
 import string
@@ -29,6 +30,15 @@ def generate_RSA(bits=2048):
 
 
 def main():
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+        '-p', '--passwords', type=str,
+        default=os.path.abspath('/etc/kolla/passwords.yml'),
+        help=('Path to the passwords yml file'))
+
+    args = parser.parse_args()
+    passwords_file = os.path.expanduser(args.passwords)
+
     # These keys should be random uuids
     uuid_keys = ['ceph_cluster_fsid', 'rbd_secret_uuid']
 
@@ -41,7 +51,7 @@ def main():
     # length of password
     length = 40
 
-    with open('/etc/kolla/passwords.yml', 'r') as f:
+    with open(passwords_file, 'r') as f:
         passwords = yaml.load(f.read())
 
     for k, v in passwords.items():
@@ -67,7 +77,7 @@ def main():
                     for n in range(length)
                 ])
 
-    with open('/etc/kolla/passwords.yml', 'w') as f:
+    with open(passwords_file, 'w') as f:
         f.write(yaml.dump(passwords, default_flow_style=False))
 
 if __name__ == '__main__':
diff --git a/tools/kolla-ansible b/tools/kolla-ansible
index 66c74c1085..3a8ffd2ab1 100755
--- a/tools/kolla-ansible
+++ b/tools/kolla-ansible
@@ -28,14 +28,15 @@ function usage {
 Usage: $0 COMMAND [options]
 
 Options:
-    --inventory, -i <inventory_path> Specify path to ansible inventory file
-    --playbook, -p <playbook_path>   Specify path to ansible playbook file
-    --configdir <config_path>        Specify path to directory with globals.yml
-    --keyfile, -k <key_file>         Specify path to ansible vault keyfile
-    --help, -h                       Show this usage information
-    --tags, -t <tags>                Only run plays and tasks tagged with these values
-    --extra, -e <ansible variables>  Set additional variables as key=value or YAML/JSON passed to ansible-playbook
-    --verbose, -v                    Increase verbosity of ansible-playbook
+    --inventory, -i <inventory_path>   Specify path to ansible inventory file
+    --playbook, -p <playbook_path>     Specify path to ansible playbook file
+    --configdir <config_path>          Specify path to directory with globals.yml
+    --keyfile, -k <key_file>           Specify path to ansible vault keyfile
+    --help, -h                         Show this usage information
+    --tags, -t <tags>                  Only run plays and tasks tagged with these values
+    --extra, -e <ansible variables>    Set additional variables as key=value or YAML/JSON passed to ansible-playbook
+    --passwords <passwords_path>       Specify path to the passwords file
+    --verbose, -v                      Increase verbosity of ansible-playbook
 
 Commands:
     prechecks           Do pre-deployment checks for hosts
@@ -53,7 +54,7 @@ EOF
 
 
 SHORT_OPTS="hi:p:t:k:e:v"
-LONG_OPTS="help,inventory:,playbook:,tags:,keyfile:,extra:,verbose,configdir:"
+LONG_OPTS="help,inventory:,playbook:,tags:,keyfile:,extra:,verbose,configdir:,passwords:,"
 ARGS=$(getopt -o "${SHORT_OPTS}" -l "${LONG_OPTS}" --name "$0" -- "$@") || { usage >&2; exit 2; }
 
 eval set -- "$ARGS"
@@ -65,6 +66,7 @@ PLAYBOOK="${BASEDIR}/ansible/site.yml"
 VERBOSITY=
 EXTRA_OPTS=
 CONFIG_DIR="/etc/kolla"
+PASSWORDS_FILE="${CONFIG_DIR}/passwords.yml"
 
 while [ "$#" -gt 0 ]; do
     case "$1" in
@@ -104,7 +106,10 @@ while [ "$#" -gt 0 ]; do
             EXTRA_OPTS="$EXTRA_OPTS -e $2"
             shift 2
             ;;
-
+    (--passwords)
+            PASSWORDS_FILE="$2"
+            shift 2
+            ;;
     (--help|-h)
             usage
             shift
@@ -171,6 +176,6 @@ case "$1" in
         ;;
 esac
 
-CONFIG_OPTS="-e @${CONFIG_DIR}/globals.yml -e @${CONFIG_DIR}/passwords.yml -e CONFIG_DIR=${CONFIG_DIR}"
+CONFIG_OPTS="-e @${CONFIG_DIR}/globals.yml -e @${PASSWORDS_FILE} -e CONFIG_DIR=${CONFIG_DIR}"
 CMD="ansible-playbook -i $INVENTORY $CONFIG_OPTS $EXTRA_OPTS $PLAYBOOK $VERBOSITY"
 process_cmd