예제 #1
0
 def import_key_pair_from_string(self, name, key_material):
     key_pair = KeyPair(name=name,
                        public_key=key_material,
                        fingerprint='fingerprint',
                        private_key='private_key',
                        driver=self)
     return key_pair
예제 #2
0
파일: gandi.py 프로젝트: godaddy/libcloud
 def _to_key_pair(self, data):
     key_pair = KeyPair(name=data['name'],
                        fingerprint=data['fingerprint'],
                        public_key=data.get('value', None),
                        private_key=data.get('privatekey', None),
                        driver=self, extra={'id': data['id']})
     return key_pair
예제 #3
0
 def _to_key_pair(self, data):
     try:
         pubkey = data['ssh_pub_key']
     except KeyError:
         pubkey = None
     return KeyPair(data['name'], public_key=pubkey, fingerprint=None,
                    driver=self, private_key=None, extra={'id': data['id']})
예제 #4
0
 def _to_key_pair(self, data):
     extra = {'id': data['id']}
     return KeyPair(name=data['name'],
                    fingerprint=data['fingerprint'],
                    public_key=data['public_key'],
                    private_key=None,
                    driver=self,
                    extra=extra)
예제 #5
0
 def _to_key_pair(self, elem):
     key_pair = KeyPair(name=elem['label'],
                        public_key=elem['key'],
                        fingerprint=elem['fingerprint'],
                        private_key=elem.get('private', None),
                        driver=self,
                        extra={'id': elem['id']})
     return key_pair
예제 #6
0
 def get_key_pair(self, name):
     try:
         key_material = self.key_pairs[name]
     except KeyError:
         raise KeyPairDoesNotExistError(name, self)
     return KeyPair(name, key_material,
                    get_key_fingerprint(parse_openssh_pubkey(key_material)),
                    self)
예제 #7
0
 def _to_key_pair(self, data):
     extra = {'created_at': data['created_at'],
              'updated_at': data['updated_at']}
     return KeyPair(name=data['id'],
                    fingerprint=None,
                    public_key=data['key'],
                    private_key=None,
                    driver=self,
                    extra=extra)
예제 #8
0
파일: dummy.py 프로젝트: wandera/libcloud
 def import_key_pair_from_string(self, name, key_material):
     key_pair = KeyPair(
         name=name,
         public_key=key_material,
         fingerprint="fingerprint",
         private_key="private_key",
         driver=self,
     )
     return key_pair
예제 #9
0
 def _to_key_pair(self, key_pair):
     private_key = ""
     if "PrivateKey" in key_pair:
         private_key = key_pair["PrivateKey"]
     return KeyPair(name=key_pair["KeypairName"],
                    public_key="",
                    private_key=private_key,
                    fingerprint=key_pair["KeypairFingerprint"],
                    driver=self)
예제 #10
0
 def _to_key_pair(self, data):
     extra = {"id": data["id"]}
     return KeyPair(
         name=data["name"],
         fingerprint=data["fingerprint"],
         public_key=data["public_key"],
         private_key=None,
         driver=self,
         extra=extra,
     )
예제 #11
0
 def _to_key_pair(self, elem):
     key_pair = KeyPair(
         name=elem["label"],
         public_key=elem["key"],
         fingerprint=elem["fingerprint"],
         private_key=elem.get("private", None),
         driver=self,
         extra={"id": elem["id"]},
     )
     return key_pair
예제 #12
0
 def _to_key_pair(self, data):
     key_pair = KeyPair(
         name=data["name"],
         fingerprint=data["fingerprint"],
         public_key=data.get("value", None),
         private_key=data.get("privatekey", None),
         driver=self,
         extra={"id": data["id"]},
     )
     return key_pair
 def _ssh_public_key_to_key_pair(self, ssh_public_key, name=None):
     key_type, key_content, key_name = self._parse_ssh_public_key(ssh_public_key)
                          
     public_key_name = name if name else key_name                   
     public_key = '{} {} {}'.format(key_type, key_content, public_key_name)
         
     return KeyPair(name=public_key_name,
                    public_key=public_key,
                    fingerprint=None,
                    driver=self,
                    extra={'public_key_type': key_type,
                           'public_key_content': key_content})
