Skip to content

Commit dab9ad6

Browse files
committed
provider: add openstack cloud support
This commit allows cloud-api-adaptor(CAA) to support OpenStack-based clouds. There is currently no provider in CAA that supports clouds built with standard OpenStack. By implementing an OpenStack provider, we can offer secure pod execution environments in a wider range of fields. Adding an inbox Provider for OpenStack, referring to the following documentation. --- https://github.com/confidential-containers/cloud-api-adaptor/blob/main/src/cloud-api-adaptor/docs/addnewprovider.md - Add and initialize the OpenStack provider manager - Add a definition for the configuration struct - Add cloud interfaces - Add provider interfaces - Add additional files to modularize the code - Add relevant unit tests - Update entrypoint.sh and Makefile Signed-off-by: cw-kojima1003 <fj3131ci@aa.jp.fujitsu.com>
1 parent c70ce47 commit dab9ad6

21 files changed

Lines changed: 3450 additions & 4 deletions

File tree

src/cloud-api-adaptor/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ RUN_TESTS ?= ''
2525
RESOURCE_CTRL ?= true
2626
# BUILTIN_CLOUD_PROVIDERS is used for binary build -- what providers are built in the binaries.
2727
ifeq ($(RELEASE_BUILD),true)
28-
BUILTIN_CLOUD_PROVIDERS ?= alibabacloud aws azure gcp ibmcloud ibmcloud_powervs
28+
BUILTIN_CLOUD_PROVIDERS ?= alibabacloud aws azure gcp ibmcloud ibmcloud_powervs openstack
2929
else
30-
BUILTIN_CLOUD_PROVIDERS ?= alibabacloud aws azure byom gcp ibmcloud ibmcloud_powervs libvirt docker
30+
BUILTIN_CLOUD_PROVIDERS ?= alibabacloud aws azure byom gcp ibmcloud ibmcloud_powervs libvirt docker openstack
3131
endif
3232

3333
all: build
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//go:build openstack
2+
3+
// (C) Copyright Confidential Containers Contributors
4+
// SPDX-License-Identifier: Apache-2.0
5+
6+
package main
7+
8+
import (
9+
_ "github.com/confidential-containers/cloud-api-adaptor/src/cloud-providers/openstack"
10+
)

src/cloud-api-adaptor/entrypoint.sh

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,21 @@ byom() {
122122

123123
}
124124

