From 7aa31407a7add12c62a1a05cc7d68c2420d30dce Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Sun, 2 Dec 2018 02:11:50 +0800 Subject: [PATCH] temp commit --- pkg/compute/guestdrivers/azure.go | 1 - pkg/compute/guestdrivers/qcloud.go | 5 ++-- pkg/compute/models/billingresource.go | 4 +-- pkg/compute/models/guest_actions.go | 6 +++++ pkg/util/aws/reservedinstance.go | 37 ++++++++++++++++++++++++++ pkg/util/aws/shell/instance.go | 4 ++- pkg/util/aws/shell/reservedinstance.go | 27 +++++++++++++++++++ 7 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 pkg/util/aws/reservedinstance.go create mode 100644 pkg/util/aws/shell/reservedinstance.go diff --git a/pkg/compute/guestdrivers/azure.go b/pkg/compute/guestdrivers/azure.go index c1f4b5dc9e..ea5c27c059 100644 --- a/pkg/compute/guestdrivers/azure.go +++ b/pkg/compute/guestdrivers/azure.go @@ -16,7 +16,6 @@ import ( "yunion.io/x/pkg/utils" "yunion.io/x/jsonutils" - "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" diff --git a/pkg/compute/guestdrivers/qcloud.go b/pkg/compute/guestdrivers/qcloud.go index 49fe9fe0cb..b03431c709 100644 --- a/pkg/compute/guestdrivers/qcloud.go +++ b/pkg/compute/guestdrivers/qcloud.go @@ -12,7 +12,6 @@ import ( "yunion.io/x/pkg/util/compare" "yunion.io/x/pkg/utils" - "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -344,12 +343,12 @@ func (self *SQcloudGuestDriver) RequestSyncConfigOnHost(ctx context.Context, gue return nil, err } for _, disk := range removed { - if err := iVM.DetachDisk(disk.GetId()); err != nil { + if err := iVM.DetachDisk(ctx, disk.GetId()); err != nil { return nil, err } } for _, disk := range added { - if err := iVM.AttachDisk(disk.ExternalId); err != nil { + if err := iVM.AttachDisk(ctx, disk.ExternalId); err != nil { return nil, err } } diff --git a/pkg/compute/models/billingresource.go b/pkg/compute/models/billingresource.go index 8633f4b3a1..2cef2a686a 100644 --- a/pkg/compute/models/billingresource.go +++ b/pkg/compute/models/billingresource.go @@ -8,8 +8,8 @@ const ( ) type SBillingResourceBase struct { - BillingType string `width:"36" charset:"ascii" nullable:"true" default:"postpaid" list:"user" create:"optional"` - ExpiredAt time.Time `nullable:"true" list:"user" create:"optional"` + BillingType string `width:"36" charset:"ascii" nullable:"true" default:"postpaid" list:"user" create:"admin_optional"` + ExpiredAt time.Time `nullable:"true" list:"user" create:"admin_optional"` } func (self *SBillingResourceBase) GetChargeType() string { diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 74885e8940..d70efdd488 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -1109,6 +1109,9 @@ func (self *SGuest) PerformChangeConfig(ctx context.Context, userCred mcclient.T return nil, httperrors.NewBadRequestError("Params vcpu_count parse error") } addCpu = int(nVcpu - int64(self.VcpuCount)) + if addCpu < 0 { + addCpu = 0 + } } vmemSize, err := data.GetString("vmem_size") if err == nil { @@ -1124,6 +1127,9 @@ func (self *SGuest) PerformChangeConfig(ctx context.Context, userCred mcclient.T return nil, httperrors.NewBadRequestError("Params vmem_size parse error") } addMem = nVmem - self.VmemSize + if addMem < 0 { + addMem = 0 + } } } diff --git a/pkg/util/aws/reservedinstance.go b/pkg/util/aws/reservedinstance.go new file mode 100644 index 0000000000..b9d3f54fce --- /dev/null +++ b/pkg/util/aws/reservedinstance.go @@ -0,0 +1,37 @@ +package aws + +import ( + "github.com/aws/aws-sdk-go/service/ec2" + + "yunion.io/x/log" +) + +func (self *SRegion) GetReservedInstance() error { + params := &ec2.DescribeReservedInstancesInput{} + res, err := self.ec2Client.DescribeReservedInstances(params) + if err != nil { + log.Errorf("DescribeReservedInstances fail %s", err) + return err + } + log.Debugf("%#v", res) + return nil +} + +type SReservedHostOffering struct { + Duration int + HourlyPrice float64 + InstanceFamily string + OfferingId string + PaymentOption string + UpfrontPrice float64 +} + +func (self *SRegion) GetReservedHostOfferings() error { + res, err := self.ec2Client.DescribeHostReservationOfferings(nil) + if err != nil { + log.Errorf("DescribeHostReservationOfferings fail %s", err) + return err + } + log.Debugf("%#v", res) + return nil +} diff --git a/pkg/util/aws/shell/instance.go b/pkg/util/aws/shell/instance.go index 64951e8935..aadf6304d9 100644 --- a/pkg/util/aws/shell/instance.go +++ b/pkg/util/aws/shell/instance.go @@ -4,6 +4,7 @@ import ( "fmt" "io/ioutil" + "context" "yunion.io/x/onecloud/pkg/util/aws" "yunion.io/x/onecloud/pkg/util/shellutils" ) @@ -134,7 +135,8 @@ func init() { } shellutils.R(&InstanceRebuildRootOptions{}, "instance-rebuild-root", "Reinstall virtual server system image", func(cli *aws.SRegion, args *InstanceRebuildRootOptions) error { - diskID, err := cli.ReplaceSystemDisk(args.ID, args.Image, args.Size) + ctx := context.Background() + diskID, err := cli.ReplaceSystemDisk(ctx, args.ID, args.Image, args.Size) if err != nil { return err } diff --git a/pkg/util/aws/shell/reservedinstance.go b/pkg/util/aws/shell/reservedinstance.go new file mode 100644 index 0000000000..a31d1e08f9 --- /dev/null +++ b/pkg/util/aws/shell/reservedinstance.go @@ -0,0 +1,27 @@ +package shell + +import ( + "yunion.io/x/onecloud/pkg/util/aws" + "yunion.io/x/onecloud/pkg/util/shellutils" +) + +func init() { + type ReservedInstanceListOptions struct { + Id []string `help:"IDs of instances to show"` + Zone string `help:"Zone ID"` + Limit int `help:"page size"` + Offset int `help:"page offset"` + } + shellutils.R(&ReservedInstanceListOptions{}, "reserved-instance-list", "List intances", func(cli *aws.SRegion, args *ReservedInstanceListOptions) error { + e := cli.GetReservedInstance() + if e != nil { + return e + } + + e = cli.GetReservedHostOfferings() + if e != nil { + return e + } + return nil + }) +}