diff --git a/pkg/util/aws/disk.go b/pkg/util/aws/disk.go index 0f607dea09..2f00c82a54 100644 --- a/pkg/util/aws/disk.go +++ b/pkg/util/aws/disk.go @@ -252,7 +252,7 @@ func (self *SRegion) GetDisks(instanceId string, zoneId string, storageType stri return nil, 0 , err } - disks := make([]SDisk, len(ret.Volumes)) + disks := []SDisk{} for _, item := range ret.Volumes { disk := SDisk{} disk.ZoneId = *item.AvailabilityZone diff --git a/pkg/util/aws/instance.go b/pkg/util/aws/instance.go index 164a84f1b6..a52a4e14c5 100644 --- a/pkg/util/aws/instance.go +++ b/pkg/util/aws/instance.go @@ -370,7 +370,7 @@ func (self *SRegion) GetInstances(zoneId string, ids []string, offset int, limit return nil, 0, err } - instances := make([]SInstance, 0) + instances := []SInstance{} for _, reservation := range res.Reservations { for _, instance := range reservation.Instances { sinstance := SInstance{ diff --git a/pkg/util/aws/securitygroup.go b/pkg/util/aws/securitygroup.go index 0f66a82f34..55ac87c49f 100644 --- a/pkg/util/aws/securitygroup.go +++ b/pkg/util/aws/securitygroup.go @@ -1,10 +1,10 @@ package aws import ( - "time" "yunion.io/x/jsonutils" "yunion.io/x/pkg/util/secrules" "github.com/aws/aws-sdk-go/service/ec2" + "yunion.io/x/log" ) type SecurityGroupPermissionNicType string @@ -15,8 +15,7 @@ const ( ) type SPermission struct { - CreateTime time.Time - Description string + Description string DestCidrIp string DestGroupId string DestGroupName string @@ -48,15 +47,17 @@ type Tag struct { type SSecurityGroup struct { vpc *SVpc - CreationTime time.Time - Description string - SecurityGroupId string - SecurityGroupName string - VpcId string - InnerAccessPolicy string - Permissions SPermissions + RegionId string + VpcId string + SecurityGroupId string + Description string + SecurityGroupName string + Permissions SPermissions Tags Tags + + // CreationTime time.Time + // InnerAccessPolicy string } func (self *SSecurityGroup) GetId() string { @@ -179,4 +180,51 @@ func (self *SRegion) modifySecurityGroup(secGrpId string, name string, desc stri func (self *SRegion) syncSecgroupRules(secgroupId string, rules []secrules.SecurityRule) error { return nil +} + +func (self *SRegion) getSecurityGroupsPermissions(ingress []*ec2.IpPermission, egress []*ec2.IpPermission) SPermissions { + return SPermissions{} +} + +func (self *SRegion) GetSecurityGroups(vpcId string, offset int, limit int) ([]SSecurityGroup, int, error) { + params := &ec2.DescribeSecurityGroupsInput{} + filters := make([]*ec2.Filter, 0) + if len(vpcId) > 0 { + filters = AppendSingleValueFilter(filters, "vpc-id", vpcId) + } + + if len(filters) > 0 { + params.SetFilters(filters) + } + + ret, err := self.ec2Client.DescribeSecurityGroups(params) + if err != nil { + return nil, 0 , err + } + + securityGroups := []SSecurityGroup{} + for _,item := range ret.SecurityGroups { + vpc, err := self.getVpc(*item.VpcId) + if err != nil { + log.Errorf("vpc %s not found", *item.VpcId) + } + + permissions := self.getSecurityGroupsPermissions(item.IpPermissions, item.IpPermissionsEgress) + + + group := SSecurityGroup{ + vpc: vpc, + Description: *item.Description, + SecurityGroupId: *item.GroupId, + SecurityGroupName: *item.GroupName, + VpcId: *item.VpcId, + Permissions: permissions, + RegionId: self.RegionId, + // Tags: *item.Tags, + } + + securityGroups = append(securityGroups, group) + } + + return securityGroups, len(securityGroups), nil } \ No newline at end of file diff --git a/pkg/util/aws/utils.go b/pkg/util/aws/utils.go index 559db9e2c3..e415ea47ce 100644 --- a/pkg/util/aws/utils.go +++ b/pkg/util/aws/utils.go @@ -1,6 +1,9 @@ package aws -import "github.com/aws/aws-sdk-go/service/ec2" +import ( + "github.com/aws/aws-sdk-go/service/ec2" + "yunion.io/x/pkg/util/secrules" +) func AppendFilter(filters []*ec2.Filter, name string, values []string) ([]*ec2.Filter) { f := &ec2.Filter{} @@ -39,4 +42,17 @@ func ConvertedPointList(list []*string) ([]string) { } return result +} + +// Security Rule Transform +func AwsIpPermissionToYunion(permission ec2.IpPermission) secrules.SecurityRule { + return secrules.SecurityRule{} +} + +func YunionIpPermissionToAws(rule secrules.SecurityRule) ec2.IpPermission { + return ec2.IpPermission{} +} + +func DiffIpPermission(permission ec2.IpPermission, rule secrules.SecurityRule) { + } \ No newline at end of file