Esempio n. 1
0
    def test_set(self):

        engine = PlumberyEngine()
        DimensionDataNodeDriver.connectionCls.conn_classes = (
            None, DimensionDataMockHttp)
        DimensionDataMockHttp.type = None
        self.region = DimensionDataNodeDriver(*DIMENSIONDATA_PARAMS)

        file = os.path.abspath(
            os.path.dirname(__file__))+'/fixtures/dummy_rsa.pub'

        settings = {
            'keys': [ "*hello-there*" ],
            }

        with self.assertRaises(ValueError):
            engine.set_settings(settings)

        settings = {
            'keys': [ file ],
            }

        engine.set_settings(settings)
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertTrue(file in engine.get_shared_key_files())

        settings = {
            'safeMode': False,
            'polishers': [
                {'ansible': {}},
                {'configure': {}},
                ],
            'keys': [ file, file ],
            }

        engine.set_settings(settings)
        self.assertEqual(engine.safeMode, False)
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertTrue(file in engine.get_shared_key_files())

        engine.add_facility(myFacility)
        self.assertEqual(len(engine.facilities), 1)

        self.assertEqual(engine.get_shared_user(), 'root')
        engine.set_shared_user('ubuntu')
        self.assertEqual(engine.get_shared_user(), 'ubuntu')

        engine.set_shared_secret('fake_secret')
        self.assertEqual(engine.get_shared_secret(), 'fake_secret')

        random = engine.get_secret('random')
        self.assertEqual(len(random), 9)
        self.assertEqual(engine.get_secret('random'), random)

        engine.set_user_name('fake_name')
        self.assertEqual(engine.get_user_name(), 'fake_name')

        engine.set_user_password('fake_password')
        self.assertEqual(engine.get_user_password(), 'fake_password')
Esempio n. 2
0
    def test_keys(self):

        engine = PlumberyEngine()
        self.assertEqual(engine._sharedKeyFiles, [])

        with self.assertRaises(ValueError):
            engine.set_shared_key_files('this_does_not_exist')
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertEqual(engine._sharedKeyFiles,
                         engine.get_shared_key_files())

        with mock.patch.object(engine, 'get_shared_key_files') as patched:
            patched.return_value = []

            files = ['*unknown-file*', '**me-too*']
            with self.assertRaises(ValueError):
                engine.set_shared_key_files(files)

        file = os.path.abspath(
            os.path.dirname(__file__))+'/fixtures/dummy_rsa.pub'
        engine.set_shared_key_files(file)
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertEqual(engine.get_shared_key_files()[0], file)
        self.assertEqual(engine._sharedKeyFiles,
                         engine.get_shared_key_files())

        with mock.patch.object(engine, 'get_shared_key_files') as patched:
            patched.return_value = []

            files = [file, file, file]
            engine.set_shared_key_files(files)

            self.assertEqual(engine._sharedKeyFiles, [file])

        if 'SHARED_KEY' in os.environ:
            memory = os.environ["SHARED_KEY"]
        else:
            memory = None

        engine._sharedKeyFiles = []
        os.environ["SHARED_KEY"] = 'this_does_not_exist'
        with self.assertRaises(ValueError):
            engine.set_shared_key_files()
        with self.assertRaises(ValueError):
            engine.get_shared_key_files()
        self.assertTrue(isinstance(engine._sharedKeyFiles, list))

        engine._sharedKeyFiles = []
        os.environ["SHARED_KEY"] = file
        engine.set_shared_key_files()
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertEqual(engine.get_shared_key_files()[0], file)
        self.assertEqual(engine._sharedKeyFiles,
                         engine.get_shared_key_files())

        if memory is None:
            os.environ.pop("SHARED_KEY")
        else:
            os.environ["SHARED_KEY"] = memory

        with mock.patch.object(engine, 'get_shared_key_files') as patched:
            patched.return_value = []

            self.assertTrue(isinstance(engine.get_shared_key_files(), list))

            engine.set_shared_key_files()
            self.assertTrue(plogging.foundErrors())

            with self.assertRaises(ValueError):
                engine.set_shared_key_files('this_does_not_exist')

            file = os.path.abspath(
                os.path.dirname(__file__))+'/fixtures/dummy_rsa.pub'
            engine.set_shared_key_files(file)
            self.assertEqual(engine._sharedKeyFiles, [file])
