func (s *Route) CheckChanges(a, e, changes *Route) error { if a == nil { // TODO: Create validate method? if e.RouteTable == nil { return fi.RequiredField("RouteTable") } if e.CIDR == nil { return fi.RequiredField("CIDR") } targetCount := 0 if e.InternetGateway != nil { targetCount++ } if e.Instance != nil { targetCount++ } if targetCount == 0 { return fmt.Errorf("InternetGateway or Instance is required") } if targetCount != 1 { return fmt.Errorf("Cannot set both InternetGateway and Instance") } } if a != nil { if changes.RouteTable != nil { return fi.CannotChangeField("RouteTable") } if changes.CIDR != nil { return fi.CannotChangeField("CIDR") } } return nil }
func (s *Subnet) CheckChanges(a, e, changes *Subnet) error { if a == nil { if e.VPC == nil { return fi.RequiredField("VPC") } if e.CIDR == nil { // TODO: Auto-assign CIDR? return fi.RequiredField("CIDR") } } if a != nil { if changes.VPC != nil { // TODO: Do we want to destroy & recreate the subnet? return fi.CannotChangeField("VPC") } if changes.AvailabilityZone != nil { // TODO: Do we want to destroy & recreate the subnet? return fi.CannotChangeField("AvailabilityZone") } if changes.CIDR != nil { // TODO: Do we want to destroy & recreate the subnet? return fi.CannotChangeField("CIDR") } } return nil }
func (_ *IPAddress) CheckChanges(a, e, changes *IPAddress) error { if a != nil { if changes.Name != nil { return fi.CannotChangeField("Name") } if changes.Address != nil { return fi.CannotChangeField("Address") } } return nil }
func (_ *SecurityGroup) CheckChanges(a, e, changes *SecurityGroup) error { if a != nil { if changes.ID != nil { return fi.CannotChangeField("ID") } if changes.Name != nil { return fi.CannotChangeField("Name") } if changes.VPC != nil { return fi.CannotChangeField("VPC") } } return nil }
func (s *Keypair) CheckChanges(a, e, changes *Keypair) error { if a != nil { if changes.Name != nil { return fi.CannotChangeField("Name") } } return nil }
func (_ *PersistentDisk) CheckChanges(a, e, changes *PersistentDisk) error { if a != nil { if changes.SizeGB != nil { return fi.CannotChangeField("SizeGB") } if changes.Zone != nil { return fi.CannotChangeField("Zone") } if changes.VolumeType != nil { return fi.CannotChangeField("VolumeType") } } else { if e.Zone == nil { return fi.RequiredField("Zone") } } return nil }
func (s *InternetGateway) CheckChanges(a, e, changes *InternetGateway) error { if a != nil { // TODO: I think we can change it; we just detach & attach if changes.VPC != nil { return fi.CannotChangeField("VPC") } } return nil }
func (s *RouteTableAssociation) CheckChanges(a, e, changes *RouteTableAssociation) error { if a != nil { if e.RouteTable == nil { return fi.RequiredField("RouteTable") } if e.Subnet == nil { return fi.RequiredField("Subnet") } } if a != nil { if changes.RouteTable != nil { return fi.CannotChangeField("RouteTable") } if changes.Subnet != nil { return fi.CannotChangeField("Subnet") } } return nil }
func (s *IAMRole) CheckChanges(a, e, changes *IAMRole) error { if a != nil { if e.Name == nil { return fi.RequiredField("Name") } } else { if changes.Name == nil { return fi.CannotChangeField("Name") } } return nil }
func (s *RouteTable) CheckChanges(a, e, changes *RouteTable) error { if a == nil { if e.VPC == nil { return fi.RequiredField("VPC") } } if a != nil { if changes.VPC != nil && changes.VPC.ID != nil { return fi.CannotChangeField("VPC") } } return nil }
func (s *DHCPOptions) CheckChanges(a, e, changes *DHCPOptions) error { if a == nil { if e.Name == nil { return fi.RequiredField("Name") } } if a != nil { if changes.ID != nil { return fi.CannotChangeField("ID") } // TODO: Delete & create new DHCPOptions // We can't delete the DHCPOptions while it is attached, but we can change the tag (add a timestamp suffix?) if changes.DomainName != nil { return fi.CannotChangeField("DomainName") } if changes.DomainNameServers != nil { return fi.CannotChangeField("DomainNameServers") } } return nil }
func (_ *EBSVolume) CheckChanges(a, e, changes *EBSVolume) error { if a == nil { if e.Name == nil { return fi.RequiredField("Name") } } if a != nil { if changes.ID != nil { return fi.CannotChangeField("ID") } } return nil }
func (s *InstanceVolumeAttachment) CheckChanges(a, e, changes *InstanceVolumeAttachment) error { if a != nil { if changes.Device != nil { // TODO: Support this? return fi.CannotChangeField("Device") } } if a == nil { if e.Device == nil { return fi.RequiredField("Device") } } return nil }
func (s *VPC) CheckChanges(a, e, changes *VPC) error { if a == nil { if e.CIDR == nil { // TODO: Auto-assign CIDR? return fi.RequiredField("CIDR") } } if a != nil { if changes.CIDR != nil { // TODO: Do we want to destroy & recreate the VPC? return fi.CannotChangeField("CIDR") } } return nil }
func (s *VPCDHCPOptionsAssociation) CheckChanges(a, e, changes *VPCDHCPOptionsAssociation) error { if e.VPC == nil { return fi.RequiredField("VPC") } if e.DHCPOptions == nil { return fi.RequiredField("DHCPOptions") } if a != nil && changes != nil { if changes.VPC != nil { // Should be impossible anyway because VPC is our primary key... return fi.CannotChangeField("VPC") } } return nil }