tree 08482a46fa68ef0ef1d89f272c1c47e5e3c8219c
parent ff7cc6b4a1a298951b15e3e30d79f6e58ba58d03
author Dennis Dmitriev <ddmitriev@mirantis.com> 1519952844 +0200
committer Dennis Dmitriev <ddmitriev@mirantis.com> 1519952844 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEEiJJ7v9vMbdfhJzQtlV7WdO+V+McFAlqYpGkACgkQlV7WdO+V
 +MdJLwf+Ot8PP+8hiyh9ou6Tnfnd3CK5syb7BhchRMMv21rJfH7CZOFeFVo7kLg2
 WvqUaHbvqT7rvO6ongBFgDOzXAlFbBmrx1aDCvWLNIVxdFos0qJD1DA30GlAoAPB
 xROcfxFuEVSi35YTu4a479mBw/0fsEy8h+Op1NYxdw4riXGjC5Z/DbE6ilvW8r0H
 qMNoIeCqZNgfNvsIbMS3UX5sXT1mGIJgjI5qBpQE7kOrufurTmBFkETuEknNFEWv
 PX/VHa8R7zTW02gur5mRWa+wzzxGy7BcVm13OUsiSEVLFuDJ8ZtmyJB3mHFB9avU
 Yicy+6QLDnuNJLn4VrUK/KoGKNEkKg==
 =IwTx
 -----END PGP SIGNATURE-----

Restrict salt-pepper package to version <=0.5.3

After updating to the version 0.5.4 the following error
raised:

Traceback (most recent call last):
  File "tcp_tests/fixtures/salt_fixtures.py", line 74, in salt_deployed
    salt_nodes = salt_actions.get_ssh_data()
  File "tcp_tests/managers/saltmanager.py", line 180, in get_ssh_data
    hosts = self.local('*', 'grains.item', ['host', 'ipv4'])
  File "tcp_tests/managers/saltmanager.py", line 108, in local
    return self.api.local(tgt, fun, args, kwargs, expr_form='compound')
  File "tcp_tests/managers/saltmanager.py", line 104, in api
    self.__session_start = login()
  File "tcp_tests/managers/saltmanager.py", line 88, in login
    eauth='pam')
  File "site-packages/pepper/libpepper.py", line 455, in login
    'eauth'
  File "site-packages/pepper/libpepper.py", line 456, in <genexpr>
    ) if locals()[key] is not None
KeyError: 'username'

Change-Id: Id03ffcf3c9933aa76c47d640620bbf27c48ecc96
