Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cfme plugin #59

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 162 additions & 0 deletions plugins.d/cfme.local.plugin
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#!/bin/bash

local __retry_interval=60
local __max_retries=20

function cfme.describe {
echo "Instance a cloudforms on a new project"
}

function cfme.help {
:
}

function cfme.install {

# TODO: Check if required ServiceAccount and permisions are granted. If not, call metrics-infra.install
metrics-infra.install

oc new-project cfme --description='Cloudforms Project' --display-name='cloudforms'
oc adm policy add-scc-to-user privileged system:serviceaccount:cfme:default --as=system:admin

#create-volume cfme-pgdb-volume
#create-volume cfme-app-volume


oc create -f https://raw.githubusercontent.com/openshift/openshift-ansible/master/roles/openshift_examples/files/examples/v1.4/cfme-templates/cfme-template.yaml -n openshift --as=system:admin
oc new-app --template=cloudforms -n cfme

__cloudforms_url=$(oc get route cloudforms -o jsonpath='https://{.spec.host}')

for __dc in postgresql memcached cloudforms
do
oc set triggers dc/${__dc} --auto
done

# Testint if CF is alive:
echo "Testing if CF is ready"
for ((i=1; i<${__max_retries}; i++))
do
echo -n $i "..."
curl -s --insecure -u admin:smartvm ${__cloudforms_url}/api |json_reformat |grep version |grep -oP "2\.\d{1}\.\d{1}" && break
sleep ${__retry_interval};
done

if [ $i -ne $((__max_retries+1)) ]
then
# Auto-registering the provider
cfme.register
echo "Provider Registered: Don't forget to add 'Capacity & Utilization' server roles (configuration) if you want to see the metrics"
fi

}

function metrics-infra.install {

oc new-project management-infra --description="Management Infrastructure" --as=system:admin

oc create -n management-infra --as=system:admin -f - << EOF
apiVersion: v1
kind: ClusterRole
metadata:
name: management-infra-admin
rules:
- resources:
- pods/proxy
verbs:
- '*'
EOF

oc create -n management-infra --as=system:admin -f - << EOF
apiVersion: v1
kind: ClusterRole
metadata:
name: hawkular-metrics-admin
rules:
- apiGroups:
- ""
resources:
- hawkular-metrics
- hawkular-alerts
verbs:
- '*'
EOF

oc create -n management-infra --as=system:admin -f - << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: management-admin
EOF

oc create -n management-infra --as=system:admin -f - << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: inspector-admin
EOF

oc adm policy add-role-to-user -n management-infra admin -z management-admin --as=system:admin
oc adm policy add-role-to-user -n management-infra management-infra-admin -z management-admin --as=system:admin
oc adm policy add-cluster-role-to-user cluster-reader system:serviceaccount:management-infra:management-admin --as=system:admin
oc adm policy add-scc-to-user privileged system:serviceaccount:management-infra:management-admin --as=system:admin
oc adm policy add-cluster-role-to-user system:image-puller system:serviceaccount:management-infra:inspector-admin --as=system:admin
oc adm policy add-scc-to-user privileged system:serviceaccount:management-infra:inspector-admin --as=system:admin
oc adm policy add-cluster-role-to-user self-provisioner system:serviceaccount:management-infra:management-admin --as=system:admin
oc adm policy add-cluster-role-to-user hawkular-metrics-admin system:serviceaccount:management-infra:management-admin --as=system:admin
oc adm policy add-cluster-role-to-user system:image-auditor system:serviceaccount:management-infra:management-admin --as=system:admin

}

function cfme.register {
local __cloudforms_url=$(oc get route cloudforms -o jsonpath='https://{.spec.host}')

# Register the cluster
local __token=$(oc sa get-token management-admin -n management-infra --as=system:admin)

curl -s --insecure --user admin:smartvm -X POST -H "Accept: application/json" -o /dev/null -d \
'{
"type": "ManageIQ::Providers::OpenshiftEnterprise::ContainerManager",
"name": "OCP",
"connection_configurations": [
{
"endpoint": {
"role": "default",
"hostname": "kubernetes.default.svc",
"port": 443
},
"authentication": {
"role": "bearer",
"auth_key": "'${__token}'"
}
},
{
"endpoint": {
"role": "hawkular",
"hostname": "hawkular-metrics.openshift-infra.svc",
"port": 443
},
"authentication": {
"role": "hawkular",
"auth_key": "'${__token}'"
}
}]
}' \
${__cloudforms_url}/api/providers
}

function management-infra.uninstall {
oc delete project management-infra --as=system:admin
}

function cfme.uninstall {
echo "Uninstalling Cloudforms"
#oc delete pv cfme-pgdb-volume --as=system:admin
#oc delete pv cfme-app-volume --as=system:admin

management-infra.uninstall
oc delete project cfme
}

cfme.describe