openstack-operator/devstack/lib/common

117 lines
2.7 KiB
Bash

#!/bin/bash
#
# Copyright 2020 VEXXHOST, Inc.
#
# 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.
function get_kubernetes_service_ip {
local svc="$1"
for i in {1..60}; do
ip=$(kubectl get svc/$svc -ojsonpath='{.spec.clusterIP}') && break || sleep 1;
done
echo "$ip"
}
function kubernetes_rollout_status {
local resource="$1"
for i in {1..60}; do
kubectl get $resource && break || sleep 1;
done
kubectl rollout status --timeout=300s $resource
}
function kubernetes_rollout_restart {
local resource="$1"
for i in {1..60}; do
kubectl get $resource && break || sleep 1;
done
kubectl rollout restart $resource
}
function kubernetes_ensure_resource {
local resource="$1"
for i in {1..120}; do
kubectl get $resource && break || sleep 5;
done
}
function proxy_pass_to_kubernetes {
local url=$1
local svc=$2
local conf=$3
local ip=$(get_kubernetes_service_ip $svc)
local apache_conf=$(apache_site_config_for $conf)
enable_apache_mod proxy
enable_apache_mod proxy_http
echo "KeepAlive Off" | sudo tee $apache_conf
echo "SetEnv proxy-sendchunked 1" | sudo tee -a $apache_conf
echo "ProxyPass \"${url}\" \"http://${ip}/\"" | sudo tee $apache_conf
enable_apache_site $conf
restart_apache_server
}
# Gets or creates service
# Usage: get_or_create_service <name> <type> <description>
function get_or_create_service {
cat <<EOF | kubectl apply -f-
---
apiVersion: identity.openstack.org/v1alpha1
kind: Service
metadata:
name: ${1//_/-}
spec:
type: $2
description: $3
EOF
}
export -f get_or_create_service
# Create an endpoint with a specific interface
# Usage: _get_or_create_endpoint_with_interface <service> <interface> <url> <region>
function _get_or_create_endpoint_with_interface {
cat <<EOF | kubectl apply -f-
---
apiVersion: identity.openstack.org/v1alpha1
kind: Endpoint
metadata:
name: ${1//_/-}-$2
spec:
service: $1
interface: $2
url: $3
EOF
}
export -f _get_or_create_endpoint_with_interface
# Get plain data from the specified secret
# Usage: get_data_from_secret <secret> <namespace> <key>
function get_data_from_secret {
local secret=$1
local ns=$2
local key=$3
local data=$(kubectl get secret -n $ns $secret -o jsonpath="{.data.$key}" | base64 --decode)
echo $data
}
export -f get_data_from_secret