diff --git a/truenas_kmip_unlock.py b/truenas_kmip_unlock.py index 3199eef..2e20863 100644 --- a/truenas_kmip_unlock.py +++ b/truenas_kmip_unlock.py @@ -266,6 +266,7 @@ def new_pool_details(): break else: print("The pool encryption passphrases do not match, please try again.") + array = dict() array[pool_name] = dict() array[pool_name]["pool_passphrase"] = pool_passphrase @@ -356,9 +357,9 @@ if __name__ == '__main__': user_input = input("n/q> ") if user_input.casefold() == "n": config = dict() - api_key = input("Please enter your API key: ") - config['API Key'] = api_key + config['API Key'] = input("Please enter your API key: ") config['Pools'] = new_pool_details() + config['jailStoragePool'] = select_pool(config['Pools'], "select for jail storage") write_config_file(config, secrets_config_file) break elif user_input.casefold() == "q": @@ -371,20 +372,26 @@ if __name__ == '__main__': print(" ") for pool in config['Pools']: print(pool) + print("Jail storage pool: {}".format(config['jailStoragePool'])) print(" ") print("a) Edit API Key") print("e) Edit pool") + print("j) Edit jail storage pool") print("n) New pool") print("d) Delete pool") print("q) Quit config") - user_input = input("a/e/n/d/q> ") + user_input = input("a/e/j/n/d/q> ") # Edit API Key if user_input.casefold() == "a": - api_key = input("Please enter your API key: ") - config['API Key'] = api_key + config['API Key'] = input("Please enter your API key: ") write_config_file(config, secrets_config_file) # Editing an account elif user_input.casefold() == "e": + config['jailStoragePool'] = select_pool(config['Pools'], "select for jail storage") + write_config_file(config, secrets_config_file) + break + # Editing jail storage pool + elif user_input.casefold() == "j": pool_to_edit = select_pool(config['Pools']) pool_details = edit_pool_details(config['Pools'], pool_to_edit) del config['Pools'][pool_to_edit] @@ -425,6 +432,7 @@ if __name__ == '__main__': # run the decryption of the keys and unlock the pool config = read_config_file(secrets_config_file) api_key = config['API Key'] + jail_storage_pool = config['jailStoragePool'] API_POOLS = request('pool', api_key)['response'] API_DATASETS = request('pool/dataset', api_key)['response'] for pool_dataset_name in config['Pools']: @@ -465,20 +473,27 @@ if __name__ == '__main__': else: logger.info('Dataset {} is already unlocked'.format(dataset['name'])) - # start any jails that are set to start on boot but are most likely on an encrypted pool - API_JAILS = request('jail', api_key)['response'] - for jail in API_JAILS: - if jail['boot'] == 1: - logger.info('Jail {} is set to start on boot'.format(jail['id'])) - if jail['state'] == 'down': - logger.info('Jail {} is stopped'.format(jail['id'])) - logger.info('Starting jail {}'.format(jail['id'])) - response = request('jail/start', api_key, 'POST', '{}'.format(jail['id'])) - if response['ok']: - logger.info('Started jail {} successfully'.format(jail['id'])) + # make sure jail storage pool is set + logger.info('Setting jail storage pool to {}'.format(jail_storage_pool)) + response = request('jail/activate', api_key, 'POST', '{}'.format(jail_storage_pool)) + if response['ok']: + logger.info('Successfully set jail storage pool to {} successfully'.format(jail_storage_pool)) + # start any jails that are set to start on boot but are most likely on an encrypted pool + API_JAILS = request('jail', api_key)['response'] + for jail in API_JAILS: + if jail['boot'] == 1: + logger.info('Jail {} is set to start on boot'.format(jail['id'])) + if jail['state'] == 'down': + logger.info('Jail {} is stopped'.format(jail['id'])) + logger.info('Starting jail {}'.format(jail['id'])) + response = request('jail/start', api_key, 'POST', '{}'.format(jail['id'])) + if response['ok']: + logger.info('Started jail {} successfully'.format(jail['id'])) + else: + logger.error('Jail {} was NOT started successfully'.format(jail['id'])) else: - logger.error('Jail {} was NOT started successfully'.format(jail['id'])) - else: - logger.info('Jail {} is already started'.format(jail['id'])) + logger.info('Jail {} is already started'.format(jail['id'])) + else: + logger.error('Unable to set jail storage pool to {}'.format(jail_storage_pool)) client.close() sys.exit(0) \ No newline at end of file