You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2013/09/25 15:45:47 UTC
[2/4] git commit: Issue LIBCLOUD-335: Add IAM Profile on node
creation for ec2 based providers.
Issue LIBCLOUD-335: Add IAM Profile on node creation for ec2 based providers.
Signed-off-by: Tomaz Muraus <to...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/df3eb017
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/df3eb017
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/df3eb017
Branch: refs/heads/trunk
Commit: df3eb0179ff0c179e2433981f6917a61cf682fba
Parents: 08a325a
Author: Xavier Barbosa <xa...@cafe.com>
Authored: Tue Sep 24 14:21:09 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Wed Sep 25 15:37:50 2013 +0200
----------------------------------------------------------------------
docs/compute/examples.rst | 11 +++++++++++
docs/examples/compute/create_ec2_node_iam.py | 20 ++++++++++++++++++++
docs/other/working-with-oo-apis.rst | 6 ++++++
libcloud/compute/drivers/ec2.py | 19 +++++++++++++++++--
4 files changed, 54 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/df3eb017/docs/compute/examples.rst
----------------------------------------------------------------------
diff --git a/docs/compute/examples.rst b/docs/compute/examples.rst
index 1176795..0892d6d 100644
--- a/docs/compute/examples.rst
+++ b/docs/compute/examples.rst
@@ -93,6 +93,17 @@ supported providers and provider constants, see
.. literalinclude:: /examples/compute/create_ec2_node_custom_ami.py
:language: python
+Create EC2 node using an IAM Profile
+------------------------------------
+
+.. note::
+
+ This example assumes the IAM profile already exists. If the key pair
+ doesn't exist yet, you must create it manually.
+
+.. literalinclude:: /examples/compute/create_ec2_node_iam.py
+ :language: python
+
Create a node on a CloudStack provider using a provided key pair and security groups
------------------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/df3eb017/docs/examples/compute/create_ec2_node_iam.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/create_ec2_node_iam.py b/docs/examples/compute/create_ec2_node_iam.py
new file mode 100644
index 0000000..952ef2b
--- /dev/null
+++ b/docs/examples/compute/create_ec2_node_iam.py
@@ -0,0 +1,20 @@
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+ACCESS_ID = 'your access id'
+SECRET_KEY = 'your secret key'
+IAM_PROFILE = 'your IAM profile arn or IAM profile name'
+
+IMAGE_ID = 'ami-c8052d8d'
+SIZE_ID = 't1.micro'
+cls = get_driver(Provider.EC2_US_WEST)
+driver = cls(ACCESS_ID, SECRET_KEY)
+
+# Here we select size and image
+sizes = driver.list_sizes()
+images = driver.list_images()
+
+size = [s for s in sizes if s.id == SIZE_ID][0]
+image = [i for i in images if i.id == IMAGE_ID][0]
+
+node = driver.create_node(name='test-node', image=image, size=size, ex_iamprofile=IAM_PROFILE)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/df3eb017/docs/other/working-with-oo-apis.rst
----------------------------------------------------------------------
diff --git a/docs/other/working-with-oo-apis.rst b/docs/other/working-with-oo-apis.rst
index 45fb45a..96b29b6 100644
--- a/docs/other/working-with-oo-apis.rst
+++ b/docs/other/working-with-oo-apis.rst
@@ -59,3 +59,9 @@ Example 2 - creating an EC2 instance with a known ``NodeSize`` and ``NodeImage``
.. literalinclude:: /examples/compute/create_ec2_node_manual_instantiation.py
:language: python
+
+Example 3 - creating an EC2 instance with an IAM profile
+--------------------------------------------------------
+
+.. literalinclude:: /examples/compute/create_ec2_node_iam.py
+ :language: python
http://git-wip-us.apache.org/repos/asf/libcloud/blob/df3eb017/libcloud/compute/drivers/ec2.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py
index 3ddb3e5..3be281e 100644
--- a/libcloud/compute/drivers/ec2.py
+++ b/libcloud/compute/drivers/ec2.py
@@ -543,7 +543,9 @@ class BaseEC2NodeDriver(NodeDriver):
'clienttoken': findattr(element=element, xpath="clientToken",
namespace=NAMESPACE),
'groups': groups,
- 'tags': tags
+ 'tags': tags,
+ 'iam_profile': findattr(element, xpath="iamInstanceProfile/id",
+ namespace=NAMESPACE)
}
)
return n
@@ -1325,7 +1327,7 @@ class BaseEC2NodeDriver(NodeDriver):
@keyword ex_maxcount: Maximum number of instances to launch
@type ex_maxcount: C{int}
- @keyword ex_security_groups: A list of namees of security groups to
+ @keyword ex_security_groups: A list of names of security groups to
assign to the node.
@type ex_security_groups: C{list}
@@ -1343,6 +1345,9 @@ class BaseEC2NodeDriver(NodeDriver):
[{'DeviceName': '/dev/sda1', 'Ebs.VolumeSize': 10},
{'DeviceName': '/dev/sdb', 'VirtualName': 'ephemeral0'}]
@type ex_blockdevicemappings: C{list} of C{dict}
+
+ @keyword ex_iamprofile: Name or ARN of IAM profile
+ @type ex_iamprofile: C{str}
"""
image = kwargs["image"]
size = kwargs["size"]
@@ -1412,6 +1417,16 @@ class BaseEC2NodeDriver(NodeDriver):
for k, v in mapping.items():
params['BlockDeviceMapping.%d.%s' % (idx, k)] = str(v)
+ if 'ex_iamprofile' in kwargs:
+ try:
+ if kwargs['ex_iamprofile'].startswith('arn:aws:iam:'):
+ params['IamInstanceProfile.Arn'] = kwargs['ex_iamprofile']
+ else:
+ params['IamInstanceProfile.Name'] = kwargs['ex_iamprofile']
+ except AttributeError as exception:
+ raise AttributeError(
+ 'ex_iamprofile not string')
+
object = self.connection.request(self.path, params=params).object
nodes = self._to_nodes(object, 'instancesSet/item')