Move shaker chart from osh-addons

This change moves the shaker chart from the osh-addons repo
to this one.

Change-Id: Ica2c7668a7ab047f8ed2361234b5810eedc9c1e2
This commit is contained in:
Gage Hugo 2021-04-07 14:57:21 -05:00
parent c6786de152
commit 25c897fb89
14 changed files with 689 additions and 0 deletions

View File

@ -53,6 +53,7 @@ sections:
- [rabbitmq, rabbitmq Chart]
- [redis, redis Chart]
- [registry, registry Chart]
- [shaker, shaker Chart]
- [tiller, tiller Chart]
- [features, New Features]
- [issues, Known Issues]

View File

@ -0,0 +1,5 @@
---
shaker:
- 0.1.0 Initial Chart
- 0.1.1 Change helm-toolkit dependency version to ">= 0.1.0"
...

26
shaker/Chart.yaml Normal file
View File

@ -0,0 +1,26 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License 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.
---
apiVersion: v1
appVersion: v1.0.0
description: OpenStack-Helm Shaker
name: shaker
version: 0.1.1
home: https://pyshaker.readthedocs.io/en/latest/index.html
icon: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTlnnEExfz6H9bBFFDxsDm5mVTdKWOt6Hw2_3aJ7hVkNdDdTCrimQ
sources:
- https://opendev.org/openstack/shaker
- https://opendev.org/openstack/openstack-helm
maintainers:
- name: OpenStack-Helm Authors
...

18
shaker/requirements.yaml Normal file
View File

@ -0,0 +1,18 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License 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.
---
dependencies:
- name: helm-toolkit
repository: http://localhost:8879/charts
version: ">= 0.1.0"
...

View File

@ -0,0 +1,19 @@
#!/bin/bash
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
set -ex
{{ .Values.conf.script }}

View File

