github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/provider/ec2/export_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package ec2 5 6 import ( 7 "strings" 8 9 "gopkg.in/amz.v3/aws" 10 "gopkg.in/amz.v3/ec2" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/environs" 14 "github.com/juju/juju/environs/imagemetadata" 15 sstesting "github.com/juju/juju/environs/simplestreams/testing" 16 "github.com/juju/juju/instance" 17 jujustorage "github.com/juju/juju/storage" 18 ) 19 20 func StorageEC2(vs jujustorage.VolumeSource) *ec2.EC2 { 21 return vs.(*ebsVolumeSource).env.ec2 22 } 23 24 func JujuGroupName(e environs.Environ) string { 25 return e.(*environ).jujuGroupName() 26 } 27 28 func MachineGroupName(e environs.Environ, machineId string) string { 29 return e.(*environ).machineGroupName(machineId) 30 } 31 32 func EnvironEC2(e environs.Environ) *ec2.EC2 { 33 return e.(*environ).ec2 34 } 35 36 func InstanceEC2(inst instance.Instance) *ec2.Instance { 37 return inst.(*ec2Instance).Instance 38 } 39 40 func TerminatedInstances(e environs.Environ) ([]instance.Instance, error) { 41 return e.(*environ).AllInstancesByState("shutting-down", "terminated") 42 } 43 44 func InstanceSecurityGroups(e environs.Environ, ids []instance.Id, states ...string) ([]ec2.SecurityGroup, error) { 45 return e.(*environ).instanceSecurityGroups(ids, states...) 46 } 47 48 var ( 49 EC2AvailabilityZones = &ec2AvailabilityZones 50 AvailabilityZoneAllocations = &availabilityZoneAllocations 51 RunInstances = &runInstances 52 BlockDeviceNamer = blockDeviceNamer 53 GetBlockDeviceMappings = getBlockDeviceMappings 54 IsVPCNotUsableError = isVPCNotUsableError 55 IsVPCNotRecommendedError = isVPCNotRecommendedError 56 ) 57 58 const VPCIDNone = vpcIDNone 59 60 // TODO: Apart from overriding different hardcoded hosts, these two test helpers are identical. Let's share. 61 62 // UseTestImageData causes the given content to be served 63 // when the ec2 client asks for image data. 64 func UseTestImageData(c *gc.C, files map[string]string) { 65 if files != nil { 66 sstesting.SetRoundTripperFiles(sstesting.AddSignedFiles(c, files), nil) 67 } else { 68 sstesting.SetRoundTripperFiles(nil, nil) 69 } 70 } 71 72 var ( 73 ShortAttempt = &shortAttempt 74 DestroyVolumeAttempt = &destroyVolumeAttempt 75 DeleteSecurityGroupInsistently = &deleteSecurityGroupInsistently 76 TerminateInstancesById = &terminateInstancesById 77 ) 78 79 func EC2ErrCode(err error) string { 80 return ec2ErrCode(err) 81 } 82 83 // FabricateInstance creates a new fictitious instance 84 // given an existing instance and a new id. 85 func FabricateInstance(inst instance.Instance, newId string) instance.Instance { 86 oldi := inst.(*ec2Instance) 87 newi := &ec2Instance{ 88 e: oldi.e, 89 Instance: &ec2.Instance{}, 90 } 91 *newi.Instance = *oldi.Instance 92 newi.InstanceId = newId 93 return newi 94 } 95 96 func makeImage(id, storage, virtType, arch, version, region string) *imagemetadata.ImageMetadata { 97 return &imagemetadata.ImageMetadata{ 98 Id: id, 99 Storage: storage, 100 VirtType: virtType, 101 Arch: arch, 102 Version: version, 103 RegionName: region, 104 Endpoint: "https://ec2.endpoint.com", 105 Stream: "released", 106 } 107 } 108 109 var TestImageMetadata = []*imagemetadata.ImageMetadata{ 110 // LTS-dependent requires new entries upon new LTS release. 111 // 16.04:amd64 112 makeImage("ami-00000133", "ssd", "hvm", "amd64", "16.04", "test"), 113 makeImage("ami-00000139", "ebs", "hvm", "amd64", "16.04", "test"), 114 makeImage("ami-00000135", "ssd", "pv", "amd64", "16.04", "test"), 115 116 // 14.04:amd64 117 makeImage("ami-00000033", "ssd", "hvm", "amd64", "14.04", "test"), 118 119 // 14.04:i386 120 makeImage("ami-00000034", "ssd", "pv", "i386", "14.04", "test"), 121 122 // 12.10:amd64 123 makeImage("ami-01000035", "ssd", "hvm", "amd64", "12.10", "test"), 124 125 // 12.10:i386 126 makeImage("ami-01000034", "ssd", "hvm", "i386", "12.10", "test"), 127 128 // 13.04:i386 129 makeImage("ami-02000034", "ssd", "hvm", "i386", "13.04", "test"), 130 makeImage("ami-02000035", "ssd", "pv", "i386", "13.04", "test"), 131 } 132 133 func MakeTestImageStreamsData(region aws.Region) map[string]string { 134 testImageMetadataIndex := strings.Replace(testImageMetadataIndex, "$REGION", region.Name, -1) 135 testImageMetadataIndex = strings.Replace(testImageMetadataIndex, "$ENDPOINT", region.EC2Endpoint, -1) 136 return map[string]string{ 137 "/streams/v1/index.json": testImageMetadataIndex, 138 "/streams/v1/com.ubuntu.cloud:released:aws.json": testImageMetadataProduct, 139 } 140 } 141 142 // LTS-dependent requires new/updated entries upon new LTS release. 143 const testImageMetadataIndex = ` 144 { 145 "index": { 146 "com.ubuntu.cloud:released": { 147 "updated": "Wed, 01 May 2013 13:31:26 +0000", 148 "clouds": [ 149 { 150 "region": "$REGION", 151 "endpoint": "$ENDPOINT" 152 } 153 ], 154 "cloudname": "aws", 155 "datatype": "image-ids", 156 "format": "products:1.0", 157 "products": [ 158 "com.ubuntu.cloud:server:16.04:amd64", 159 "com.ubuntu.cloud:server:14.04:amd64", 160 "com.ubuntu.cloud:server:14.04:i386", 161 "com.ubuntu.cloud:server:12.10:i386", 162 "com.ubuntu.cloud:server:13.04:i386" 163 ], 164 "path": "streams/v1/com.ubuntu.cloud:released:aws.json" 165 } 166 }, 167 "updated": "Wed, 01 May 2013 13:31:26 +0000", 168 "format": "index:1.0" 169 } 170 ` 171 const testImageMetadataProduct = ` 172 { 173 "content_id": "com.ubuntu.cloud:released:aws", 174 "products": { 175 "com.ubuntu.cloud:server:16.04:amd64": { 176 "release": "trusty", 177 "version": "16.04", 178 "arch": "amd64", 179 "versions": { 180 "20121218": { 181 "items": { 182 "usee1pi": { 183 "root_store": "instance", 184 "virt": "pv", 185 "region": "us-east-1", 186 "id": "ami-00000111" 187 }, 188 "usww1pe": { 189 "root_store": "ssd", 190 "virt": "pv", 191 "region": "eu-west-1", 192 "id": "ami-00000116" 193 }, 194 "apne1pe": { 195 "root_store": "ssd", 196 "virt": "pv", 197 "region": "ap-northeast-1", 198 "id": "ami-00000126" 199 }, 200 "apne1he": { 201 "root_store": "ssd", 202 "virt": "hvm", 203 "region": "ap-northeast-1", 204 "id": "ami-00000187" 205 }, 206 "test1peebs": { 207 "root_store": "ssd", 208 "virt": "pv", 209 "region": "test", 210 "id": "ami-00000133" 211 }, 212 "test1pessd": { 213 "root_store": "ebs", 214 "virt": "pv", 215 "region": "test", 216 "id": "ami-00000139" 217 }, 218 "test1he": { 219 "root_store": "ssd", 220 "virt": "hvm", 221 "region": "test", 222 "id": "ami-00000135" 223 } 224 }, 225 "pubname": "ubuntu-trusty-16.04-amd64-server-20121218", 226 "label": "release" 227 } 228 } 229 }, 230 "com.ubuntu.cloud:server:14.04:amd64": { 231 "release": "trusty", 232 "version": "14.04", 233 "arch": "amd64", 234 "versions": { 235 "20121218": { 236 "items": { 237 "test1peebs": { 238 "root_store": "ssd", 239 "virt": "hvm", 240 "region": "test", 241 "id": "ami-00000033" 242 } 243 }, 244 "pubname": "ubuntu-trusty-14.04-amd64-server-20121218", 245 "label": "release" 246 } 247 } 248 }, 249 "com.ubuntu.cloud:server:14.04:i386": { 250 "release": "trusty", 251 "version": "14.04", 252 "arch": "i386", 253 "versions": { 254 "20121218": { 255 "items": { 256 "test1pe": { 257 "root_store": "ssd", 258 "virt": "pv", 259 "region": "test", 260 "id": "ami-00000034" 261 } 262 }, 263 "pubname": "ubuntu-trusty-14.04-i386-server-20121218", 264 "label": "release" 265 } 266 } 267 }, 268 "com.ubuntu.cloud:server:12.10:amd64": { 269 "release": "quantal", 270 "version": "12.10", 271 "arch": "amd64", 272 "versions": { 273 "20121218": { 274 "items": { 275 "usee1pi": { 276 "root_store": "instance", 277 "virt": "pv", 278 "region": "us-east-1", 279 "id": "ami-00000011" 280 }, 281 "usww1pe": { 282 "root_store": "ssd", 283 "virt": "pv", 284 "region": "eu-west-1", 285 "id": "ami-01000016" 286 }, 287 "apne1pe": { 288 "root_store": "ssd", 289 "virt": "pv", 290 "region": "ap-northeast-1", 291 "id": "ami-01000026" 292 }, 293 "apne1he": { 294 "root_store": "ssd", 295 "virt": "hvm", 296 "region": "ap-northeast-1", 297 "id": "ami-01000087" 298 }, 299 "test1he": { 300 "root_store": "ssd", 301 "virt": "hvm", 302 "region": "test", 303 "id": "ami-01000035" 304 } 305 }, 306 "pubname": "ubuntu-quantal-12.10-amd64-server-20121218", 307 "label": "release" 308 } 309 } 310 }, 311 "com.ubuntu.cloud:server:12.10:i386": { 312 "release": "quantal", 313 "version": "12.10", 314 "arch": "i386", 315 "versions": { 316 "20121218": { 317 "items": { 318 "test1pe": { 319 "root_store": "ssd", 320 "virt": "pv", 321 "region": "test", 322 "id": "ami-01000034" 323 }, 324 "apne1pe": { 325 "root_store": "ssd", 326 "virt": "pv", 327 "region": "ap-northeast-1", 328 "id": "ami-01000023" 329 } 330 }, 331 "pubname": "ubuntu-quantal-12.10-i386-server-20121218", 332 "label": "release" 333 } 334 } 335 }, 336 "com.ubuntu.cloud:server:13.04:i386": { 337 "release": "raring", 338 "version": "13.04", 339 "arch": "i386", 340 "versions": { 341 "20121218": { 342 "items": { 343 "test1pe": { 344 "root_store": "ssd", 345 "virt": "pv", 346 "region": "test", 347 "id": "ami-02000034" 348 } 349 }, 350 "pubname": "ubuntu-raring-13.04-i386-server-20121218", 351 "label": "release" 352 } 353 } 354 } 355 }, 356 "format": "products:1.0" 357 } 358 `