Skip to content

Commit 42f722d

Browse files
committed
Add Cloudkitty Rating Service to Genestack
1 parent fab1478 commit 42f722d

14 files changed

+510
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Helm GitHub Actions for Cloudkitty
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- base-helm-configs/cloudkitty/**
7+
- base-kustomize/cloudkitty/**
8+
- .github/workflows/helm-cloudkitty.yaml
9+
jobs:
10+
helm:
11+
strategy:
12+
matrix:
13+
overlays:
14+
- base
15+
- aio
16+
name: Helm
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
- uses: azure/setup-helm@v3
22+
with:
23+
version: latest
24+
token: "${{ secrets.GITHUB_TOKEN }}"
25+
id: helm
26+
- name: Kubectl Install
27+
working-directory: /usr/local/bin/
28+
run: |
29+
if [ ! -f /usr/local/bin/kubectl ]; then
30+
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
31+
chmod +x ./kubectl
32+
fi
33+
- name: Pull OSH repositories
34+
run: |
35+
helm repo add openstack-helm https://tarballs.opendev.org/openstack/openstack-helm
36+
helm repo update
37+
- name: Run Helm Template
38+
run: |
39+
${{ steps.helm.outputs.helm-path }} template cloudkitty openstack-helm/cloudkitty \
40+
--namespace=openstack \
41+
--wait \
42+
--timeout 120m \
43+
-f ${{ github.workspace }}/base-helm-configs/cloudkitty/cloudkitty-helm-overrides.yaml \
44+
--post-renderer ${{ github.workspace }}/base-kustomize/kustomize.sh \
45+
--post-renderer-args cloudkitty/${{ matrix.overlays }} > /tmp/rendered.yaml
46+
- name: Return helm Build
47+
uses: actions/upload-artifact@v4
48+
with:
49+
name: helm-cloudkitty-artifact-${{ matrix.overlays }}
50+
path: /tmp/rendered.yaml
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# Licensed under the Apache License, Version 2.0 (the "License");
2+
# you may not use this file except in compliance with the License.
3+
# You may obtain a copy of the License at
4+
#
5+
# http://www.apache.org/licenses/LICENSE-2.0
6+
#
7+
# Unless required by applicable law or agreed to in writing, software
8+
# distributed under the License is distributed on an "AS IS" BASIS,
9+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
# See the License for the specific language governing permissions and
11+
# limitations under the License.
12+
13+
---
14+
images:
15+
tags:
16+
db_init: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
17+
db_drop: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
18+
ks_endpoints: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
19+
ks_service: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
20+
ks_user: ghcr.io/rackerlabs/genestack-images/heat:2024.1-latest
21+
cloudkitty_api: quay.io/airshipit/cloudkitty:2025.1-ubuntu_noble
22+
cloudkitty_db_sync: quay.io/airshipit/cloudkitty:2025.1-ubuntu_noble
23+
cloudkitty_processor: quay.io/airshipit/cloudkitty:2025.1-ubuntu_noble
24+
cloudkitty_storage_init: quay.io/airshipit/cloudkitty:2025.1-ubuntu_noble
25+
rabbit_init: docker.io/rabbitmq:3.13-management
26+
dep_check: ghcr.io/rackerlabs/genestack-images/kubernetes-entrypoint:latest
27+
pull_policy: "IfNotPresent"
28+
29+
endpoints:
30+
oslo_db:
31+
hosts:
32+
default: mariadb-cluster-primary
33+
host_fqdn_override:
34+
default: mariadb-cluster-primary.openstack.svc.cluster.local
35+
oslo_messaging:
36+
hosts:
37+
default: rabbitmq-nodes
38+
host_fqdn_override:
39+
default: rabbitmq.openstack.svc.cluster.local
40+
oslo_cache:
41+
hosts:
42+
default: memcached
43+
host_fqdn_override:
44+
default: memcached.openstack.svc.cluster.local
45+
46+
dependencies:
47+
static:
48+
db_sync:
49+
jobs: null
50+
51+
# NOTE: (brew) requests cpu/mem values based on a three node
52+
# hyperconverged lab (/scripts/hyperconverged-lab.sh).
53+
# limit values based on defaults from the openstack-helm charts unless defined
54+
pod:
55+
lifecycle:
56+
upgrades:
57+
deployments:
58+
revision_history: 3
59+
pod_replacement_strategy: RollingUpdate
60+
rolling_update:
61+
max_unavailable: 20%
62+
max_surge: 3
63+
resources:
64+
enabled: true
65+
cloudkitty_api:
66+
requests:
67+
memory: "128Mi"
68+
cpu: "100m"
69+
limits:
70+
memory: "1024Mi"
71+
cpu: "2000m"
72+
cloudkitty_processor:
73+
requests:
74+
memory: "128Mi"
75+
cpu: "100m"
76+
limits:
77+
memory: "1024Mi"
78+
cpu: "2000m"
79+
conf:
80+
cloudkitty:
81+
DEFAULT:
82+
log_config_append: /etc/cloudkitty/logging.conf
83+
api_paste_config: /etc/cloudkitty/api-paste.ini
84+
auth_strategy: keystone
85+
debug: false
86+
keystone_authtoken:
87+
auth_type: password
88+
username: cloudkitty
89+
service_token_roles_required: true
90+
service_token_roles: admin,rating,service
91+
service_type: rating
92+
database:
93+
max_retries: -1
94+
collect:
95+
collector: gnocchi
96+
collector_gnocchi:
97+
auth_section: keystone_authtoken
98+
fetcher:
99+
backend: gnocchi
100+
fetcher_gnocchi:
101+
auth_section: keystone_authtoken
102+
output:
103+
pipeline: osrf
104+
basepath: /var/cloudkitty/reports
105+
backend: cloudkitty.backend.file.FileBackend
106+
storage:
107+
backend: sqlalchemy
108+
version: 1
109+
logging:
110+
logger_root:
111+
level: WARNING
112+
handlers:
113+
- stdout
114+
logger_cloudkitty:
115+
level: WARNING
116+
handlers:
117+
- stdout
118+
qualname: cloudkitty
119+
120+
manifests:
121+
configmap_bin: true
122+
configmap_etc: true
123+
deployment_api: true
124+
deployment_processor: true
125+
ingress_api: false
126+
job_bootstrap: false
127+
job_ks_user: true
128+
job_db_sync: true
129+
job_db_init: false
130+
job_db_drop: false
131+
job_ks_endpoints: true
132+
job_ks_service: true
133+
job_rabbit_init: false
134+
job_storage_init: true
135+
pdb_api: true
136+
network_policy: false
137+
secret_db: true
138+
secret_rabbitmq: true
139+
secret_keystone: true
140+
secret_registry: true
141+
service_api: true
142+
secret_ks_etc: true
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
sortOptions:
3+
order: fifo
4+
resources:
5+
- ../base
6+
7+
patches:
8+
- target:
9+
kind: HorizontalPodAutoscaler
10+
name: cloudkitty-api
11+
patch: |-
12+
- op: replace
13+
path: /spec/minReplicas
14+
value: 1
15+
- op: replace
16+
path: /spec/maxReplicas
17+
value: 1
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
apiVersion: k8s.mariadb.com/v1alpha1
3+
kind: Database
4+
metadata:
5+
name: cloudkitty
6+
namespace: openstack
7+
labels:
8+
app.kubernetes.io/managed-by: "Helm"
9+
annotations:
10+
helm.sh/resource-policy: keep
11+
meta.helm.sh/release-name: "cloudkitty"
12+
meta.helm.sh/release-namespace: "openstack"
13+
spec:
14+
# If you want the database to be created with a different name than the resource name
15+
# name: data-custom
16+
mariaDbRef:
17+
name: mariadb-cluster
18+
characterSet: utf8
19+
collate: utf8_general_ci
20+
retryInterval: 5s
21+
---
22+
apiVersion: k8s.mariadb.com/v1alpha1
23+
kind: User
24+
metadata:
25+
name: cloudkitty
26+
namespace: openstack
27+
labels:
28+
app.kubernetes.io/managed-by: "Helm"
29+
annotations:
30+
helm.sh/resource-policy: keep
31+
meta.helm.sh/release-name: "cloudkitty"
32+
meta.helm.sh/release-namespace: "openstack"
33+
spec:
34+
# If you want the user to be created with a different name than the resource name
35+
# name: user-custom
36+
mariaDbRef:
37+
name: mariadb-cluster
38+
passwordSecretKeyRef:
39+
name: cloudkitty-db-password
40+
key: password
41+
# This field is immutable and defaults to 10, 0 means unlimited.
42+
maxUserConnections: 0
43+
host: "%"
44+
retryInterval: 5s
45+
---
46+
apiVersion: k8s.mariadb.com/v1alpha1
47+
kind: Grant
48+
metadata:
49+
name: cloudkitty-grant
50+
namespace: openstack
51+
labels:
52+
app.kubernetes.io/managed-by: "Helm"
53+
annotations:
54+
helm.sh/resource-policy: keep
55+
meta.helm.sh/release-name: "cloudkitty"
56+
meta.helm.sh/release-namespace: "openstack"
57+
spec:
58+
mariaDbRef:
59+
name: mariadb-cluster
60+
privileges:
61+
- "ALL"
62+
database: "cloudkitty"
63+
table: "*"
64+
username: cloudkitty
65+
grantOption: true
66+
host: "%"
67+
retryInterval: 5s
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
apiVersion: rabbitmq.com/v1beta1
3+
kind: User
4+
metadata:
5+
name: cloudkitty
6+
namespace: openstack
7+
annotations:
8+
helm.sh/resource-policy: keep
9+
app.kubernetes.io/managed-by: "Helm"
10+
meta.helm.sh/release-name: "cloudkitty"
11+
meta.helm.sh/release-namespace: "openstack"
12+
spec:
13+
tags:
14+
- management # available tags are 'management', 'policymaker', 'monitoring' and 'administrator'
15+
- policymaker
16+
rabbitmqClusterReference:
17+
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
18+
namespace: openstack
19+
importCredentialsSecret:
20+
name: cloudkitty-rabbitmq-password
21+
---
22+
apiVersion: rabbitmq.com/v1beta1
23+
kind: Vhost
24+
metadata:
25+
name: cloudkitty-vhost
26+
namespace: openstack
27+
annotations:
28+
helm.sh/resource-policy: keep
29+
meta.helm.sh/release-name: "cloudkitty"
30+
meta.helm.sh/release-namespace: "openstack"
31+
spec:
32+
name: "cloudkitty" # vhost name; required and cannot be updated
33+
defaultQueueType: quorum # default queue type for this vhost; require RabbitMQ version 3.11.12 or above
34+
rabbitmqClusterReference:
35+
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
36+
namespace: openstack
37+
---
38+
apiVersion: rabbitmq.com/v1beta1
39+
kind: Queue
40+
metadata:
41+
name: cloudkitty-queue
42+
namespace: openstack
43+
annotations:
44+
helm.sh/resource-policy: keep
45+
meta.helm.sh/release-name: "cloudkitty"
46+
meta.helm.sh/release-namespace: "openstack"
47+
spec:
48+
name: cloudkitty-qq # name of the queue
49+
vhost: "cloudkitty" # default to '/' if not provided
50+
type: quorum # without providing a queue type, rabbitmq creates a classic queue
51+
autoDelete: false
52+
durable: true # seting 'durable' to false means this queue won't survive a server restart
53+
rabbitmqClusterReference:
54+
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
55+
namespace: openstack
56+
---
57+
apiVersion: rabbitmq.com/v1beta1
58+
kind: Permission
59+
metadata:
60+
name: cloudkitty-permission
61+
namespace: openstack
62+
annotations:
63+
helm.sh/resource-policy: keep
64+
meta.helm.sh/release-name: "cloudkitty"
65+
meta.helm.sh/release-namespace: "openstack"
66+
spec:
67+
vhost: "cloudkitty" # name of a vhost
68+
userReference:
69+
name: "cloudkitty" # name of a user.rabbitmq.com in the same namespace; must specify either spec.userReference or spec.user
70+
permissions:
71+
write: ".*"
72+
configure: ".*"
73+
read: ".*"
74+
rabbitmqClusterReference:
75+
name: rabbitmq # rabbitmqCluster must exist in the same namespace as this resource
76+
namespace: openstack
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
apiVersion: autoscaling/v2
3+
kind: HorizontalPodAutoscaler
4+
metadata:
5+
name: cloudkitty-api
6+
namespace: openstack
7+
spec:
8+
maxReplicas: 9
9+
minReplicas: 2
10+
metrics:
11+
- resource:
12+
name: cpu
13+
target:
14+
averageUtilization: 80
15+
type: Utilization
16+
type: Resource
17+
- resource:
18+
name: memory
19+
target:
20+
type: Utilization
21+
averageUtilization: 80
22+
type: Resource
23+
scaleTargetRef:
24+
apiVersion: apps/v1
25+
kind: Deployment
26+
name: cloudkitty-api
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
sortOptions:
3+
order: fifo
4+
resources:
5+
- cloudkitty-mariadb-database.yaml
6+
- cloudkitty-rabbitmq-queue.yaml
7+
- all.yaml
8+
- hpa-cloudkitty-api.yaml

0 commit comments

Comments
 (0)