@ -0,0 +1,32 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
{{- if .Values.manifests.configmap_bin }}
{{- $envAll := . }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: shaker-bin
data:
{{- if .Values.images.local_registry.active }}
image-repo-sync.sh: |
{{- include "helm-toolkit.scripts.image_repo_sync" . | indent 4 }}
{{- end }}
ks-user.sh: |
{{- include "helm-toolkit.scripts.keystone_user" . | indent 4 }}
run-tests.sh: |
{{ tuple "bin/_run-tests.sh.tpl" . | include "helm-toolkit.utils.template" | indent 4 }}
{{- end }}
...

View File

@ -0,0 +1,57 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
{{- if .Values.manifests.configmap_etc }}
{{- $envAll := . }}
{{- if empty .Values.conf.shaker.auth.admin_username -}}
{{- $_ := set .Values.conf.shaker.auth "admin_username" .Values.endpoints.identity.auth.admin.username -}}
{{- end -}}
{{- if empty .Values.conf.shaker.auth.admin_password -}}
{{- $_ := set .Values.conf.shaker.auth "admin_password" .Values.endpoints.identity.auth.admin.password -}}
{{- end -}}
{{- if empty .Values.conf.shaker.auth.admin_project_name -}}
{{- $_ := set .Values.conf.shaker.auth "admin_project_name" .Values.endpoints.identity.auth.admin.project_name -}}
{{- end -}}
{{- if empty .Values.conf.shaker.auth.admin_domain_name -}}
{{- $_ := set .Values.conf.shaker.auth "admin_domain_name" .Values.endpoints.identity.auth.admin.user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.shaker.auth.admin_domain_scope -}}
{{- $_ := set .Values.conf.shaker.auth "admin_domain_scope" .Values.endpoints.identity.auth.admin.user_domain_name -}}
{{- end -}}
{{- if empty .Values.conf.shaker.identity.uri_v3 -}}
{{- $_ := tuple "identity" "internal" "api" . | include "helm-toolkit.endpoints.keystone_endpoint_uri_lookup"| set .Values.conf.shaker.identity "uri_v3" -}}
{{- end -}}
{{- if empty .Values.conf.shaker.identity.region -}}
{{- $_ := set .Values.conf.shaker.identity "region" .Values.endpoints.identity.auth.admin.region_name -}}
{{- end -}}
---
apiVersion: v1
kind: Secret
metadata:
name: shaker-etc
type: Opaque
data:
shaker.conf: {{ include "helm-toolkit.utils.to_oslo_conf" .Values.conf.shaker.shaker | b64enc }}
{{ if not (empty .Values.conf.basic) }}
test-basic: {{ include "shaker.utils.to_regex_file" .Values.conf.basic | b64enc }}
{{ end }}
{{ if not (empty .Values.conf.sriov) }}
test-sriov: {{ include "shaker.utils.to_regex_file" .Values.conf.sriov | b64enc }}
{{ end }}
{{- end }}
...

View File

@ -0,0 +1,20 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
---
{{- if and .Values.manifests.job_image_repo_sync .Values.images.local_registry.active }}
{{- $imageRepoSyncJob := dict "envAll" . "serviceName" "shaker" -}}
{{ $imageRepoSyncJob | include "helm-toolkit.manifests.job_image_repo_sync" }}
{{- end }}
...

View File

@ -0,0 +1,19 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
{{- if .Values.manifests.job_ks_user }}
{{- $ksUserJob := dict "envAll" . "serviceName" "shaker" -}}
{{ $ksUserJob | include "helm-toolkit.manifests.job_ks_user" }}
{{- end }}
...

View File

@ -0,0 +1,141 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
{{- if .Values.manifests.pod_shaker_test }}
{{- $envAll := . }}
{{- $mounts_tests := .Values.pod.mounts.shaker_tests.shaker_tests }}
{{- $mounts_tests_init := .Values.pod.mounts.shaker_tests.init_container }}
{{- $serviceAccountName := print $envAll.Release.Name "-test" }}
{{ tuple $envAll "run_tests" $serviceAccountName | include "helm-toolkit.snippets.kubernetes_pod_rbac_serviceaccount" }}
---
apiVersion: v1
kind: Pod
metadata:
name: {{ print $envAll.Release.Name "-run-tests" }}
labels:
{{ tuple $envAll "shaker" "run-tests" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
annotations:
"helm.sh/hook": test-success
spec:
nodeSelector:
{{ .Values.labels.pod.node_selector_key }}: {{ .Values.labels.pod.node_selector_value }}
serviceAccountName: {{ $serviceAccountName }}
restartPolicy: OnFailure
initContainers:
{{ tuple $envAll "run_tests" $mounts_tests_init | include "helm-toolkit.snippets.kubernetes_entrypoint_init_container" | indent 4 }}
- name: {{ .Release.Name }}-test-ks-user
{{ tuple $envAll "ks_user" | include "helm-toolkit.snippets.image" | indent 6 }}
{{ tuple $envAll $envAll.Values.pod.resources.jobs.ks_user | include "helm-toolkit.snippets.kubernetes_resources" | indent 6 }}
command:
- /tmp/ks-user.sh
volumeMounts:
- name: shaker-bin
mountPath: /tmp/ks-user.sh
subPath: ks-user.sh
readOnly: true
env:
{{- with $env := dict "ksUserSecret" .Values.secrets.identity.admin }}
{{- include "helm-toolkit.snippets.keystone_openrc_env_vars" $env | indent 8 }}
{{- end }}
- name: SERVICE_OS_SERVICE_NAME
value: "shaker"
{{- with $env := dict "ksUserSecret" .Values.secrets.identity.shaker }}
{{- include "helm-toolkit.snippets.keystone_user_create_env_vars" $env | indent 8 }}
{{- end }}
- name: SERVICE_OS_ROLE
value: {{ .Values.endpoints.identity.auth.shaker.role | quote }}
- name: {{ .Release.Name }}-perms
{{ tuple $envAll "shaker_run_tests" | include "helm-toolkit.snippets.image" | indent 6 }}
securityContext:
runAsUser: 0
privileged: true
{{ tuple $envAll $envAll.Values.pod.resources.jobs.run_tests | include "helm-toolkit.snippets.kubernetes_resources" | indent 6 }}
command: ["/bin/sh", "-c"]
args:
- set -xe;
chmod 0777 /opt/shaker/data/;
chmod 0777 /opt/shaker-data/;
volumeMounts:
- name: shaker-reports
mountPath: /opt/shaker/data/
- name: shaker-data-host
mountPath: /opt/shaker-data/
containers:
- name: {{ .Release.Name }}-run-tests
{{ tuple $envAll "shaker_run_tests" | include "helm-toolkit.snippets.image" | indent 6 }}
{{ tuple $envAll $envAll.Values.pod.resources.jobs.run_tests | include "helm-toolkit.snippets.kubernetes_resources" | indent 6 }}
securityContext:
runAsUser: {{ .Values.pod.user.shaker.uid }}
privileged: false
env:
{{- with $env := dict "ksUserSecret" .Values.secrets.identity.admin }}
{{- include "helm-toolkit.snippets.keystone_openrc_env_vars" $env | indent 8 }}
{{- end }}
{{- with $env := dict "ksUserSecret" .Values.secrets.identity.shaker }}
{{- include "helm-toolkit.snippets.keystone_user_create_env_vars" $env | indent 8 }}
{{- end }}
- name: SHAKER_ENV_NAME
value: {{.Release.Name}}
- name: SHAKER_SCENARIO
value: {{ .Values.conf.shaker.shaker.DEFAULT.scenario }}
- name: SHAKER_SERVER_ENDPOINT
value: {{ .Values.conf.shaker.shaker.DEFAULT.server_endpoint }}
command:
- /tmp/run-tests.sh
volumeMounts:
- name: shaker-etc
mountPath: /etc/shaker/shaker_tests.yaml
subPath: shaker_tests.yaml
readOnly: true
- name: shaker-bin
mountPath: /tmp/run-tests.sh
subPath: run-tests.sh
readOnly: true
- name: shaker-db
mountPath: /opt/shaker/db/
- name: shaker-reports
mountPath: /opt/shaker/data/
- name: shaker-data-host
mountPath: /opt/shaker-data/
- name: shaker-etc
mountPath: /opt/shaker/shaker.conf
subPath: shaker.conf
readOnly: true
{{ if $mounts_tests.volumeMounts }}{{ toYaml $mounts_tests.volumeMounts | indent 8 }}{{ end }}
volumes:
- name: shaker-etc
secret:
secretName: shaker-etc
defaultMode: 0444
- name: shaker-bin
configMap:
name: shaker-bin
defaultMode: 0555
- name: shaker-db
emptyDir: {}
- name: shaker-reports
{{- if not .Values.pvc.enabled }}
emptyDir: {}
{{- else }}
persistentVolumeClaim:
claimName: {{ .Values.pvc.name }}
{{- end }}
- name: shaker-data-host
hostPath:
path: /tmp/shaker-data
{{ if $mounts_tests.volumes }}{{ toYaml $mounts_tests.volumes | indent 4 }}{{ end }}
{{- end }}
...

View File

@ -0,0 +1,29 @@
# {{/*
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License 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.
# */}}
{{- if .Values.pvc.enabled }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ .Values.pvc.name }}
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.pvc.requests.storage }}
storageClassName: {{ .Values.pvc.storage_class }}
{{- end }}
...