예제 #14
0
 def _to_key_pair(self, data):
     extra = {
         "created_at": data["created_at"],
         "updated_at": data["updated_at"]
     }
     return KeyPair(
         name=data["id"],
         fingerprint=None,
         public_key=data["key"],
         private_key=None,
         driver=self,
         extra=extra,
     )
예제 #15
0
 def list_key_pairs(self):
     response = self.connection.request("v1/sshkeys")
     key_pairs = []
     for kp in response.object:
         key_pair = KeyPair(
             name=kp["name"],
             public_key=kp["key"],
             fingerprint=get_pubkey_openssh_fingerprint(kp["key"]),
             driver=self,
             extra=dict(id=kp["id"]),
         )
         key_pairs.append(key_pair)
     return key_pairs
예제 #16
0
    def _to_key(self, data, name=None, sshkey=None):
        extra = {'uuid': data['object_uuid'], 'labels': data.get('labels', [])}

        name = data.get('name', name)
        sshkey = data.get('sshkey', sshkey)

        key = KeyPair(name=name,
                      fingerprint=data['object_uuid'],
                      public_key=sshkey,
                      private_key=None,
                      extra=extra,
                      driver=self.connection.driver)

        return key
예제 #17
0
    def list_key_pairs(self):
        """
        List all the available SSH keys.

        :return: Available SSH keys.
        :rtype: ``list`` of :class:`KeyPair`
        """
        response = self.connection.request('/users/%s' % (self._get_user_id()),
                                           region='account')
        keys = response.object['user']['ssh_public_keys']
        return [KeyPair(name=' '.join(key['key'].split(' ')[2:]),
                        public_key=' '.join(key['key'].split(' ')[:2]),
                        fingerprint=key['fingerprint'],
                        driver=self) for key in keys]
 def __init__(self):  # pylint: disable=W0231
     self._TEST_SIZE = NodeSize(
         id="test_id",
         name="test_size",
         ram=4096,
         disk=10240,
         bandwidth=100000,
         price=0,
         driver=self,
     )
     self._TEST_NODE = Node(
         id="test_id",
         name="test_node",
         state=NodeState.RUNNING,
         public_ips=["1.2.3.4"],
         private_ips=["2.3.4.5"],
         driver=self,
         size=self._TEST_SIZE,
         extra={"ex_key": "ex_value"},
     )
     self._TEST_LOCATION = NodeLocation(id="test_location",
                                        name="location1",
                                        country="Australia",
                                        driver=self)
     self._TEST_VOLUME = StorageVolume(
         id="vol1",
         name="vol_name",
         size=40960,
         driver=self,
         state=StorageVolumeState.AVAILABLE,
         extra={"ex_key": "ex_value"},
     )
     self._TEST_VOLUME_SNAPSHOT = VolumeSnapshot(id="snap1",
                                                 size=80960,
                                                 driver=self)
     self._TEST_IMAGE = NodeImage(
         id="image1",
         name="test_image",
         extra={"ex_key": "ex_value"},
         driver=self,
     )
     self._TEST_KEY_PAIR = KeyPair(
         name="test_key",
         fingerprint="abc123",
         public_key="pub123",
         private_key="priv123",
         driver=self,
         extra={"ex_key": "ex_value"},
     )
예제 #19
0
    def _to_key(self, data, name=None, sshkey=None):
        extra = {"uuid": data["object_uuid"], "labels": data.get("labels", [])}

        name = data.get("name", name)
        sshkey = data.get("sshkey", sshkey)

        key = KeyPair(
            name=name,
            fingerprint=data["object_uuid"],
            public_key=sshkey,
            private_key=None,
            extra=extra,
            driver=self.connection.driver,
        )

        return key
예제 #20
0
    def import_key_pair_from_string(self, name, key_material):
        """
        Import a new public key from string.

        :param name: Key pair name.
        :type name: ``str``

        :param key_material: Public key material.
        :type key_material: ``str``

        :return: Imported key pair object.
        :rtype: :class:`KeyPair`
        """
        new_key = KeyPair(name=name,
                          public_key=' '.join(key_material.split(' ')[:2]),
                          fingerprint=None,
                          driver=self)
        keys = [key for key in self.list_key_pairs() if not key.name == name]
        keys.append(new_key)
        return self._save_keys(keys)
