protected void authorizeGroupToItself(String region, String name) { try { super.authorizeGroupToItself(region, name); } catch (AWSResponseException e) { logger.warn(e, "<< error authorizing securityGroup(%s)", name); } }
@Override public String load(RegionAndName from) { RegionNameAndIngressRules realFrom = RegionNameAndIngressRules.class.cast(from); createSecurityGroupInRegion(from.getRegion(), from.getName(), realFrom.getPorts()); return from.getName(); }
private void createSecurityGroupInRegion(String region, String name, int... ports) { checkNotNull(region, "region"); checkNotNull(name, "name"); logger.debug(">> creating securityGroup region(%s) name(%s)", region, name); try { securityClient.createSecurityGroupInRegion(region, name, name); boolean created = securityGroupEventualConsistencyDelay.apply(new RegionAndName(region, name)); if (!created) throw new RuntimeException(String.format("security group %s/%s is not available after creating", region, name)); logger.debug("<< created securityGroup(%s)", name); for (int port : ports) { createIngressRuleForTCPPort(region, name, port); } if (ports.length > 0) { authorizeGroupToItself(region, name); } } catch (IllegalStateException e) { logger.debug("<< reused securityGroup(%s)", name); } }
@Test(expectedExceptions = RuntimeException.class) public void testWhenEventualConsistencyExpiresIllegalStateException() throws ExecutionException { SecurityGroupClient client = createMock(SecurityGroupClient.class); Predicate<RegionAndName> tester = Predicates.alwaysFalse(); client.createSecurityGroupInRegion("region", "group", "group"); replay(client); CreateSecurityGroupIfNeeded function = new CreateSecurityGroupIfNeeded(client, tester); function.load(new RegionNameAndIngressRules("region", "group", new int[] { 22 }, true)); } }
@Override public Image load(RegionAndName key) throws ExecutionException { try { org.jclouds.ec2.domain.Image image = Iterables.getOnlyElement(sync.getAMIApi().get() .describeImagesInRegion(key.getRegion(), imageIds(key.getName()))); return parser.apply(image); } catch (Exception e) { throw new ExecutionException(message(key, e), e); } }
@Test public void testReturnsNullWhenNotFound() throws Exception { EC2Client client = createMock(EC2Client.class); ElasticIPAddressClient ipClient = createMock(ElasticIPAddressClient.class); expect(client.getElasticIPAddressServices()).andReturn(ipClient).atLeastOnce(); expect(ipClient.describeAddressesInRegion("region")).andReturn(ImmutableSet.<PublicIpInstanceIdPair> of()) .atLeastOnce(); replay(client); replay(ipClient); LoadPublicIpForInstanceOrNull parser = new LoadPublicIpForInstanceOrNull(client); assertEquals(parser.load(new RegionAndName("region", "i-blah")), null); verify(client); verify(ipClient); }
private void createSecurityGroupInRegion(String region, String name, int... ports) { checkNotNull(region, "region"); checkNotNull(name, "name"); logger.debug(">> creating securityGroup region(%s) name(%s)", region, name); try { securityClient.createSecurityGroupInRegion(region, name, name); boolean created = securityGroupEventualConsistencyDelay.apply(new RegionAndName(region, name)); if (!created) throw new RuntimeException(String.format("security group %s/%s is not available after creating", region, name)); logger.debug("<< created securityGroup(%s)", name); for (int port : ports) { createIngressRuleForTCPPort(region, name, port); } if (ports.length > 0) { authorizeGroupToItself(region, name); } } catch (IllegalStateException e) { logger.debug("<< reused securityGroup(%s)", name); } }
protected void authorizeGroupToItself(String region, String name) { try { super.authorizeGroupToItself(region, name); } catch (AWSResponseException e) { logger.warn(e, "<< error authorizing securityGroup(%s)", name); } }
@Test(expectedExceptions = RuntimeException.class) public void testWhenEventualConsistencyExpiresIllegalStateException() throws ExecutionException { SecurityGroupApi client = createMock(SecurityGroupApi.class); Predicate<RegionAndName> tester = Predicates.alwaysFalse(); client.createSecurityGroupInRegion("region", "group", "group"); replay(client); CreateSecurityGroupIfNeeded function = new CreateSecurityGroupIfNeeded(client, tester); function.load(new RegionNameAndIngressRules("region", "group", new int[] { 22 }, true, null)); } }
@Override public String load(RegionAndName from) { RegionNameAndIngressRules realFrom = RegionNameAndIngressRules.class.cast(from); createSecurityGroupInRegion(from.getRegion(), from.getName(), realFrom.getPorts()); return from.getName(); }
@Override public Image load(RegionAndName key) throws ExecutionException { try { org.jclouds.ec2.domain.Image image = Iterables.getOnlyElement(sync.getAMIApi().get() .describeImagesInRegion(key.getRegion(), imageIds(key.getName()))); return parser.apply(image); } catch (Exception e) { throw new ExecutionException(message(key, e), e); } }
protected void authorizeGroupToItself(String region, String name) { try { super.authorizeGroupToItself(region, name); } catch (AWSResponseException e) { logger.warn(e, "<< error authorizing securityGroup(%s)", name); } }
@Test public void testIllegalStateExceptionCreatingGroupJustReturns() throws ExecutionException { SecurityGroupClient client = createMock(SecurityGroupClient.class); Predicate<RegionAndName> tester = Predicates.alwaysTrue(); client.createSecurityGroupInRegion("region", "group", "group"); expectLastCall().andThrow(new IllegalStateException()); replay(client); CreateSecurityGroupIfNeeded function = new CreateSecurityGroupIfNeeded(client, tester); assertEquals("group", function.load(new RegionNameAndIngressRules("region", "group", new int[] { 22 }, true))); verify(client); }
@Override public String load(RegionAndName from) { RegionNameAndIngressRules realFrom = RegionNameAndIngressRules.class.cast(from); createSecurityGroupInRegion(from.getRegion(), from.getName(), realFrom.getPorts()); return from.getName(); }
@Override public Image load(RegionAndName key) throws ExecutionException { try { org.jclouds.ec2.domain.Image image = Iterables.getOnlyElement(sync.getAMIApi().get() .describeImagesInRegion(key.getRegion(), imageIds(key.getName()))); return parser.apply(image); } catch (Exception e) { throw new ExecutionException(message(key, e), e); } }
@Test public void testIllegalStateExceptionCreatingGroupJustReturns() throws ExecutionException { SecurityGroupApi client = createMock(SecurityGroupApi.class); Predicate<RegionAndName> tester = Predicates.alwaysTrue(); client.createSecurityGroupInRegion("region", "group", "group"); expectLastCall().andThrow(new IllegalStateException()); replay(client); CreateSecurityGroupIfNeeded function = new CreateSecurityGroupIfNeeded(client, tester); assertEquals("group", function.load(new RegionNameAndIngressRules("region", "group", new int[] { 22 }, true, null))); verify(client); }
@Override public String load(RegionAndName from) { RegionNameAndIngressRules realFrom = RegionNameAndIngressRules.class.cast(from); createSecurityGroupInRegion(from.getRegion(), from.getName(), realFrom.getPorts()); return from.getName(); }
@Override public Image load(RegionAndName key) throws ExecutionException{ try { org.jclouds.ec2.domain.Image image = Iterables.getOnlyElement(sync.getAMIServices() .describeImagesInRegion(key.getRegion(), imageIds(key.getName()))); return parser.apply(image); } catch (Exception e) { throw new ExecutionException(message(key, e), e); } }
@Override public String load(RegionAndName from) { RegionNameAndIngressRules realFrom = RegionNameAndIngressRules.class.cast(from); createSecurityGroupInRegion(from.getRegion(), from.getName(), realFrom.getPorts()); return from.getName(); }
@Override public Image load(RegionAndName key) throws ExecutionException{ try { org.jclouds.ec2.domain.Image image = Iterables.getOnlyElement(sync.getAMIServices() .describeImagesInRegion(key.getRegion(), imageIds(key.getName()))); return parser.apply(image); } catch (Exception e) { throw new ExecutionException(message(key, e), e); } }