Skip to content

Commit

Permalink
Add interface for csi client (aws#3899)
Browse files Browse the repository at this point in the history
* Add interface for csi client

* Add comments

* Add comments
  • Loading branch information
xxx0624 committed Sep 20, 2023
1 parent 7ab9dd5 commit 980bb68
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 4 deletions.
25 changes: 23 additions & 2 deletions ecs-agent/csiclient/csi_client.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.

package csiclient

import (
Expand All @@ -18,13 +31,21 @@ const (
PROTOCOL = "unix"
)

// CSIClient is an interface that specifies all supported operations in the Container Storage Interface(CSI)
// driver for Agent uses. The CSI driver provides many volume related operations to manage the lifecycle of
// Amazon EBS volumes, including mounting, umounting, resizing and volume stats.
type CSIClient interface {
GetVolumeMetrics(volumeId string, hostMountPath string) (*Metrics, error)
}

// csiClient encapsulates all CSI methods.
type csiClient struct {
csiSocket string
}

func NewCSIClient(socketIn string) csiClient {
return csiClient{csiSocket: socketIn}
// NewCSIClient creates a CSI client for the communication with CSI driver daemon.
func NewCSIClient(socketIn string) CSIClient {
return &csiClient{csiSocket: socketIn}
}

// GetVolumeMetrics returns volume usage.
Expand Down
31 changes: 31 additions & 0 deletions ecs-agent/csiclient/dummy_csiclient.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.

package csiclient

const gibToBytes = 1024 * 1024 * 1024

// dummyCSIClient can be used to test the behaviour of csi client.
type dummyCSIClient struct {
}

func (c *dummyCSIClient) GetVolumeMetrics(volumeId string, hostMountPath string) (*Metrics, error) {
return &Metrics{
Used: 15 * gibToBytes,
Capacity: 20 * gibToBytes,
}, nil
}

func NewDummyCSIClient() CSIClient {
return &dummyCSIClient{}
}
17 changes: 15 additions & 2 deletions ecs-agent/csiclient/volume.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"). You may
// not use this file except in compliance with the License. A copy of the
// License is located at
//
// http://aws.amazon.com/apache2.0/
//
// or in the "license" file accompanying this file. This file is distributed
// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied. See the License for the specific language governing
// permissions and limitations under the License.

package csiclient

// Metrics represents the used and capacity bytes of the Volume.
type Metrics struct {
// Used represents the total bytes used by the Volume.
Used int64
Used int64 `json:"Used"`

// Capacity represents the total capacity (bytes) of the volume's underlying storage.
Capacity int64
Capacity int64 `json:"Capacity"`
}

0 comments on commit 980bb68

Please sign in to comment.