From 3ba28a45940e64fde50514eec1f2f18df7ed22ff Mon Sep 17 00:00:00 2001 From: viktorbarzin Date: Sat, 8 May 2021 13:43:09 +0100 Subject: [PATCH] remove kubectl manifests bc drone is not happy running them :/ --- modules/kubernetes/dbaas/cluster.yaml | 30 +++++++++ modules/kubernetes/dbaas/versions.tf | 18 ++--- .../monitoring/server-power-cycle/main.py | 51 ++++++++++++++ .../monitoring/server-power-cycle/main.sh | 66 +++++++++++++++++++ modules/kubernetes/url-shortener/versions.tf | 18 ++--- versions.tf | 24 +++---- 6 files changed, 177 insertions(+), 30 deletions(-) create mode 100644 modules/kubernetes/dbaas/cluster.yaml create mode 100644 modules/kubernetes/monitoring/server-power-cycle/main.py create mode 100644 modules/kubernetes/monitoring/server-power-cycle/main.sh diff --git a/modules/kubernetes/dbaas/cluster.yaml b/modules/kubernetes/dbaas/cluster.yaml new file mode 100644 index 00000000..9659b05f --- /dev/null +++ b/modules/kubernetes/dbaas/cluster.yaml @@ -0,0 +1,30 @@ +apiVersion: mysql.presslabs.org/v1alpha1 +kind: MysqlCluster +metadata: + name: mysql-cluster + namespace: dbaas +spec: + mysqlVersion: "5.7" + replicas: 1 + secretName: cluster-secret + mysqlConf: + # read_only: 0 # mysql forms a single transaction for each sql statement, autocommit for each statement + # automatic_sp_privileges: "ON" # automatically grants the EXECUTE and ALTER ROUTINE privileges to the creator of a stored routine + # auto_generate_certs: "ON" # Auto Generation of Certificate + # auto_increment_increment: 1 # Auto Incrementing value from +1 + # auto_increment_offset: 1 # Auto Increment Offset + # binlog-format: "STATEMENT" # contains various options such ROW(SLOW,SAFE) STATEMENT(FAST,UNSAFE), MIXED(combination of both) + # wait_timeout: 31536000 # 28800 number of seconds the server waits for activity on a non-interactive connection before closing it, You might encounter MySQL server has gone away error, you then tweak this value acccordingly + # interactive_timeout: 28800 # The number of seconds the server waits for activity on an interactive connection before closing it. + # max_allowed_packet: "512M" # Maximum size of MYSQL Network protocol packet that the server can create or read 4MB, 8MB, 16MB, 32MB + # max-binlog-size: 1073741824 # binary logs contains the events that describe database changes, this parameter describe size for the bin_log file. + # log_output: "TABLE" # Format in which the logout will be dumped + # master-info-repository: "TABLE" # Format in which the master info will be dumped + # relay_log_info_repository: "TABLE" # Format in which the relay info will be dumped + volumeSpec: + persistentVolumeClaim: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi diff --git a/modules/kubernetes/dbaas/versions.tf b/modules/kubernetes/dbaas/versions.tf index 89ee8b53..f020aef4 100644 --- a/modules/kubernetes/dbaas/versions.tf +++ b/modules/kubernetes/dbaas/versions.tf @@ -1,9 +1,9 @@ -terraform { - required_providers { - kubectl = { - source = "gavinbunney/kubectl" - version = ">= 1.10.0" - } - } - required_version = ">= 0.13" -} +# terraform { +# required_providers { +# kubectl = { +# source = "gavinbunney/kubectl" +# version = ">= 1.10.0" +# } +# } +# required_version = ">= 0.13" +# } diff --git a/modules/kubernetes/monitoring/server-power-cycle/main.py b/modules/kubernetes/monitoring/server-power-cycle/main.py new file mode 100644 index 00000000..f1972730 --- /dev/null +++ b/modules/kubernetes/monitoring/server-power-cycle/main.py @@ -0,0 +1,51 @@ +import asyncio +import logging +import os +import signal +import sys +import time + +import aiohttp + +iDRAC_HOST = 'idrac' +iDRAC_USER_ENV_VAR = 'idrac_user' +iDRAC_PASSWORD_ENV_VAR = 'idrac_password' +SHOULD_RUN = True + + +def signal_handler(sig, frame): + logging.warning(f'signal {sig} received. shutting down gracefully...') + global SHOULD_RUN + SHOULD_RUN = False + time.sleep(60) + sys.exit(0) + + +async def main() -> None: + # define signal handlers + signal.signal(signal.SIGINT, signal_handler) + + user = os.environ.get(iDRAC_USER_ENV_VAR) + if user is None: + logging.critical('missing environment variable for idrac user' + f' please set {iDRAC_USER_ENV_VAR}') + return + + password = os.environ.get(iDRAC_PASSWORD_ENV_VAR) + if password is None: + logging.critical('missing environment variable for idrac password' + f' please set {iDRAC_PASSWORD_ENV_VAR}') + return + + logging.info('service initiated with credentials') + return await monitor(user, password) + + +async def monitor(user: str, password: str) -> None: + while SHOULD_RUN: + pass + + +if __name__ == '__main__': + # abandoned bc server cannot start itself when it's off :/ + asyncio.run(main()) diff --git a/modules/kubernetes/monitoring/server-power-cycle/main.sh b/modules/kubernetes/monitoring/server-power-cycle/main.sh new file mode 100644 index 00000000..fd7d362f --- /dev/null +++ b/modules/kubernetes/monitoring/server-power-cycle/main.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +tag=server-power-cycle-script +logger -t $tag start $(date '+%F-%R') + +if [ -f /tmp/server-power-cycle-lock ]; then + logger -t $tag 'Script already running. exiting' + exit 0 +fi +touch /tmp/server-power-cycle-lock + + +if [ -f /root/server-power-cycle/state.off ]; then + logger -t $tag 'Server state set to off' + while true; do + sleep 60 # sleep 1 minute + logger -t $tag 'Trying to connect to idrac system...' + curl --connect-timeout 5 -s -k -u root:calvin -H"Content-type: application/json" -X GET https://192.168.1.4/redfish/v1/Chassis/System.Embedded.1/Power/PowerSupplies/PSU.Slot.2 + if [[ $? -eq 0 ]]; then + logger -t $tag "Connected to idrac, assuming power is back on" + logger -t $tag "Power supply restored, sending power on command" + curl -s -k -u root:calvin -X POST -d '{"Action": "Reset", "ResetType": "On"}' -H"Content-type: application/json" https://192.168.1.4/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset + rm /root/server-power-cycle/state.off + + logger -t $tag end $(date '+%F-%R') + rm /tmp/server-power-cycle-lock + exit 0 + fi + done +fi + + +voltage=$(curl -s -k -u root:calvin -H"Content-type: application/json" -X GET https://192.168.1.4/redfish/v1/Chassis/System.Embedded.1/Power/PowerSupplies/PSU.Slot.2 |jq .LineInputVoltage) +# check input voltage on the pwoer supply connected to the outer system +if [[ $voltage -gt 0 ]]; then + logger -t $tag "power supply is on. exiting" + logger -t $tag end $(date '+%F-%R') + rm /tmp/server-power-cycle-lock + exit 0 +fi + +to_wait=30 +echo "Continuously checking power supply for the next $to_wait minutes" + +for i in $(seq 30); do + logger -t $tag "Sleeping a minute..Minute $i" + sleep 60 + + # check input voltage on the pwoer supply connected to the outer system + voltage=$(curl -s -k -u root:calvin -H"Content-type: application/json" -X GET https://192.168.1.4/redfish/v1/Chassis/System.Embedded.1/Power/PowerSupplies/PSU.Slot.2 |jq .LineInputVoltage) + if [[ $voltage -gt 0 ]]; then + logger -t $tag "power supply is on. exiting" + + logger -t $tag end $(date '+%F-%R') + rm /tmp/server-power-cycle-lock + exit 0 + fi + +done + +logger -t $tag "Power supply did not come back, sending graceful shutdown signal" +curl -s -k -u root:calvin -X POST -d '{"Action": "Reset", "ResetType": "GracefulShutdown"}' -H"Content-type: application/json" https://192.168.1.4/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset + +touch /root/server-power-cycle/state.off +rm /tmp/server-power-cycle-lock +logger -t $tag end $(date '+%F-%R') diff --git a/modules/kubernetes/url-shortener/versions.tf b/modules/kubernetes/url-shortener/versions.tf index 89ee8b53..f020aef4 100644 --- a/modules/kubernetes/url-shortener/versions.tf +++ b/modules/kubernetes/url-shortener/versions.tf @@ -1,9 +1,9 @@ -terraform { - required_providers { - kubectl = { - source = "gavinbunney/kubectl" - version = ">= 1.10.0" - } - } - required_version = ">= 0.13" -} +# terraform { +# required_providers { +# kubectl = { +# source = "gavinbunney/kubectl" +# version = ">= 1.10.0" +# } +# } +# required_version = ">= 0.13" +# } diff --git a/versions.tf b/versions.tf index 65b30d16..16581252 100644 --- a/versions.tf +++ b/versions.tf @@ -1,12 +1,12 @@ -terraform { - required_providers { - kubernetes = { - source = "hashicorp/kubernetes" - } - kubectl = { - source = "gavinbunney/kubectl" - version = ">= 1.10.0" - } - } - required_version = ">= 0.13" -} +# terraform { +# required_providers { +# kubernetes = { +# source = "hashicorp/kubernetes" +# } +# kubectl = { +# source = "gavinbunney/kubectl" +# version = ">= 1.10.0" +# } +# } +# required_version = ">= 0.13" +# }