Esempio n. 3
0
    def test_lookup(self):

        engine = PlumberyEngine()
        self.assertEqual(engine.lookup('plumbery.version'), __version__)

        engine.secrets = {}
        random = engine.lookup('secret.random')
        self.assertEqual(len(random), 9)
        self.assertEqual(engine.lookup('secret.random'), random)

        md5 = engine.lookup('secret.random.md5')
        self.assertEqual(len(md5), 32)
        self.assertNotEqual(md5, random)

        sha = engine.lookup('secret.random.sha1')
        self.assertEqual(len(sha), 40)
        self.assertNotEqual(sha, random)

        sha = engine.lookup('secret.random.sha256')
        self.assertEqual(len(sha), 64)
        self.assertNotEqual(sha, random)

        id1 = engine.lookup('id1.uuid')
        self.assertEqual(len(id1), 36)
        self.assertEqual(engine.lookup('id1.uuid'), id1)
        id2 = engine.lookup('id2.uuid')
        self.assertEqual(len(id2), 36)
        self.assertNotEqual(id1, id2)

        engine.lookup('application.secret')
        engine.lookup('database.secret')
        engine.lookup('master.secret')
        engine.lookup('slave.secret')

        original = b'hello world'
        print('original: {}'.format(original))

        text = ensure_string(engine.lookup('rsa_public.pair1'))
        print('rsa_public.pair1: {}'.format(text))

        self.assertTrue(text.startswith('ssh-rsa '))

        text = b(text)
        key = serialization.load_ssh_public_key(
            data=text,
            backend=default_backend())

        encrypted = key.encrypt(
            original,
            padding.OAEP(
                mgf=padding.MGF1(algorithm=hashes.SHA1()),
                algorithm=hashes.SHA1(),
                label=None
            )
        )
        encrypted = base64.b64encode(encrypted)
        print('encrypted: {}'.format(encrypted))

        privateKey = engine.lookup('rsa_private.pair1')
        print('rsa_private.pair1: {}'.format(privateKey))
        self.assertTrue(ensure_string(privateKey).startswith(
            '-----BEGIN RSA PRIVATE KEY-----'))

        privateKey = serialization.load_pem_private_key(
            b(privateKey),
            password=None,
            backend=default_backend())

        decrypted = privateKey.decrypt(
            base64.b64decode(encrypted),
            padding.OAEP(
                mgf=padding.MGF1(algorithm=hashes.SHA1()),
                algorithm=hashes.SHA1(),
                label=None
            )
        )
        print('decrypted: {}'.format(decrypted))

        self.assertEqual(decrypted, original)

        token = engine.lookup('https://discovery.etcd.io/new')
        self.assertEqual(token.startswith(
            'https://discovery.etcd.io/'), True)
        self.assertEqual(len(token), 58)

        self.assertEqual(len(engine.secrets), 13)

        with self.assertRaises(LookupError):
            localKey = engine.lookup('rsa_private.local')

        localKey = engine.lookup('rsa_public.local')
        if len(localKey) > 0:
            path = engine.get_shared_key_files()[0]
            with open(os.path.expanduser(path)) as stream:
                text = stream.read()
                stream.close()
                self.assertEqual(localKey.strip(), text.strip())
                plogging.info("Successful lookup of local public key")
Esempio n. 4
0
    def test_keys(self):

        engine = PlumberyEngine()
        self.assertEqual(engine._sharedKeyFiles, [])

        with self.assertRaises(ValueError):
            engine.set_shared_key_files('this_does_not_exist')
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files())

        with mock.patch.object(engine, 'get_shared_key_files') as patched:
            patched.return_value = []

            files = ['*unknown-file*', '**me-too*']
            with self.assertRaises(ValueError):
                engine.set_shared_key_files(files)

        file = os.path.abspath(
            os.path.dirname(__file__)) + '/fixtures/dummy_rsa.pub'
        engine.set_shared_key_files(file)
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertEqual(engine.get_shared_key_files()[0], file)
        self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files())

        with mock.patch.object(engine, 'get_shared_key_files') as patched:
            patched.return_value = []

            files = [file, file, file]
            engine.set_shared_key_files(files)

            self.assertEqual(engine._sharedKeyFiles, [file])

        if 'SHARED_KEY' in os.environ:
            memory = os.environ["SHARED_KEY"]
        else:
            memory = None

        engine._sharedKeyFiles = []
        os.environ["SHARED_KEY"] = 'this_does_not_exist'
        with self.assertRaises(ValueError):
            engine.set_shared_key_files()
        with self.assertRaises(ValueError):
            engine.get_shared_key_files()
        self.assertTrue(isinstance(engine._sharedKeyFiles, list))

        engine._sharedKeyFiles = []
        os.environ["SHARED_KEY"] = file
        engine.set_shared_key_files()
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertEqual(engine.get_shared_key_files()[0], file)
        self.assertEqual(engine._sharedKeyFiles, engine.get_shared_key_files())

        if memory is None:
            os.environ.pop("SHARED_KEY")
        else:
            os.environ["SHARED_KEY"] = memory

        with mock.patch.object(engine, 'get_shared_key_files') as patched:
            patched.return_value = []

            self.assertTrue(isinstance(engine.get_shared_key_files(), list))

            engine.set_shared_key_files()
            self.assertTrue(plogging.foundErrors())

            with self.assertRaises(ValueError):
                engine.set_shared_key_files('this_does_not_exist')

            file = os.path.abspath(
                os.path.dirname(__file__)) + '/fixtures/dummy_rsa.pub'
            engine.set_shared_key_files(file)
            self.assertEqual(engine._sharedKeyFiles, [file])
