Suppress output for ssh-keygen

ssh-keygen has private key which shouldn't be visible in output. This
patch change the behaviour to print only exit code on failure. Also this
patch closes file descriptor once key is read.

Conflicts:
	tripleoclient/tests/workflows/test_deployment.py
	tripleoclient/workflows/deployment.py

Change-Id: I5a286cca6e48b0abc9cec3f15b2648977ae838c2
Related-Bug: rhbz#1734356
(cherry picked from commit b40c9e3b1c)
(cherry picked from commit 6055817d25)
This commit is contained in:
Sergii Golovatiuk 2019-08-05 15:21:16 +02:00
parent 092449a9c6
commit c7919e74e7
2 changed files with 19 additions and 5 deletions

View File

@ -51,9 +51,8 @@ class TestDeploymentWorkflows(utils.TestCommand):
@mock.patch('tripleoclient.workflows.deployment.open') @mock.patch('tripleoclient.workflows.deployment.open')
@mock.patch('tripleoclient.workflows.deployment.tempfile') @mock.patch('tripleoclient.workflows.deployment.tempfile')
@mock.patch('tripleoclient.workflows.deployment.subprocess.check_call') @mock.patch('tripleoclient.workflows.deployment.subprocess.check_call')
def test_enable_ssh_admin(self, mock_check_call, mock_tempfile, def test_enable_ssh_admin(self, mock_check_call, mock_tempfile, mock_open,
mock_open, mock_rmtree, mock_sleep, mock_rmtree, mock_sleep, mock_wait_for_ssh_port):
mock_wait_for_ssh_port):
log = mock.Mock() log = mock.Mock()
hosts = 'a', 'b', 'c' hosts = 'a', 'b', 'c'
ssh_user = 'test-user' ssh_user = 'test-user'
@ -62,6 +61,8 @@ class TestDeploymentWorkflows(utils.TestCommand):
mock_tempfile.mkdtemp.return_value = '/foo' mock_tempfile.mkdtemp.return_value = '/foo'
mock_read = mock.Mock() mock_read = mock.Mock()
mock_read.read.return_value = 'key' mock_read.read.return_value = 'key'
mock_read.__enter__ = mock.Mock()
mock_read.__exit__ = mock.Mock()
mock_open.return_value = mock_read mock_open.return_value = mock_read
mock_state = mock.Mock() mock_state = mock.Mock()
mock_state.state = 'SUCCESS' mock_state.state = 'SUCCESS'
@ -104,6 +105,8 @@ class TestDeploymentWorkflows(utils.TestCommand):
mock_tempfile.mkdtemp.return_value = '/foo' mock_tempfile.mkdtemp.return_value = '/foo'
mock_read = mock.Mock() mock_read = mock.Mock()
mock_read.read.return_value = 'key' mock_read.read.return_value = 'key'
mock_read.__enter__ = mock.Mock()
mock_read.__exit__ = mock.Mock()
mock_open.return_value = mock_read mock_open.return_value = mock_read
mock_state = mock.Mock() mock_state = mock.Mock()
mock_state.state = 'ERROR' mock_state.state = 'ERROR'

View File

@ -164,8 +164,19 @@ def enable_ssh_admin(log, clients, hosts, ssh_user, ssh_key):
try: try:
tmp_key_command = ["ssh-keygen", "-N", "", "-t", "rsa", "-b", "4096", tmp_key_command = ["ssh-keygen", "-N", "", "-t", "rsa", "-b", "4096",
"-f", tmp_key_private, "-C", tmp_key_comment] "-f", tmp_key_private, "-C", tmp_key_comment]
subprocess.check_call(tmp_key_command, stderr=subprocess.STDOUT) DEVNULL = open(os.devnull, 'w')
tmp_key_public_contents = open(tmp_key_public).read() try:
subprocess.check_call(tmp_key_command, stdout=DEVNULL,
stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as exc:
log.error("ssh-keygen has failed with return code {0}".
format(exc.returncode))
else:
log.info("ssh-keygen has been run successfully")
DEVNULL.close()
with open(tmp_key_public) as pubkey:
tmp_key_public_contents = pubkey.read()
for host in hosts: for host in hosts:
wait_for_ssh_port(host) wait_for_ssh_port(host)