Improve error reporting in password utilities

The kolla-genpwd and kolla-mergepwd commands can be used to manipulate
the kolla passwords.yml file. The format is a YAML encoded dict of
password variable names to their values. If the format is not a dict,
the error messages are unhelpful.  In particular, this can happen if the
file is encrypted e.g. via Ansible Vault.

For kolla-genpwd:

    AttributeError: 'NoneType' object has no attribute 'items'

For kolla-mergepwd:

    AttributeError: 'NoneType' object has no attribute 'update'

This change adds a more friendly message.

Change-Id: I27f0835b904e05006ae401adf383090322e1b891
Closes-Bug: #1880220
(cherry picked from commit 620b808cf3)
(cherry picked from commit d8b05f4c1a)
This commit is contained in:
Mark Goddard 2020-05-22 19:16:02 +01:00 committed by Radosław Piliszek
parent f3ba8d5f23
commit 90736f0fd9
3 changed files with 19 additions and 0 deletions

View File

@ -59,6 +59,10 @@ def genpwd(passwords_file, length, uuid_keys, ssh_keys, blank_keys,
with open(passwords_file, 'r') as f: with open(passwords_file, 'r') as f:
passwords = yaml.safe_load(f.read()) passwords = yaml.safe_load(f.read())
if not isinstance(passwords, dict):
print("ERROR: Passwords file not in expected key/value format")
sys.exit(1)
for k, v in passwords.items(): for k, v in passwords.items():
if (k in ssh_keys and if (k in ssh_keys and
(v is None (v is None

View File

@ -13,6 +13,7 @@
# limitations under the License. # limitations under the License.
import argparse import argparse
import sys
import yaml import yaml
@ -23,6 +24,14 @@ def mergepwd(old, new, final):
with open(new, "r") as new_file: with open(new, "r") as new_file:
new_passwords = yaml.safe_load(new_file) new_passwords = yaml.safe_load(new_file)
if not isinstance(old_passwords, dict):
print("ERROR: Old passwords file not in expected key/value format")
sys.exit(1)
if not isinstance(new_passwords, dict):
print("ERROR: New passwords file not in expected key/value format")
sys.exit(1)
new_passwords.update(old_passwords) new_passwords.update(old_passwords)
with open(final, "w") as destination: with open(final, "w") as destination:

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Improves error reporting in ``kolla-genpwd`` and ``kolla-mergepwd`` when
input files are not in the expected format. `LP#1880220
<https://bugs.launchpad.net/kolla-ansible/+bug/1880220>`__.