Copy ssh_keys from mistral environment locally
We would need the private key to ssh as tripleo-admin to existing
nodes. After upgrade, new nodes would need the public key.
Depends-On: https://review.opendev.org/c/openstack/tripleo-ci/+/857560
Change-Id: I34f85c61241e916cabf12ce1aeadf8e9ab73ad1e
(cherry picked from commit f1f224c1ad
)
This commit is contained in:
parent
dd47106da2
commit
69b7ae3ffa
@ -27,6 +27,8 @@ import yaml
|
||||
|
||||
from heatclient.client import Client
|
||||
import keystoneauth1
|
||||
from mistralclient.api import base as mistralclient_exc
|
||||
from mistralclient.api import client as mistral_client
|
||||
import openstack
|
||||
from tripleo_common.utils import plan as plan_utils
|
||||
|
||||
@ -354,8 +356,8 @@ def main():
|
||||
if not os.path.isdir(working_dir):
|
||||
os.makedirs(working_dir)
|
||||
|
||||
conn = openstack.connection.from_config(cloud=args.cloud)
|
||||
try:
|
||||
conn = openstack.connection.from_config(cloud=args.cloud)
|
||||
heat = conn.orchestration
|
||||
_heatclient = Client('1', endpoint=conn.endpoint_for('orchestration'),
|
||||
token=conn.auth_token)
|
||||
@ -389,6 +391,18 @@ def main():
|
||||
LOG.warning("No database found to backup.")
|
||||
db_tar_path = None
|
||||
|
||||
# Get and store ssh keys from mistral environment
|
||||
env_ssh_keys = None
|
||||
try:
|
||||
_workflowclient = mistral_client.client(
|
||||
mistral_url=conn.endpoint_for('workflow'),
|
||||
session=conn.session)
|
||||
env_ssh_keys = _workflowclient.environments.get('ssh_keys')
|
||||
except (keystoneauth1.exceptions.catalog.EndpointNotFound,
|
||||
mistralclient_exc.APIException):
|
||||
LOG.warning("Can not get ssh_keys from mistral environment"
|
||||
"used for tripleo-admin user. This may cause "
|
||||
"issues after upgrade.")
|
||||
for stack in stacks:
|
||||
stack_dir = os.path.join(working_dir, stack)
|
||||
if db_tar_path:
|
||||
@ -397,6 +411,23 @@ def main():
|
||||
os.path.join(stack_dir, os.path.basename(db_tar_path)))
|
||||
export_passwords(_heatclient, stack, stack_dir)
|
||||
|
||||
# Write the keys to stack_dir
|
||||
if env_ssh_keys:
|
||||
private_key = env_ssh_keys.variables['private_key']
|
||||
public_key = env_ssh_keys.variables['public_key']
|
||||
ssh_key_file = os.path.join(stack_dir, 'ssh_private_key')
|
||||
with os.fdopen(
|
||||
os.open(ssh_key_file,
|
||||
flags=(os.O_WRONLY | os.O_CREAT | os.O_TRUNC),
|
||||
mode=0o600), 'w') as fp:
|
||||
fp.write(private_key)
|
||||
|
||||
with os.fdopen(
|
||||
os.open('{}.pub'.format(ssh_key_file),
|
||||
flags=(os.O_WRONLY | os.O_CREAT | os.O_TRUNC),
|
||||
mode=0o600), 'w') as fp:
|
||||
fp.write(public_key)
|
||||
|
||||
if database_exists():
|
||||
drop_db()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user