* Upgrade pylint to 1.8.1 * Fix no-else-return * Fix bad-whitespace * Fix too-many-nested-blocks * Fix raising-format-tuple See https://github.com/PyCQA/pylint/blob/master/doc/whatsnew/1.8.rst * Fix len-as-condition * Fix logging-not-lazy Not sure about that TEMP_CELSIUS though, but internally it's probably just like if you concatenated any other (variable) string * Fix stop-iteration-return * Fix useless-super-delegation * Fix trailing-comma-tuple Both of these seem to simply be bugs: * Nest: The value of self._humidity never seems to be used anywhere * Dovado: The called API method seems to expect a "normal" number * Fix redefined-argument-from-local * Fix consider-using-enumerate * Fix wrong-import-order * Fix arguments-differ * Fix missed no-else-return * Fix no-member and related * Fix signatures-differ * Revert "Upgrade pylint to 1.8.1" This reverts commit af78aa00f125a7d34add97b9d50c14db48412211. * Fix arguments-differ * except for device_tracker * Cleanup * Fix test using positional argument * Fix line too long I forgot to run flake8 - shame on me... 🙃 * Fix bad-option-value for 1.6.5 * Fix arguments-differ for device_tracker * Upgrade pylint to 1.8.2 * 👕 Fix missed no-member
72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
"""Script to get, put and delete secrets stored in credstash."""
|
|
import argparse
|
|
import getpass
|
|
|
|
from homeassistant.util.yaml import _SECRET_NAMESPACE
|
|
|
|
REQUIREMENTS = ['credstash==1.14.0', 'botocore==1.7.34']
|
|
|
|
|
|
def run(args):
|
|
"""Handle credstash script."""
|
|
parser = argparse.ArgumentParser(
|
|
description=("Modify Home Assistant secrets in credstash."
|
|
"Use the secrets in configuration files with: "
|
|
"!secret <name>"))
|
|
parser.add_argument(
|
|
'--script', choices=['credstash'])
|
|
parser.add_argument(
|
|
'action', choices=['get', 'put', 'del', 'list'],
|
|
help="Get, put or delete a secret, or list all available secrets")
|
|
parser.add_argument(
|
|
'name', help="Name of the secret", nargs='?', default=None)
|
|
parser.add_argument(
|
|
'value', help="The value to save when putting a secret",
|
|
nargs='?', default=None)
|
|
|
|
# pylint: disable=import-error, no-member
|
|
import credstash
|
|
import botocore
|
|
|
|
args = parser.parse_args(args)
|
|
table = _SECRET_NAMESPACE
|
|
|
|
try:
|
|
credstash.listSecrets(table=table)
|
|
except botocore.errorfactory.ClientError:
|
|
credstash.createDdbTable(table=table)
|
|
|
|
if args.action == 'list':
|
|
secrets = [i['name'] for i in credstash.listSecrets(table=table)]
|
|
deduped_secrets = sorted(set(secrets))
|
|
|
|
print('Saved secrets:')
|
|
for secret in deduped_secrets:
|
|
print(secret)
|
|
return 0
|
|
|
|
if args.name is None:
|
|
parser.print_help()
|
|
return 1
|
|
|
|
if args.action == 'put':
|
|
if args.value:
|
|
the_secret = args.value
|
|
else:
|
|
the_secret = getpass.getpass('Please enter the secret for {}: '
|
|
.format(args.name))
|
|
current_version = credstash.getHighestVersion(args.name, table=table)
|
|
credstash.putSecret(args.name,
|
|
the_secret,
|
|
version=int(current_version) + 1,
|
|
table=table)
|
|
print('Secret {} put successfully'.format(args.name))
|
|
elif args.action == 'get':
|
|
the_secret = credstash.getSecret(args.name, table=table)
|
|
if the_secret is None:
|
|
print('Secret {} not found'.format(args.name))
|
|
else:
|
|
print('Secret {}={}'.format(args.name, the_secret))
|
|
elif args.action == 'del':
|
|
credstash.deleteSecrets(args.name, table=table)
|
|
print('Deleted secret {}'.format(args.name))
|