View File

@ -0,0 +1,29 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
{{- if .Values.manifests.secret_keystone }}
{{- $envAll := . }}
{{- range $key1, $userClass := tuple "admin" "shaker" }}
{{- $secretName := index $envAll.Values.secrets.identity $userClass }}
---
apiVersion: v1
kind: Secret
metadata:
name: {{ $secretName }}
type: Opaque
data:
{{- tuple $userClass "internal" $envAll | include "helm-toolkit.snippets.keystone_secret_openrc" | indent 2 -}}
{{- end }}
{{- end }}
...

View File

@ -0,0 +1,42 @@
{{/*
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License 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.
*/}}
{{- if .Values.manifests.service_shaker }}
{{- $envAll := . }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ tuple "shaker" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
spec:
ports:
- name: shaker-api
protocol: TCP
port: {{ tuple "shaker" "internal" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
{{ if .Values.shaker.controller.node_port.enabled }}
nodePort: {{ .Values.shaker.controller.node_port.port }}
{{ end }}
targetPort: {{ tuple "shaker" "internal" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
selector:
{{ tuple $envAll "shaker" "run-tests" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
{{ if .Values.shaker.controller.node_port.enabled }}
type: NodePort
{{ if .Values.shaker.controller.external_policy_local }}
externalTrafficPolicy: Local
{{ end }}
{{ end }}
externalIPs:
- {{ .Values.shaker.controller.external_ip }}
{{- end }}
...

251
shaker/values.yaml Normal file
View File

@ -0,0 +1,251 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License 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.
# Default values for shaker.
# This is a YAML-formatted file.
# Declare name/value pairs to be passed into your templates.
# name: value
---
labels:
job:
node_selector_key: openstack-control-plane
node_selector_value: enabled
pod:
node_selector_key: openstack-control-plane
node_selector_value: enabled
images:
tags:
dep_check: quay.io/airshipit/kubernetes-entrypoint:v1.0.0
shaker_run_tests: docker.io/performa/shaker:latest
ks_user: docker.io/openstackhelm/heat:newton-ubuntu_xenial
image_repo_sync: docker.io/docker:17.07.0
pull_policy: "IfNotPresent"
local_registry:
active: false
exclude:
- dep_check
- image_repo_sync
pod:
user:
shaker:
uid: 1000
resources:
enabled: false
jobs:
ks_user:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
run_tests:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
image_repo_sync:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "1024Mi"
cpu: "2000m"
mounts:
shaker_tests:
init_container: null
shaker_tests:
shaker:
controller:
ingress:
public: true
classes:
namespace: "nginx"
cluster: "nginx-cluster"
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
external_policy_local: false
node_port:
enabled: true
port: 31999
external_ip: 9.9.9.9
dependencies:
dynamic:
common:
local_image_registry:
jobs:
- shaker-image-repo-sync
services:
- endpoint: node
service: local_image_registry
static:
ks_user:
services:
- service: identity
endpoint: internal
run_tests:
jobs:
- shaker-ks-user
services:
- service: identity
endpoint: internal
image_repo_sync:
services:
- endpoint: internal
service: local_image_registry
conf:
script: |
sed -i -E "s/(accommodation\: \[.+)(.+\])/accommodation\: \[pair, compute_nodes: 1\]/" /opt/shaker/shaker/scenarios/openstack/full_l2.yaml
export server_endpoint=\`ip a | grep "global eth0" | cut -f6 -d' ' | cut -f1 -d'/'\`
echo ========== SHAKER CONF PARAMETERS =================
cat /opt/shaker/shaker.conf
echo =====================================================
env -i HOME="$HOME" bash -l -c "printenv; shaker --server-endpoint \$server_endpoint:31999 --config-file /opt/shaker/shaker.conf"
shaker:
auth:
use_dynamic_credentials: true
admin_domain_scope: true
shaker_roles: admin, member
min_compute_nodes: 1
identity:
auth_version: v3
identity-feature-enabled:
api_v2: false
api_v3: true
shaker:
DEFAULT:
debug: true
cleanup_on_error: true
scenario_compute_nodes: 1
report: /opt/shaker/data/shaker-result.html
output: /opt/shaker/data/shaker-result.json
scenario: /opt/shaker/shaker/scenarios/openstack/full_l2.yaml
flavor_name: m1.small
external_net: public
image_name: shaker-image
scenario_availability_zone: nova
os_username: admin
os_password: password
os_auth_url: "http://keystone.openstack.svc.cluster.local/v3"
os_project_name: admin
os_region_name: RegionOne
os_identity_api_version: 3
os_interface: public
validation:
connect_method: floating
volume:
disk_formats: raw
backend_name: rbd1
storage_protocol: rbd
volume-feature-enabled:
api_v1: False
api_v3: True
pvc:
enabled: true
name: pvc-shaker
requests:
storage: 2Gi
storage_class: general
secrets:
identity:
admin: shaker-keystone-admin
shaker: shaker-keystone-user
endpoints:
cluster_domain_suffix: cluster.local
local_image_registry:
name: docker-registry
namespace: docker-registry
hosts:
default: localhost
internal: docker-registry
node: localhost
host_fqdn_override:
default: null
port:
registry:
node: 5000
identity:
name: keystone
auth:
admin:
region_name: RegionOne
username: admin
password: password
project_name: admin
user_domain_name: default
project_domain_name: default
shaker:
role: admin
region_name: RegionOne
username: shaker
password: password
project_name: service
user_domain_name: service
project_domain_name: service
hosts:
default: keystone
internal: keystone-api
host_fqdn_override:
default: null
path:
default: /v3
scheme:
default: http
port:
api:
default: 80
internal: 5000
shaker:
name: shaker
hosts:
default: shaker
public: shaker
host_fqdn_override:
default: null
# NOTE(portdirect): this chart supports TLS for fqdn over-ridden public
# endpoints using the following format:
# public:
# host: null
# tls:
# crt: null
# key: null
path:
default: null
scheme:
default: 'http'
port:
api:
default: 31999
public: 80
manifests:
configmap_bin: true
configmap_etc: true
job_image_repo_sync: true
job_ks_user: true
pod_shaker_test: true
service_shaker: true
secret_keystone: true
...