예제 #21
0
 def __init__(self):  # pylint: disable=W0231
     self._TEST_SIZE = NodeSize(id='test_id',
                                name='test_size',
                                ram=4096,
                                disk=10240,
                                bandwidth=100000,
                                price=0,
                                driver=self)
     self._TEST_NODE = Node(id='test_id',
                            name='test_node',
                            state=NodeState.RUNNING,
                            public_ips=['1.2.3.4'],
                            private_ips=['2.3.4.5'],
                            driver=self,
                            size=self._TEST_SIZE,
                            extra={'ex_key': 'ex_value'})
     self._TEST_LOCATION = NodeLocation(id='test_location',
                                        name='location1',
                                        country='Australia',
                                        driver=self)
     self._TEST_VOLUME = StorageVolume(
         id='vol1',
         name='vol_name',
         size=40960,
         driver=self,
         state=StorageVolumeState.AVAILABLE,
         extra={'ex_key': 'ex_value'})
     self._TEST_VOLUME_SNAPSHOT = VolumeSnapshot(id='snap1',
                                                 size=80960,
                                                 driver=self)
     self._TEST_IMAGE = NodeImage(id='image1',
                                  name='test_image',
                                  extra={'ex_key': 'ex_value'},
                                  driver=self)
     self._TEST_KEY_PAIR = KeyPair(name='test_key',
                                   fingerprint='abc123',
                                   public_key='pub123',
                                   private_key='priv123',
                                   driver=self,
                                   extra={'ex_key': 'ex_value'})
예제 #22
0
    def key_pair(self):
        """key pair object used for authentication. If None, then a akey_pair can be generated"""
        if self._key_pair is None:

            # generate a key
            key = RSAKey.generate(2048)
            fingerprint = key.get_fingerprint()

            # construct the public key
            public_key_base64 = key.get_base64()
            public_key = f'ssh-rsa {public_key_base64} {self.user}'

            # construct the private key
            private_key_fout = StringIO()
            key.write_private_key(private_key_fout)
            private_key = private_key_fout.getvalue()

            self._key_pair = KeyPair(f'key-pair-{self.name}',
                                     public_key=public_key,
                                     fingerprint=fingerprint,
                                     driver=self.driver,
                                     private_key=private_key)

        return self._key_pair
예제 #23
0
    def create_key_pair(self, name: str, public_key: str) -> KeyPair:
        payload = {
            "key": public_key,
            "name": name,
        }
        data = json.dumps(payload)
        headers = {"Content-Type": "application/json"}
        response = self.connection.request(
            "v1/sshkeys",
            method="POST",
            headers=headers,
            data=data,
        )
        kp = response.object

        key = kp.pop("key")
        key_pair = KeyPair(
            name=kp.pop("name"),
            public_key=key,
            fingerprint=get_pubkey_openssh_fingerprint(key),
            driver=self,
            extra=kp,
        )
        return key_pair
예제 #24
0
 def create_key_pair(self, name, ssh_key_pub):
     if name in self._key_pairs:
         raise Exception("Key pair '%s' already exists" % (name,))
     self._key_pairs[name] = k = KeyPair(name, "XXXX", "XXXX", self)
     return k
예제 #25
0
 def destroy_keypair(self, driver, keypair_name):
     keypair = KeyPair(keypair_name, None, None, None)
     driver.delete_key_pair(keypair)
     logger.info('Keypair \'%s\' destroyed', keypair.name)
예제 #26
0
 def _delete_keypair(self, kp_name):
     kp = KeyPair(name=kp_name, public_key=None, fingerprint=None,
                  driver=self.libcloud_driver)
     return self.libcloud_driver.delete_key_pair(kp)
예제 #27
0
 def _delete_keypair(self, kp_name):
     kp = KeyPair(name=kp_name, public_key=None, fingerprint=None,
                  driver=self._thread_local.driver)
     return self._thread_local.driver.delete_key_pair(kp)