package com.eucalyptus.address;
import java.util.NoSuchElementException;
import org.apache.log4j.Logger;
import com.eucalyptus.cluster.SuccessCallback;
import com.eucalyptus.cluster.VmInstance;
import com.eucalyptus.cluster.VmInstances;
import com.eucalyptus.cluster.callback.QueuedEventCallback;
import com.eucalyptus.records.EventClass;
import com.eucalyptus.records.EventRecord;
import com.eucalyptus.records.EventType;
import edu.ucsb.eucalyptus.msgs.BaseMessage;
public class AddressCategory {
private static Logger LOG = Logger.getLogger( AddressCategory.class );
@SuppressWarnings( "unchecked" )
public static QueuedEventCallback unassign( final Address addr ) {
final String instanceId = addr.getInstanceId( );
final boolean systemOwned = addr.isSystemOwned( );
if( !VmInstance.DEFAULT_IP.equals( addr.getInstanceAddress( ) ) ) {
return addr.unassign( ).getCallback( ).then( new SuccessCallback( ) {
public void apply( BaseMessage response ) {
try {
VmInstance vm = VmInstances.getInstance( ).lookup( instanceId );
EventRecord.here( AddressCategory.class, EventClass.ADDRESS, EventType.ADDRESS_UNASSIGNING, "user="+vm.getOwnerId( ), "address="+addr.getName( ), "instanceid="+vm.getInstanceId( ), addr.isSystemOwned( ) ? "SYSTEM":"USER" ).info( );
Addresses.system( vm );
} catch ( NoSuchElementException e ) {}
}
} );
} else if( systemOwned ) {
addr.release( );
return new QueuedEventCallback.NOOP();
} else {
return new QueuedEventCallback.NOOP();
}
}
@SuppressWarnings( "unchecked" )
public static QueuedEventCallback assign( final Address addr, final VmInstance vm ) {
EventRecord.here( AddressCategory.class, EventClass.ADDRESS, EventType.ADDRESS_ASSIGNING, "user="+vm.getOwnerId( ), "address="+addr.getName( ), "instanceid="+vm.getInstanceId( ), addr.isSystemOwned( ) ? "SYSTEM":"USER", addr.toString( ) ).info( );
return addr.assign( vm.getInstanceId( ), vm.getPrivateAddress( ) ).getCallback( ).then( new SuccessCallback() {
public void apply( BaseMessage response ) {
vm.updatePublicAddress( addr.getName( ) );
}
});
}
}