Skip to content

Commit

Permalink
EC2 long identifiers for all resources
Browse files Browse the repository at this point in the history
  • Loading branch information
sjones4 committed Sep 28, 2018
1 parent 50548f3 commit d23c644
Show file tree
Hide file tree
Showing 29 changed files with 333 additions and 749 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,13 @@ public enum FieldRegexValue {
TAG_FILTER( "auto-scaling-group|key|value|propagate-at-launch" ),
TAG_RESOURCE( "auto-scaling-group" ),
TERMINATION_POLICY( "OldestInstance|NewestInstance|OldestLaunchConfiguration|ClosestToNextInstanceHour|Default" ),
VPC_ZONE_IDENTIFIER( "subnet-[0-9a-fA-F]{8}(?: *, *subnet-[0-9a-fA-F]{8})*" ),
VPC_ZONE_IDENTIFIER( "subnet-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?(?: *, *subnet-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?)*" ),

// EC2
EC2_NAME( "(?s).{1,255}" ),
EC2_MACHINE_IMAGE( "[ae]mi-[0-9a-fA-F]{8}" ),
EC2_KERNEL_IMAGE( "[ae]ki-[0-9a-fA-F]{8}" ),
EC2_RAMDISK_IMAGE( "[ae]ri-[0-9a-fA-F]{8}" ),
EC2_MACHINE_IMAGE( "[ae]mi-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" ),
EC2_KERNEL_IMAGE( "[ae]ki-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" ),
EC2_RAMDISK_IMAGE( "[ae]ri-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" ),
EC2_SNAPSHOT( "snap-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" ),
EC2_INSTANCE( "i-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" ),
EC2_INSTANCE_VERBOSE( "i-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?|verbose" ),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public final PersistingBuilder create( final OwnerFullName ownerFullName,
}

public static boolean containsSecurityGroupIdentifiers( final Iterable<String> groups ) {
return !Iterables.isEmpty( groups ) && Iterables.get( groups, 0 ).matches( "sg-[0-9A-Fa-f]{8}" );
return !Iterables.isEmpty( groups ) && Iterables.get( groups, 0 ).matches( "sg-[0-9A-Fa-f]{8}(?:[0-9a-fA-F]{9})?" );
}

public static class PersistingBuilder extends LaunchConfiguration.BaseBuilder<PersistingBuilder> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public Map<String, String> validate( ) {
// Validate security group identifiers or names used consistently
if ( securityGroups != null && securityGroups.getMember( ) != null ) {
int idCount = Stream.ofAll( securityGroups.getMember( ) )
.filter( group -> group.matches( "sg-[0-9A-Fa-f]{8}" ) )
.filter( group -> group.matches( "sg-[0-9A-Fa-f]{8}(?:[0-9a-fA-F]{9})?" ) )
.size( );
if ( idCount != 0 && idCount != securityGroups.getMember( ).size( ) ) {
errors.put( "SecurityGroups.member", "Must use either use group-id or group-name for all the security groups, not both at the same time" );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@
import com.eucalyptus.compute.common.backend.ModifySnapshotAttributeType;
import com.eucalyptus.compute.common.backend.ResetSnapshotAttributeResponseType;
import com.eucalyptus.compute.common.backend.ResetSnapshotAttributeType;
import com.eucalyptus.compute.common.internal.account.IdentityIdFormats;
import com.eucalyptus.compute.common.internal.blockstorage.Snapshot;
import com.eucalyptus.compute.common.internal.blockstorage.Snapshots;
import com.eucalyptus.compute.common.internal.blockstorage.State;
Expand Down Expand Up @@ -164,7 +163,6 @@ public CreateSnapshotResponseType create( final CreateSnapshotType request ) thr
public Snapshot get( ) {
try {
return initializeSnapshot(
Accounts.getAuthenticatedArn( ctx.getUser( ) ),
ctx.getUserFullName( ),
volReady,
sc,
Expand Down Expand Up @@ -434,16 +432,15 @@ private static boolean isReservedSnapshot( final String snapshotId ) {
return Predicates.or( SnapshotInUseVerifier.INSTANCE ).apply( snapshotId );
}

private static Snapshot initializeSnapshot( final String authenticatedArn,
final UserFullName userFullName,
private static Snapshot initializeSnapshot( final UserFullName userFullName,
final Volume vol,
final ServiceConfiguration sc,
final String description,
final List<ResourceTag> snapshotTags ) throws EucalyptusCloudException {
final EntityTransaction db = Entities.get( Snapshot.class );
try {
while ( true ) {
final String newId = IdentityIdFormats.generate( authenticatedArn, Snapshot.ID_PREFIX );
final String newId = ResourceIdentifiers.generateString( Snapshot.ID_PREFIX );
try {
Entities.uniqueResult( Snapshot.named( null, newId ) );
} catch ( NoSuchElementException e ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@
import com.eucalyptus.component.Topology;
import com.eucalyptus.compute.common.CloudMetadatas;
import com.eucalyptus.compute.common.VolumeStatusItemType;
import com.eucalyptus.compute.common.internal.account.IdentityIdFormats;
import com.eucalyptus.compute.common.internal.blockstorage.State;
import com.eucalyptus.compute.common.internal.blockstorage.Volume;
import com.eucalyptus.compute.common.internal.blockstorage.VolumeTag;
import com.eucalyptus.compute.common.internal.identifier.ResourceIdentifiers;
import com.eucalyptus.entities.Entities;
import com.eucalyptus.entities.TransactionException;
import com.eucalyptus.entities.TransactionResource;
Expand Down Expand Up @@ -209,7 +209,7 @@ public static Volume createStorageVolume(
final Integer newSize,
final Consumer<Volume> consumeInTx
) throws ExecutionException {
final String newId = IdentityIdFormats.generate( arn, Volume.ID_PREFIX );
final String newId = ResourceIdentifiers.generateString( Volume.ID_PREFIX );
LOG.debug("Creating volume");
final Volume newVol = Transactions.save( Volume.create( sc, owner, snapId, newSize, newId ), new Callback<Volume>( ) {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
import com.eucalyptus.auth.Permissions;
import com.eucalyptus.auth.principal.UserFullName;
import com.eucalyptus.cloud.VmInstanceToken;
import com.eucalyptus.compute.common.internal.account.IdentityIdFormats;
import com.eucalyptus.compute.common.internal.identifier.ResourceIdentifiers;
import com.eucalyptus.compute.common.internal.util.MetadataException;
import com.eucalyptus.component.Partition;
import com.eucalyptus.compute.common.backend.RunInstancesType;
Expand Down Expand Up @@ -166,7 +166,7 @@ private Allocation(final RunInstancesType request) {

this.reservationIndex = UniqueIds.nextIndex(VmInstance.class,
(long) request.getMaxCount());
this.reservationId = IdentityIdFormats.generate( getAuthenticatedArn( ), "r" );
this.reservationId = ResourceIdentifiers.generateString( "r" );
this.request.setMonitoring(this.monitoring);
// GRZE:FIXME: moved all this encode/decode junk into util.UserDatas
if (this.request.getUserData() != null) {
Expand Down Expand Up @@ -522,7 +522,7 @@ public Set<String> getInstanceIds( ) {

public String getInstanceId( int index ) {
if ( !this.instanceIds.containsKey( index ) ) {
this.instanceIds.put( index, VmInstances.getId( Accounts.getAuthenticatedArn( context.getUser( ) ) ) );
this.instanceIds.put( index, VmInstances.getId( ) );
}
return this.instanceIds.get(index);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import com.eucalyptus.auth.principal.UserPrincipal;
import com.eucalyptus.cluster.Clusters;
import com.eucalyptus.compute.common.NatGatewayType;
import com.eucalyptus.compute.common.internal.account.IdentityIdFormats;
import com.eucalyptus.compute.common.internal.util.NoSuchMetadataException;
import com.eucalyptus.compute.common.internal.util.ResourceAllocationException;
import com.eucalyptus.component.annotation.ComponentNamed;
Expand Down Expand Up @@ -2093,7 +2092,7 @@ private enum Identifier {
ela_attach( "networkInterfaceAttachment" ),
eni( "networkInterface" ),
eni_attach( "networkInterfaceAttachment" ),
i( "instance", LongIdStyle.Configurable ),
i( "instance" ),
igw( "internetGateway" ),
nat( "natGateway", LongIdStyle.Always ),
rtb( "routeTable" ),
Expand All @@ -2109,7 +2108,7 @@ private enum Identifier {
private final String defaultListParameter;

Identifier( final String defaultParameter ) {
this( defaultParameter, LongIdStyle.Never );
this( defaultParameter, LongIdStyle.Configurable );
}

Identifier( final String defaultParameter, final LongIdStyle longIdStyle ) {
Expand All @@ -2126,11 +2125,11 @@ private String prefix( ) {
public String generate( final UserPrincipal identity ) {
switch ( longIdStyle ) {
case Never:
return ResourceIdentifiers.generateString( prefix( ) );
return ResourceIdentifiers.generateShortString( prefix( ) );
case Always:
return ResourceIdentifiers.generateLongString( prefix( ) );
case Configurable:
return IdentityIdFormats.generate( Accounts.getAuthenticatedArn( identity ), prefix( ) );
return ResourceIdentifiers.generateString( prefix( ) );
}
throw new IllegalStateException( "Unexpected long identity value " + longIdStyle );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,10 @@
import com.eucalyptus.compute.common.backend.DeleteTagsType;
import com.eucalyptus.compute.common.backend.StopInstancesType;
import com.eucalyptus.compute.common.backend.TerminateInstancesType;
import com.eucalyptus.compute.common.internal.account.IdentityIdFormats;
import com.eucalyptus.compute.common.internal.blockstorage.State;
import com.eucalyptus.compute.common.internal.blockstorage.Volume;
import com.eucalyptus.compute.common.internal.identifier.ResourceIdentifier;
import com.eucalyptus.compute.common.internal.identifier.ResourceIdentifiers;
import com.eucalyptus.compute.common.internal.images.BlockStorageImageInfo;
import com.eucalyptus.compute.common.internal.images.BootableImageInfo;
import com.eucalyptus.compute.common.internal.images.ImageInfo;
Expand Down Expand Up @@ -685,10 +686,10 @@ private long countPendingInstances( final OwnerFullName ownerFullName ) {
}


public static String getId( final String identityArn ) {
public static String getId( ) {
String vmId;
do {
vmId = IdentityIdFormats.generate( identityArn, VmInstance.ID_PREFIX );
vmId = ResourceIdentifiers.generateString( VmInstance.ID_PREFIX );
} while ( VmInstances.contains( vmId ) );
return vmId;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,22 @@ class ResourceIdentifiersSpecification extends Specification {
identifier << [ 'i-a0000000', 'vol-00f0000a' ]
}

def 'should allow long identifier to be truncated '() {
expect: 'valid long identifier is truncated to short identifier'
ResourceIdentifiers.truncate( identifier ) == truncated

where:
identifier | truncated
null | null
'' | ''
'i-00000000' | 'i-00000000'
'vol-00000000' | 'vol-00000000'
'XXXXX-aaaaaaaa' | 'XXXXX-aaaaaaaa'
'XX-XX-FFFFFFFF' | 'XX-XX-FFFFFFFF'
'i-00000000000000000' | 'i-00000000'
'vol-00000000000000000' | 'vol-00000000'
'XXXXX-aaaaaaaaaaaaaaaaa' | 'XXXXX-aaaaaaaa'
'XX-XX-FFFFFFFFFFFFFFFFF' | 'XX-XX-FFFFFFFF'
'XX-XX-FFFFFFFFFFFFFFFF' | 'XX-XX-FFFFFFFFFFFFFFFF'
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,10 @@ public NetworkAclEntryType( final Integer ruleNumber, final String protocol, fin
this.ruleAction = ruleAction;
this.egress = egress;
this.cidrBlock = cidrBlock;
if ( icmpCode != null && icmpCode > 0 ) {
if ( icmpType != null ) {
this.icmpTypeCode = new IcmpTypeCodeType( icmpCode, icmpType );
}
if ( portRangeFrom != null && portRangeFrom > 0 ) {
if ( portRangeFrom != null ) {
this.portRange = new PortRangeType( portRangeFrom, portRangeTo );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -932,7 +932,7 @@
<structure name="item" map-as="com.eucalyptus.compute.common.Filter" />
</collection>
</structure>
<collection name="natGatewayId" factory="org.jibx.runtime.Utility.arrayListFactory" field="natGatewayId" usage="optional">
<collection name="natGatewayId" factory="org.jibx.runtime.Utility.arrayListFactory" field="natGatewayId" usage="optional" item-type="java.lang.String">
<structure name="item" />
</collection>
<value name="maxResults" field="maxResults" usage="optional"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ interface AvailabilityZoneMetadata extends CloudMetadata {}
interface KeyPairMetadata extends CloudMetadata {}

@PolicyResourceType( "security-group" )
@CloudMetadataLongIdentifierConfigurable( prefix = "sg" )
interface NetworkGroupMetadata extends CloudMetadata {
String getGroupId( );
}
Expand All @@ -79,7 +80,7 @@ interface SnapshotMetadata extends CloudMetadata {
}

@PolicyResourceType( VmInstanceMetadata.POLICY_RESOURCE_TYPE )
@CloudMetadataLongIdentifierConfigurable( prefix = "i", relatedPrefixes = "r" )
@CloudMetadataLongIdentifierConfigurable( prefix = "i" )
interface VmInstanceMetadata extends CloudMetadata {
String POLICY_RESOURCE_TYPE = "instance";
}
Expand All @@ -98,26 +99,37 @@ interface VmTypeMetadata extends CloudMetadata {
interface TagMetadata extends CloudMetadata {}

@PolicyResourceType( "dhcp-options" )
@CloudMetadataLongIdentifierConfigurable( prefix = "dopt" )
interface DhcpOptionSetMetadata extends CloudMetadata {}

@PolicyResourceType( "internet-gateway" )
@CloudMetadataLongIdentifierConfigurable( prefix = "igw" )
interface InternetGatewayMetadata extends CloudMetadata {}

@PolicyResourceType( "nat-gateway" )
interface NatGatewayMetadata extends CloudMetadata {}

@PolicyResourceType( "network-acl" )
@CloudMetadataLongIdentifierConfigurable( prefix = "acl")
interface NetworkAclMetadata extends CloudMetadata {}

@PolicyResourceType( "network-interface" )
@CloudMetadataLongIdentifierConfigurable( prefix = "eni" )
interface NetworkInterfaceMetadata extends CloudMetadata {}

@PolicyResourceType( "route-table" )
@CloudMetadataLongIdentifierConfigurable( prefix = "rtb" )
interface RouteTableMetadata extends CloudMetadata {}

@PolicyResourceType( "subnet" )
@CloudMetadataLongIdentifierConfigurable( prefix = "subnet" )
interface SubnetMetadata extends CloudMetadata {}

@PolicyResourceType( "vpc" )
@CloudMetadataLongIdentifierConfigurable( prefix = "vpc" )
interface VpcMetadata extends CloudMetadata {}

@PolicyResourceType( "conversion-task" )
@CloudMetadataLongIdentifierConfigurable( relatedPrefixes = {"import-i", "import-vol"} )
interface ConversionTaskMetadata extends CloudMetadata {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@
@Target( ElementType.TYPE )
@Retention( RetentionPolicy.RUNTIME )
public @interface CloudMetadataLongIdentifierConfigurable {
String prefix( );
String prefix( ) default "";
String[] relatedPrefixes( ) default {};
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,14 @@
import com.eucalyptus.util.RestrictedTypes;

/**
* Functionality from this class moved to RestrictedTypes. This class remains
* in case we want to add any CloudMetadata specific functionality.
*
*/
public class CloudMetadatas extends RestrictedTypes {

public static final Pattern ID_IMAGE = Pattern.compile( "[ae](ki-|mi-|ri-)[0-9a-fA-F]{8}" );
public static final Pattern ID_KERNEL_IMAGE = Pattern.compile( "[ae]ki-[0-9a-fA-F]{8}" );
public static final Pattern ID_MACHINE_IMAGE = Pattern.compile( "[ae]mi-[0-9a-fA-F]{8}" );
public static final Pattern ID_RAMDISK_IMAGE = Pattern.compile( "[ae]ri-[0-9a-fA-F]{8}" );
public static final Pattern ID_IMAGE = Pattern.compile( "[ae](ki-|mi-|ri-)[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" );
public static final Pattern ID_KERNEL_IMAGE = Pattern.compile( "[ae]ki-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" );
public static final Pattern ID_MACHINE_IMAGE = Pattern.compile( "[ae]mi-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" );
public static final Pattern ID_RAMDISK_IMAGE = Pattern.compile( "[ae]ri-[0-9a-fA-F]{8}(?:[0-9a-fA-F]{9})?" );


/**
Expand Down
Loading

0 comments on commit d23c644

Please sign in to comment.