func (s *S) TestDescribeInstancesExample1(c *C) { testServer.Response(200, nil, DescribeInstancesExample1) filter := ec2.NewFilter() filter.Add("key1", "value1") filter.Add("key2", "value2", "value3") resp, err := s.ec2.Instances([]string{"i-1", "i-2"}, nil) req := testServer.WaitRequest() c.Assert(req.Form["Action"], DeepEquals, []string{"DescribeInstances"}) c.Assert(req.Form["InstanceId.1"], DeepEquals, []string{"i-1"}) c.Assert(req.Form["InstanceId.2"], DeepEquals, []string{"i-2"}) c.Assert(err, IsNil) c.Assert(resp.RequestId, Equals, "98e3c9a4-848c-4d6d-8e8a-b1bdEXAMPLE") c.Assert(resp.Reservations, HasLen, 2) expectedGroups := []ec2.SecurityGroup{{Name: "default", Id: "sg-67ad940e"}} r0 := resp.Reservations[0] c.Assert(r0.ReservationId, Equals, "r-b27e30d9") c.Assert(r0.OwnerId, Equals, "999988887777") c.Assert(r0.RequesterId, Equals, "854251627541") c.Assert(r0.SecurityGroups, DeepEquals, expectedGroups) c.Assert(r0.Instances, HasLen, 1) r0i := r0.Instances[0] c.Assert(r0i.InstanceId, Equals, "i-c5cd56af") c.Assert(r0i.PrivateDNSName, Equals, "domU-12-31-39-10-56-34.compute-1.internal") c.Assert(r0i.DNSName, Equals, "ec2-174-129-165-232.compute-1.amazonaws.com") c.Assert(r0i.PrivateIPAddress, Equals, "10.198.85.190") c.Assert(r0i.IPAddress, Equals, "174.129.165.232") c.Assert(r0i.AvailZone, Equals, "us-east-1b") c.Assert(r0i.SecurityGroups, DeepEquals, expectedGroups) }
func (s *S) TestDescribeSecurityGroupsExampleWithFilter(c *C) { testServer.Response(200, nil, DescribeSecurityGroupsExample) filter := ec2.NewFilter() filter.Add("ip-permission.protocol", "tcp") filter.Add("ip-permission.from-port", "22") filter.Add("ip-permission.to-port", "22") filter.Add("ip-permission.group-name", "app_server_group", "database_group") _, err := s.ec2.SecurityGroups(nil, filter) req := testServer.WaitRequest() c.Assert(req.Form["Action"], DeepEquals, []string{"DescribeSecurityGroups"}) c.Assert(req.Form["Filter.1.Name"], DeepEquals, []string{"ip-permission.from-port"}) c.Assert(req.Form["Filter.1.Value.1"], DeepEquals, []string{"22"}) c.Assert(req.Form["Filter.2.Name"], DeepEquals, []string{"ip-permission.group-name"}) c.Assert(req.Form["Filter.2.Value.1"], DeepEquals, []string{"app_server_group"}) c.Assert(req.Form["Filter.2.Value.2"], DeepEquals, []string{"database_group"}) c.Assert(req.Form["Filter.3.Name"], DeepEquals, []string{"ip-permission.protocol"}) c.Assert(req.Form["Filter.3.Value.1"], DeepEquals, []string{"tcp"}) c.Assert(req.Form["Filter.4.Name"], DeepEquals, []string{"ip-permission.to-port"}) c.Assert(req.Form["Filter.4.Value.1"], DeepEquals, []string{"22"}) c.Assert(err, IsNil) }
func (s *S) TestDescribeImagesExample(c *C) { testServer.Response(200, nil, DescribeImagesExample) filter := ec2.NewFilter() filter.Add("key1", "value1") filter.Add("key2", "value2", "value3") resp, err := s.ec2.Images([]string{"ami-1", "ami-2"}, filter) req := testServer.WaitRequest() c.Assert(req.Form["Action"], DeepEquals, []string{"DescribeImages"}) c.Assert(req.Form["ImageId.1"], DeepEquals, []string{"ami-1"}) c.Assert(req.Form["ImageId.2"], DeepEquals, []string{"ami-2"}) c.Assert(req.Form["Filter.1.Name"], DeepEquals, []string{"key1"}) c.Assert(req.Form["Filter.1.Value.1"], DeepEquals, []string{"value1"}) c.Assert(req.Form["Filter.1.Value.2"], IsNil) c.Assert(req.Form["Filter.2.Name"], DeepEquals, []string{"key2"}) c.Assert(req.Form["Filter.2.Value.1"], DeepEquals, []string{"value2"}) c.Assert(req.Form["Filter.2.Value.2"], DeepEquals, []string{"value3"}) c.Assert(err, IsNil) c.Assert(resp.RequestId, Equals, "4a4a27a2-2e7c-475d-b35b-ca822EXAMPLE") c.Assert(resp.Images, HasLen, 1) i0 := resp.Images[0] c.Assert(i0.Id, Equals, "ami-a2469acf") c.Assert(i0.Type, Equals, "machine") c.Assert(i0.Name, Equals, "example-marketplace-amzn-ami.1") c.Assert(i0.Description, Equals, "Amazon Linux AMI i386 EBS") c.Assert(i0.Location, Equals, "aws-marketplace/example-marketplace-amzn-ami.1") c.Assert(i0.State, Equals, "available") c.Assert(i0.Public, Equals, true) c.Assert(i0.OwnerId, Equals, "123456789999") c.Assert(i0.OwnerAlias, Equals, "aws-marketplace") c.Assert(i0.Architecture, Equals, "i386") c.Assert(i0.KernelId, Equals, "aki-805ea7e9") c.Assert(i0.RootDeviceType, Equals, "ebs") c.Assert(i0.RootDeviceName, Equals, "/dev/sda1") c.Assert(i0.VirtualizationType, Equals, "paravirtual") c.Assert(i0.Hypervisor, Equals, "xen") c.Assert(i0.BlockDevices, HasLen, 1) c.Assert(i0.BlockDevices[0].DeviceName, Equals, "/dev/sda1") c.Assert(i0.BlockDevices[0].SnapshotId, Equals, "snap-787e9403") c.Assert(i0.BlockDevices[0].VolumeSize, Equals, int64(8)) c.Assert(i0.BlockDevices[0].DeleteOnTermination, Equals, true) }
func (s *S) TestDescribeSnapshotsExample(c *C) { testServer.Response(200, nil, DescribeSnapshotsExample) filter := ec2.NewFilter() filter.Add("key1", "value1") filter.Add("key2", "value2", "value3") resp, err := s.ec2.Snapshots([]string{"snap-1", "snap-2"}, filter) req := testServer.WaitRequest() c.Assert(req.Form["Action"], DeepEquals, []string{"DescribeSnapshots"}) c.Assert(req.Form["SnapshotId.1"], DeepEquals, []string{"snap-1"}) c.Assert(req.Form["SnapshotId.2"], DeepEquals, []string{"snap-2"}) c.Assert(req.Form["Filter.1.Name"], DeepEquals, []string{"key1"}) c.Assert(req.Form["Filter.1.Value.1"], DeepEquals, []string{"value1"}) c.Assert(req.Form["Filter.1.Value.2"], IsNil) c.Assert(req.Form["Filter.2.Name"], DeepEquals, []string{"key2"}) c.Assert(req.Form["Filter.2.Value.1"], DeepEquals, []string{"value2"}) c.Assert(req.Form["Filter.2.Value.2"], DeepEquals, []string{"value3"}) c.Assert(err, IsNil) c.Assert(resp.RequestId, Equals, "59dbff89-35bd-4eac-99ed-be587EXAMPLE") c.Assert(resp.Snapshots, HasLen, 1) s0 := resp.Snapshots[0] c.Assert(s0.Id, Equals, "snap-1a2b3c4d") c.Assert(s0.VolumeId, Equals, "vol-8875daef") c.Assert(s0.VolumeSize, Equals, "15") c.Assert(s0.Status, Equals, "pending") c.Assert(s0.StartTime, Equals, "2010-07-29T04:12:01.000Z") c.Assert(s0.Progress, Equals, "30%") c.Assert(s0.OwnerId, Equals, "111122223333") c.Assert(s0.Description, Equals, "Daily Backup") c.Assert(s0.Tags, HasLen, 1) c.Assert(s0.Tags[0].Key, Equals, "Purpose") c.Assert(s0.Tags[0].Value, Equals, "demo_db_14_backup") }
func (s *S) TestDescribeInstancesExample2(c *C) { testServer.Response(200, nil, DescribeInstancesExample2) filter := ec2.NewFilter() filter.Add("key1", "value1") filter.Add("key2", "value2", "value3") resp, err := s.ec2.Instances([]string{"i-1", "i-2"}, filter) req := testServer.WaitRequest() c.Assert(req.Form["Action"], DeepEquals, []string{"DescribeInstances"}) c.Assert(req.Form["InstanceId.1"], DeepEquals, []string{"i-1"}) c.Assert(req.Form["InstanceId.2"], DeepEquals, []string{"i-2"}) c.Assert(req.Form["Filter.1.Name"], DeepEquals, []string{"key1"}) c.Assert(req.Form["Filter.1.Value.1"], DeepEquals, []string{"value1"}) c.Assert(req.Form["Filter.1.Value.2"], IsNil) c.Assert(req.Form["Filter.2.Name"], DeepEquals, []string{"key2"}) c.Assert(req.Form["Filter.2.Value.1"], DeepEquals, []string{"value2"}) c.Assert(req.Form["Filter.2.Value.2"], DeepEquals, []string{"value3"}) c.Assert(err, IsNil) c.Assert(resp.RequestId, Equals, "59dbff89-35bd-4eac-99ed-be587EXAMPLE") c.Assert(resp.Reservations, HasLen, 1) r0 := resp.Reservations[0] r0i := r0.Instances[0] c.Assert(r0i.State.Code, Equals, 16) c.Assert(r0i.State.Name, Equals, "running") r0t0 := r0i.Tags[0] r0t1 := r0i.Tags[1] c.Assert(r0t0.Key, Equals, "webserver") c.Assert(r0t0.Value, Equals, "") c.Assert(r0t1.Key, Equals, "stack") c.Assert(r0t1.Value, Equals, "Production") }
func (s *AmazonServerSuite) TestAssignUnassignPrivateIPs(c *C) { vpcResp, err := s.ec2.CreateVPC("10.7.0.0/16", "") c.Assert(err, IsNil) vpcId := vpcResp.VPC.Id defer s.deleteVPCs(c, []string{vpcId}) subResp := s.createSubnet(c, vpcId, "10.7.1.0/24", "") subId := subResp.Subnet.Id defer s.deleteSubnets(c, []string{subId}) // Launch a m1.small instance, so we can later assign up to 4 // private IPs. instList, err := s.ec2.RunInstances(&ec2.RunInstances{ ImageId: imageId, InstanceType: "m1.small", SubnetId: subId, }) c.Assert(err, IsNil) inst := instList.Instances[0] c.Assert(inst, NotNil) instId := inst.InstanceId defer terminateInstances(c, s.ec2, []string{instId}) // We need to wait for the instance to change state to 'running', // so its automatically created network interface on the created // subnet will appear. testAttempt := aws.AttemptStrategy{ Total: 5 * time.Minute, Delay: 5 * time.Second, } var newNIC *ec2.NetworkInterface f := ec2.NewFilter() f.Add("subnet-id", subId) for a := testAttempt.Start(); a.Next(); { resp, err := s.ec2.NetworkInterfaces(nil, f) if err != nil { c.Logf("NetworkInterfaces returned: %v; retrying...", err) continue } for _, iface := range resp.Interfaces { c.Logf("found NIC %v", iface) if iface.Attachment.InstanceId == instId { c.Logf("found instance %v NIC", instId) newNIC = &iface break } } if newNIC != nil { break } } if newNIC == nil { c.Fatalf("timeout while waiting for the NIC to appear") } c.Check(newNIC.PrivateIPAddress, Matches, `^10\.7\.1\.\d+$`) c.Check(newNIC.PrivateIPs, HasLen, 1) // Now let's try assigning some more private IPs. ips := []string{"10.7.1.25", "10.7.1.30"} _, err = s.ec2.AssignPrivateIPAddresses(newNIC.Id, ips, 0, false) c.Assert(err, IsNil) expectIPs := append([]string{newNIC.PrivateIPAddress}, ips...) s.waitForAddresses(c, newNIC.Id, expectIPs) // And finally, unassign them. _, err = s.ec2.UnassignPrivateIPAddresses(newNIC.Id, ips) c.Assert(err, IsNil) expectIPs = []string{newNIC.PrivateIPAddress} s.waitForAddresses(c, newNIC.Id, expectIPs) }
func (s *ServerTests) TestNetworkInterfaces(c *C) { vpcResp, err := s.ec2.CreateVPC("10.3.0.0/16", "") c.Assert(err, IsNil) vpcId := vpcResp.VPC.Id defer s.deleteVPCs(c, []string{vpcId}) subResp := s.createSubnet(c, vpcId, "10.3.1.0/24", "") subId := subResp.Subnet.Id defer s.deleteSubnets(c, []string{subId}) sg := s.makeTestGroupVPC(c, vpcId, "vpc-sg-1", "vpc test group1") defer s.deleteGroups(c, []ec2.SecurityGroup{sg}) instList, err := s.ec2.RunInstances(&ec2.RunInstances{ ImageId: imageId, InstanceType: "t1.micro", SubnetId: subId, }) c.Assert(err, IsNil) inst := instList.Instances[0] c.Assert(inst, NotNil) instId := inst.InstanceId defer terminateInstances(c, s.ec2, []string{instId}) ips1 := []ec2.PrivateIP{{Address: "10.3.1.10", IsPrimary: true}} resp1, err := s.ec2.CreateNetworkInterface(ec2.CreateNetworkInterface{ SubnetId: subId, PrivateIPs: ips1, Description: "My first iface", }) c.Assert(err, IsNil) assertNetworkInterface(c, resp1.NetworkInterface, "", subId, ips1) c.Check(resp1.NetworkInterface.Description, Equals, "My first iface") id1 := resp1.NetworkInterface.Id ips2 := []ec2.PrivateIP{ {Address: "10.3.1.20", IsPrimary: true}, {Address: "10.3.1.22", IsPrimary: false}, } resp2, err := s.ec2.CreateNetworkInterface(ec2.CreateNetworkInterface{ SubnetId: subId, PrivateIPs: ips2, SecurityGroupIds: []string{sg.Id}, }) c.Assert(err, IsNil) assertNetworkInterface(c, resp2.NetworkInterface, "", subId, ips2) c.Assert(resp2.NetworkInterface.Groups, DeepEquals, []ec2.SecurityGroup{sg}) id2 := resp2.NetworkInterface.Id // We only check for the network interfaces we just created, // because the user might have others in his account (when testing // against the EC2 servers). In some cases it takes a short while // until both interfaces are created, so we need to retry a few // times to make sure. testAttempt := aws.AttemptStrategy{ Total: 5 * time.Minute, Delay: 5 * time.Second, } var list *ec2.NetworkInterfacesResp done := false for a := testAttempt.Start(); a.Next(); { c.Logf("waiting for %v to be created", []string{id1, id2}) list, err = s.ec2.NetworkInterfaces(nil, nil) if err != nil { c.Logf("retrying; NetworkInterfaces returned: %v", err) continue } found := 0 for _, iface := range list.Interfaces { c.Logf("found NIC %v", iface) switch iface.Id { case id1: assertNetworkInterface(c, iface, id1, subId, ips1) found++ case id2: assertNetworkInterface(c, iface, id2, subId, ips2) found++ } if found == 2 { done = true break } } if done { c.Logf("all NICs were created") break } } if !done { c.Fatalf("timeout while waiting for NICs %v", []string{id1, id2}) } list, err = s.ec2.NetworkInterfaces([]string{id1}, nil) c.Assert(err, IsNil) c.Assert(list.Interfaces, HasLen, 1) assertNetworkInterface(c, list.Interfaces[0], id1, subId, ips1) f := ec2.NewFilter() f.Add("network-interface-id", id2) list, err = s.ec2.NetworkInterfaces(nil, f) c.Assert(err, IsNil) c.Assert(list.Interfaces, HasLen, 1) assertNetworkInterface(c, list.Interfaces[0], id2, subId, ips2) // Attachment might fail if the instance is not running yet, // so we retry for a while until it succeeds. var attResp *ec2.AttachNetworkInterfaceResp for a := testAttempt.Start(); a.Next(); { attResp, err = s.ec2.AttachNetworkInterface(id2, instId, 1) if err != nil { c.Logf("AttachNetworkInterface returned: %v; retrying...", err) attResp = nil continue } c.Logf("AttachNetworkInterface succeeded") c.Check(attResp.AttachmentId, Not(Equals), "") break } if attResp == nil { c.Fatalf("timeout while waiting for AttachNetworkInterface to succeed") } list, err = s.ec2.NetworkInterfaces([]string{id2}, nil) c.Assert(err, IsNil) att := list.Interfaces[0].Attachment c.Check(att.Id, Equals, attResp.AttachmentId) c.Check(att.InstanceId, Equals, instId) c.Check(att.DeviceIndex, Equals, 1) c.Check(att.Status, Matches, "(attaching|in-use)") _, err = s.ec2.DetachNetworkInterface(att.Id, true) c.Check(err, IsNil) _, err = s.ec2.DeleteNetworkInterface(id1) c.Assert(err, IsNil) // We might not be able to delete the interface until the // detachment is completed, so we need to retry here as well. for a := testAttempt.Start(); a.Next(); { _, err = s.ec2.DeleteNetworkInterface(id2) if err != nil { c.Logf("DeleteNetworkInterface returned: %v; retrying...", err) continue } c.Logf("DeleteNetworkInterface succeeded") return } c.Fatalf("timeout while waiting for DeleteNetworkInterface to succeed") }