Esempio n. 5
0
    def test_lookup(self):

        engine = PlumberyEngine()
        self.assertEqual(engine.lookup('plumbery.version'), __version__)

        engine.secrets = {}
        random = engine.lookup('secret.random')
        self.assertEqual(len(random), 9)
        self.assertEqual(engine.lookup('secret.random'), random)

        md5 = engine.lookup('secret.random.md5')
        self.assertEqual(len(md5), 32)
        self.assertNotEqual(md5, random)

        sha = engine.lookup('secret.random.sha1')
        self.assertEqual(len(sha), 40)
        self.assertNotEqual(sha, random)

        sha = engine.lookup('secret.random.sha256')
        self.assertEqual(len(sha), 64)
        self.assertNotEqual(sha, random)

        id1 = engine.lookup('id1.uuid')
        self.assertEqual(len(id1), 36)
        self.assertEqual(engine.lookup('id1.uuid'), id1)
        id2 = engine.lookup('id2.uuid')
        self.assertEqual(len(id2), 36)
        self.assertNotEqual(id1, id2)

        engine.lookup('application.secret')
        engine.lookup('database.secret')
        engine.lookup('master.secret')
        engine.lookup('slave.secret')

        original = b'hello world'
        print('original: {}'.format(original))

        text = ensure_string(engine.lookup('rsa_public.pair1'))
        print('rsa_public.pair1: {}'.format(text))

        self.assertTrue(text.startswith('ssh-rsa '))

        text = b(text)
        key = serialization.load_ssh_public_key(data=text,
                                                backend=default_backend())

        encrypted = key.encrypt(
            original,
            padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()),
                         algorithm=hashes.SHA1(),
                         label=None))
        encrypted = base64.b64encode(encrypted)
        print('encrypted: {}'.format(encrypted))

        privateKey = engine.lookup('rsa_private.pair1')
        print('rsa_private.pair1: {}'.format(privateKey))
        self.assertTrue(
            ensure_string(privateKey).startswith(
                '-----BEGIN RSA PRIVATE KEY-----'))

        privateKey = serialization.load_pem_private_key(
            b(privateKey), password=None, backend=default_backend())

        decrypted = privateKey.decrypt(
            base64.b64decode(encrypted),
            padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()),
                         algorithm=hashes.SHA1(),
                         label=None))
        print('decrypted: {}'.format(decrypted))

        self.assertEqual(decrypted, original)

        token = engine.lookup('https://discovery.etcd.io/new')
        self.assertEqual(token.startswith('https://discovery.etcd.io/'), True)
        self.assertEqual(len(token), 58)

        self.assertEqual(len(engine.secrets), 13)

        with self.assertRaises(LookupError):
            localKey = engine.lookup('rsa_private.local')

        localKey = engine.lookup('rsa_public.local')
        if len(localKey) > 0:
            path = engine.get_shared_key_files()[0]
            with open(os.path.expanduser(path)) as stream:
                text = stream.read()
                stream.close()
                self.assertEqual(localKey.strip(), text.strip())
                plogging.info("Successful lookup of local public key")
Esempio n. 6
0
    def test_set(self):

        engine = PlumberyEngine()
        DimensionDataNodeDriver.connectionCls.conn_classes = (
            None, DimensionDataMockHttp)
        DimensionDataMockHttp.type = None
        self.region = DimensionDataNodeDriver(*DIMENSIONDATA_PARAMS)

        file = os.path.abspath(
            os.path.dirname(__file__)) + '/fixtures/dummy_rsa.pub'

        settings = {
            'keys': ["*hello-there*"],
        }

        with self.assertRaises(ValueError):
            engine.set_settings(settings)

        settings = {
            'keys': [file],
        }

        engine.set_settings(settings)
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertTrue(file in engine.get_shared_key_files())

        settings = {
            'safeMode': False,
            'polishers': [
                {
                    'ansible': {}
                },
                {
                    'configure': {}
                },
            ],
            'keys': [file, file],
        }

        engine.set_settings(settings)
        self.assertEqual(engine.safeMode, False)
        self.assertTrue(isinstance(engine.get_shared_key_files(), list))
        self.assertTrue(file in engine.get_shared_key_files())

        engine.add_facility(myFacility)
        self.assertEqual(len(engine.facilities), 1)

        self.assertEqual(engine.get_shared_user(), 'root')
        engine.set_shared_user('ubuntu')
        self.assertEqual(engine.get_shared_user(), 'ubuntu')

        engine.set_shared_secret('fake_secret')
        self.assertEqual(engine.get_shared_secret(), 'fake_secret')

        random = engine.get_secret('random')
        self.assertEqual(len(random), 9)
        self.assertEqual(engine.get_secret('random'), random)

        engine.set_user_name('fake_name')
        self.assertEqual(engine.get_user_name(), 'fake_name')

        engine.set_user_password('fake_password')
        self.assertEqual(engine.get_user_password(), 'fake_password')