125+
openstack() {
126+
test_vars OPENSTACK_IMAGE_ID OPENSTACK_FLAVOR_ID OPENSTACK_SECURITY_GROUP
127+
test_vars OPENSTACK_USERNAME OPENSTACK_PASSWORD OPENSTACK_REGION OPENSTACK_TENANT_NAME OPENSTACK_DOMAIN_NAME OPENSTACK_IDENTITY_ENDPOINT
128+
129+
set -x
130+
exec cloud-api-adaptor openstack ${optionals}
131+
132+
}
133+
125134
help_msg() {
126135
cat <<EOF
127136
Usage:
128-
CLOUD_PROVIDER=alibabacloud|aws|azure|byom|gcp|ibmcloud|ibmcloud-powervs|libvirt|docker $0
137+
CLOUD_PROVIDER=alibabacloud|aws|azure|byom|gcp|ibmcloud|ibmcloud-powervs|libvirt|docker|openstack $0
129138
or
130-
$0 alibabacloud|aws|azure|byom|gcp|ibmcloud|ibmcloud-powervs|libvirt|docker
139+
$0 alibabacloud|aws|azure|byom|gcp|ibmcloud|ibmcloud-powervs|libvirt|docker|openstack
131140
132141
in addition all cloud provider specific env variables must be set and valid
133142
(CLOUD_PROVIDER is currently set to "$CLOUD_PROVIDER")
@@ -152,6 +161,8 @@ elif [[ "$CLOUD_PROVIDER" == "libvirt" ]]; then
152161
libvirt
153162
elif [[ "$CLOUD_PROVIDER" == "docker" ]]; then
154163
docker
164+
elif [[ "$CLOUD_PROVIDER" == "openstack" ]]; then
165+
openstack
155166
else
156167
help_msg
157168
fi

src/cloud-api-adaptor/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ require (
170170
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
171171
github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
172172
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
173+
github.com/gophercloud/gophercloud/v2 v2.8.0 // indirect
173174
github.com/gorilla/websocket v1.5.0 // indirect
174175
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
175176
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect

src/cloud-api-adaptor/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAV
397397
github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
398398
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
399399
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
400+
github.com/gophercloud/gophercloud/v2 v2.8.0 h1:of2+8tT6+FbEYHfYC8GBu8TXJNsXYSNm9KuvpX7Neqo=
401+
github.com/gophercloud/gophercloud/v2 v2.8.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk=
400402
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
401403
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
402404
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
apiVersion: kustomize.config.k8s.io/v1beta1
2+
kind: Kustomization
3+
4+
resources:
5+
- ../../yamls
6+
7+
images:
8+
- name: cloud-api-adaptor
9+
newName: quay.io/confidential-containers/cloud-api-adaptor # change image if needed
10+
newTag: latest
11+
12+
generatorOptions:
13+
disableNameSuffixHash: true
14+
15+
configMapGenerator:
16+
- name: peer-pods-cm
17+
namespace: confidential-containers-system
18+
literals:
19+
- CLOUD_PROVIDER="openstack"
20+
- ENABLE_CLOUD_PROVIDER_EXTERNAL_PLUGIN="false" # flag to enable/disable dynamically load cloud provider external plugin feature
21+
- CLOUD_CONFIG_VERIFY="false" # It's better set as true to enable could config verify in production env
22+
- OPENSTACK_SERVER_PREFIX="" # set
23+
- OPENSTACK_IMAGE_ID="" # set
24+
- OPENSTACK_FLAVOR_ID="" # set
25+
- OPENSTACK_SECURITY_GROUP="" # set
26+
- OPENSTACK_NETWORK_ID="" # set
27+
- OPENSTACK_FLOATING_IP_NETWORK_ID="" # set if specific floating IP needed
28+
29+
# The following options are not implemented for OpenStack at this time.
30+
#- DISABLECVM=""
31+
#- PAUSE_IMAGE=""
32+
#- TUNNEL_TYPE=""
33+
#- VXLAN_PORT=""
34+
#- TAGS=""
35+
#- USE_PUBLIC_IP="true"
36+
#- EXTERNAL_NETWORK_VIA_PODVM="true"
37+
#- POD_SUBNET_CIDRS="10.244.0.0/16,10.96.0.0/12"
38+
#- ROOT_VOLUME_SIZE="30"
39+
#- FORWARDER_PORT=""
40+
#- PEERPODS_LIMIT_PER_NODE="10"
41+
#- REMOTE_HYPERVISOR_ENDPOINT="/run/peerpod/hypervisor.sock"
42+
#- PEER_PODS_DIR="/run/peerpod/pods"
43+
#- ENABLE_SCRATCH_SPACE="false"
44+
##TLS_SETTINGS
45+
#- CACERT_FILE="/etc/certificates/ca.crt" # for TLS
46+
#- CERT_FILE="/etc/certificates/client.crt" # for TLS
47+
#- CERT_KEY="/etc/certificates/client.key" # for TLS
48+
#- TLS_SKIP_VERIFY="" # for testing only
49+
##TLS_SETTINGS
50+
51+
secretGenerator:
52+
- name: peer-pods-secret
53+
namespace: confidential-containers-system
54+
# This file should look like this (w/o quotes!):
55+
# OPENSTACK_IDENTITY_ENDPOINT=...
56+
# OPENSTACK_USERNAME=...
57+
# OPENSTACK_PASSWORD=...
58+
# OPENSTACK_TENANT_NAME=...
59+
envs:
60+
- openstack-cred.env
61+
##TLS_SETTINGS
62+
#- name: certs-for-tls
63+
# namespace: confidential-containers-system
64+
# files:
65+
# - <path_to_ca.crt> # set - relative path to ca.crt, located either in the same folder as the kustomization.yaml file or within a subfolder
66+
# - <path_to_client.crt> # set - relative path to client.crt, located either in the same folder as the kustomization.yaml file or within a subfolder
67+
# - <path_to_client.key> # set - relative path to client.key, located either in the same folder as the kustomization.yaml file or within a subfolder
68+
##TLS_SETTINGS
69+
70+
patchesStrategicMerge:
71+
##TLS_SETTINGS
72+
#- tls_certs_volume_mount.yaml # set (for tls)
73+
##TLS_SETTINGS
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
OPENSTACK_IDENTITY_ENDPOINT=<IDENTITY_ENDPOINT>
2+
OPENSTACK_USERNAME=<USERNAME>
3+
OPENSTACK_PASSWORD=<PASSWORD>
4+
OPENSTACK_TENANT_NAME=<TENANT_NAME>
5+
OPENSTACK_DOMAIN_NAME=<DOMAIN_NAME>
6+
OPENSTACK_REGION=<REGION>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: apps/v1
2+
kind: DaemonSet
3+
metadata:
4+
name: cloud-api-adaptor-daemonset
5+
namespace: confidential-containers-system
6+
labels:
7+
app: cloud-api-adaptor
8+
spec:
9+
template:
10+
spec:
11+
containers:
12+
- name: cloud-api-adaptor-con
13+
volumeMounts:
14+
- mountPath: /etc/certificates
15+
name: certs
16+
volumes:
17+
- name: certs
18+
secret:
19+
secretName: certs-for-tls
20+
21+
# to apply this uncomment the patchesStrategicMerge of this file in kustomization.yaml

src/cloud-providers/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ require (
2525
github.com/aws/aws-sdk-go-v2/service/ec2 v1.279.2
2626
github.com/docker/docker v28.3.3+incompatible
2727
github.com/docker/go-connections v0.5.0
28+
github.com/gophercloud/gophercloud/v2 v2.8.0
2829
github.com/kdomanski/iso9660 v0.4.0
2930
github.com/stretchr/testify v1.11.1
3031
golang.org/x/crypto v0.45.0

src/cloud-providers/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAV
264264
github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
265265
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
266266
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
267+
github.com/gophercloud/gophercloud/v2 v2.8.0 h1:of2+8tT6+FbEYHfYC8GBu8TXJNsXYSNm9KuvpX7Neqo=
268+
github.com/gophercloud/gophercloud/v2 v2.8.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk=
267269
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
268270
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
269271
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms=

0 commit comments

Comments
 (0)