Skip to content
Snippets Groups Projects
Commit fea2110e authored by Abdalluh Mostafa's avatar Abdalluh Mostafa
Browse files

Merge branch 'dev' into 'main'

Dev

See merge request a-team/solutions/rancher/mysql-operator!2
parents 233afee5 792f4254
Branches
Tags
1 merge request!2Dev
......@@ -10,114 +10,25 @@ The MySQL Operator is a Kubernetes controller that can be installed into any exi
- Object Storage in another location and publish it using a reverse proxy to store backups
### Install MySQL Operator
## Installation:-
```
## For Helm v3
helm repo add bitpoke https://helm-charts.bitpoke.io
helm install mysql-operator bitpoke/mysql-operator
```
- Run command ` python3 mysql_as_service.py `
### Create MySQL-Cluster with daily/weekly/monthly/yearly Auto backup
- Script functions:-
Change your directory to mysql-cluster
1. Install MySQL-Operator
` cd mysql-cluster `
2. Create MySQL-Cluster
Adjust following variables inside values.yaml:-
3. Create Cluster from existing backup
```
replicas: 1 # Number of replicas
rootPassword: "not-secure" # MySQL root password
appUser: "myuser" # Create MySQL user
appPassword: "mypass" # Password for MySQL user
appDatabase: "mydb" # Create new database
storage: 6Gi # PVC size
```
4. Create Database inside your cluster
##### If you want enable auto backup for this cluster
5. List Your Clusters
6. List Databases
```
backupSchedule: 0 0 0 * * * # The time and frequency of making cluster backups
backupScheduleJobsHistoryLimit: 10 # The number of many backups to keep
backupURL: s3://my_bucket_name/ # Your bucket name
AWS_ACCESS_KEY_ID: # Your Object storage Access key
AWS_SECRET_ACCESS_KEY: # Your Object storage Secret key
S3_ENDPOINT: https://Your_ObjectStorage.com # Your Object storage URL after publish using receive proxy
```
7. List Backups
Notes for backupSchedule :
- 0 0 * * * * -----> Run once an hour, beginning of hour, 0 second
- 0 0 0 * * * -----> Run once a day, midnight, 0 second, 0 second
- 0 0 0 * * 0 -----> Run once a week, midnight between Sat/Sun, 0 second
- 0 0 0 1 * * -----> Run once a month, midnight, first of month, 0 second
- 15 0 0 1 1 * ----> Run once a year, midnight, Jan. 1st, 15th second
###### Deploy your cluster
` helm install mycluster . `
###### To list your cluster
`kubectl get mysqlclusters`
###### To list your backups
`kubectl get mysqlbackups`
### Create MySQL-Cluster from exists backup
Adjust following variables:-
```
replicas: 1 # Number of replicas
rootPassword: "not-secure" # MySQL root password
appUser: "myuser" # Create MySQL user
appPassword: "mypass" # Password for MySQL user
appDatabase: "mydb" # Create new database
storage: 6Gi # PVC size
initBucketURL: # Your backup location - s3://my_bucket/mysql-cluster-db-auto-2022-02-22t11-45-40.xbackup.gz
AWS_ACCESS_KEY_ID: # Your Object storage Access key
AWS_SECRET_ACCESS_KEY: # Your Object storage Secret key
S3_ENDPOINT: https://Your_ObjectStorage.com # Your Object storage URL after publish using a receive proxy
```
##### Deploy your cluster
` helm install mycluster-restored . `
### Create DB Inside your MySQL-Cluster
Adjust following variables inside yaml/create-db.yaml :-
name: my-database # Metadata name
database: db-name-in-mysql-cluster # New DB Name
name: mycluster-mysql # Your cluster name
```
cd create-db.yaml
kubectl apply -f create-db.yaml
```
To list databases
`kubectl get mysqldatabases`
###### If you want deploy cluster using yaml files
- To create cluster with backup or restore cluster from backup
` yaml/create-cluster-with-backup-restore.yaml `
- To create MySQL cluster password
` yaml/cluster-secret.yaml `
- To create secret to let your cluster connect to your object sotage
` yaml/backup-secret`
- To create backup from exists cluster
` yaml/backup-exists-cluster.yaml `
8. Exit
\ No newline at end of file
import json
import os
import subprocess
import sys # for input args
menu_options = {
1: 'Install MySQL-Operator',
2: 'Create MySQL-Cluster',
3: 'Create Cluster from exits backup',
4: 'Create Database inside your cluster',
5: 'List Your Clusters',
6: 'List Databases',
7: 'List Backups',
8: 'Exit',
}
def print_menu():
for key in menu_options.keys():
print (key, '--', menu_options[key] )
def option1():
print('Installing MySQL-Operator...')
command = f'helm repo add bitpoke https://helm-charts.bitpoke.io'
command2 = f'helm repo update'
command3 = f"helm install mysql-operator bitpoke/mysql-operator"
output = os.popen(command3).read()
#print (output)
print ("MySQL-Operator is installed")
def option2():
print('Create MySQL-Cluster')
cluster_name = input("Cluster Name: ")
replica = input("Number of replicas: ")
root_password = input("Root Password: ")
node_port = input("MySQL NodePort: ")
pvc_size = input("PVC size: ")
while input("Enable Auto backup ? [y/n]: ") == "y":
# do something
backup_schedule = input("Backup Schedule [daily/weekly/monthly/yearly]: ")
if backup_schedule == "daily" :
my_backup_schedule = "0 0 * * * *"
#print(f'"{my_backup_schedule}"')
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
#break
elif backup_schedule == "weekly" :
my_backup_schedule = "0 0 0 * * 0"
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
#break
elif backup_schedule == "monthly" :
my_backup_schedule= "0 0 0 1 * *"
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
#break
elif backup_schedule == "yearly" :
my_backup_schedule= "15 0 0 1 1 *"
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
#break
else:
print("Error please enter correct value")
# Deploy cluster with backup
print("Deploying your cluster with auto backup...")
command2 = f'helm install {cluster_name} ./mysql-cluster --set replicas={replica} --set rootPassword={root_password} --set mysqlnodeport={node_port} --set backupSchedule="{my_backup_schedule}" --set backupURL="s3://{mybucket}/" --set backupCredentials.AWS_ACCESS_KEY_ID="{os_access_key}" --set backupCredentials.AWS_SECRET_ACCESS_KEY="{os_secret_key}" --set backupCredentials.S3_PROVIDER=Minio --set backupCredentials.S3_ENDPOINT="{os_url}" --set volumeSpec.persistentVolumeClaim.resources.requests.storage={pvc_size}Gi '
output2 = os.popen(command2).read()
print (output2)
print(f"Access your cluster with port {node_port}")
break
else:
#print(f"OUT")
#### Deploy cluster without backup
print("Deploying your cluster...")
command = f"helm install {cluster_name} ./mysql-cluster --set replicas={replica} --set rootPassword={root_password} --set mysqlnodeport={node_port} --set volumeSpec.persistentVolumeClaim.resources.requests.storage={pvc_size}Gi"
output = os.popen(command).read()
print (output)
print(f"Access your cluster with port {node_port}")
def option3():
print('Create Cluster from exits backup')
cluster_name = input("Cluster Name: ")
replica = input("Number of replicas: ")
# use your root password from backup
node_port = input("MySQL NodePort: ")
pvc_size = input("PVC size: ")
backup_bucket_url = input("Your backup location: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
# Deploy your cluster ..
print("Deploying your cluster...")
command = f'helm install {cluster_name} ./mysql-cluster --set replicas={replica} --set mysqlnodeport={node_port} --set initBucketURL={backup_bucket_url} --set backupCredentials.AWS_ACCESS_KEY_ID="{os_access_key}" --set backupCredentials.AWS_SECRET_ACCESS_KEY="{os_secret_key}" --set backupCredentials.S3_PROVIDER=Minio --set backupCredentials.S3_ENDPOINT="{os_url}" --set volumeSpec.persistentVolumeClaim.resources.requests.storage={pvc_size}Gi '
output = os.popen(command).read()
print (output)
print(f"Access your cluster with port {node_port}")
def option4():
print('Create Database inside your cluster')
database_name = input("Database Name: ")
cluster_name = input("Cluster Name: ")
# Copy Original YAML to copy YAML file
with open('yaml/create-db.yaml','r') as firstfile, open('yaml/create-db-copy.yaml','w') as secondfile:
# read content from first file
for line in firstfile:
# append content to second file
secondfile.write(line)
# Read COPY YAMLfile
with open('yaml/create-db-copy.yaml', 'r') as file :
filedata = file.read()
# Replace the target string
filedata = filedata.replace('my-database', database_name)
filedata = filedata.replace('your-cluster-name', cluster_name)
# Write changes to copy Yaml file
with open('yaml/create-db-copy.yaml', 'w') as file:
file.write(filedata)
print("Creating Database...")
command = f"kubectl create -f yaml/create-db-copy.yaml"
output = os.popen(command).read()
print (output)
print(f"Your Database is created: {database_name} inside cluster {cluster_name}")
def option5():
print('List Your Clusters...')
command = f'kubectl get mysqlcluster'
output = os.popen(command).read()
print (output)
def option6():
print('List Databases...')
command = f'kubectl get mysqldatabase'
output = os.popen(command).read()
print (output)
def option7():
print('List Backups...')
command = f'kubectl get mysqlbackups'
output = os.popen(command).read()
print (output)
if __name__=='__main__':
while(True):
print_menu()
option = ''
try:
option = int(input('Enter your choice: '))
except:
print('Wrong input. Please enter a number ...')
#Check what choice was entered and act accordingly
if option == 1:
option1()
break;
elif option == 2:
option2()
elif option == 3:
option3()
elif option == 4:
option4()
elif option == 5:
option5()
elif option == 6:
option6()
elif option == 7:
option7()
elif option == 8:
print('Thanks for using our service | GIG')
exit()
else:
print('Invalid option. Please enter a number between 1 and 8.')
#!/usr/bin/env/python
from dataclasses import replace
import json
from multiprocessing.spawn import old_main_modules
from requests.structures import CaseInsensitiveDict
import requests
import os
import subprocess
import sys # for input args
from jinja2 import Environment, FileSystemLoader
file_loader = FileSystemLoader('templates')
env = Environment(loader=file_loader)
from minio import Minio
from minio.error import S3Error
menu_options = {
1: 'Install MySQL-Operator',
2: 'Create MySQL-Cluster',
3: 'Create Cluster from existing backup',
# 4: 'Create Database inside your cluster',
4: 'List Your Clusters',
5: 'Edit Cluster', # change backup , change replica
6: 'Remove Cluster',
# 6: 'List Databases',
7: 'List Backups',
8: 'Exit',
}
# Menu for edit cluster options
menu_edit_cluster = {
1: 'Change number of replica',
2: 'Change backup schedule',
}
def print_menu():
for key in menu_options.keys():
print (key, '--', menu_options[key] )
def print_edit_cluster_menu():
for key in menu_edit_cluster.keys():
print (key, '--', menu_edit_cluster[key] )
def create_server_pool_lb(api_url,customer_id,cloudspace_id,cluster_name,node_port,jwt):
# Create server pool and Loadbalancer using API
# make session
headers = CaseInsensitiveDict()
headers["Accept"] = "application/json"
headers["Authorization"] = "Bearer {}".format(jwt)
##################################################
print ("Creating serverpool serverpool...")
# Create ServerPool
serverpool_api = f"https://{api_url}/alpha/customers/{customer_id}/cloudspaces/{cloudspace_id}/ingress/server-pools?name={cluster_name}"
# Make API request to create Serverpool
create_serverpool = requests.post(serverpool_api, headers=headers)
serverpool = create_serverpool.json()
# save serverpool id to var "serverpool_id"
serverpool_id = serverpool['id']
print (f"ServerPool Status {create_serverpool.status_code}")
print("Add kubernetes hosts to serverpool...")
# get workers IPs
k8s_node_ip = f"kubectl get node -o json | jq '.items[] | .status.addresses[0].address'"
output = os.popen(k8s_node_ip).read()
# Save output to lines "split them line by line"
lines = output.splitlines()
# For loop to get workers IPs and add them to serverpool
for ip_count in range(len(lines)):
# remove "" from output
ip = lines[ip_count].replace('"', "")
#print (ip)
# API URL for post request to add host to server pool
add_host_to_serverpool_api = f"https://{api_url}/alpha/customers/{customer_id}/cloudspaces/{cloudspace_id}/ingress/server-pools/{serverpool_id}/hosts?address={ip}"
# Create API request to add host to server pool
add_host = requests.post(add_host_to_serverpool_api, headers=headers)
print (add_host.json())
print (f"Add hosts to ServerPool Status {add_host.status_code}")
##################################################
# Create LB
print ("Creating LoadBalancer...")
lb_api = f"https://{api_url}/alpha/customers/{customer_id}/cloudspaces/{cloudspace_id}/ingress/load-balancers"
# Create MySQL LB
create_mysql_lb = requests.post(lb_api, headers=headers, json={
"name": f"{cluster_name}",
"description": "string",
"type": "TCP",
"front_end": {
"port": node_port,
"tls": {
"is_enabled": False,
"domain": "string",
"tls_termination": False
}
},
"back_end": {
"serverpool_id": f"{serverpool_id}",
"target_port": node_port
}
})
print(create_mysql_lb.json())
def test_s3_connection(os_url,os_port,os_access_key,os_secret_key):
endpoint_url = f"{os_url}:{os_port}"
x_access_key = f"{os_access_key}"
x_secret_key = f"{os_secret_key}"
client = Minio(
endpoint=endpoint_url,
secure=True,
access_key=x_access_key,
secret_key=x_secret_key
)
try:
client.list_buckets()
print("Object storage connected")
except:
print("Object storage not reachable")
exit(0)
def install_mysql_operator():
print('Installing MySQL-Operator...')
add_helm_repo = f'helm repo add bitpoke https://helm-charts.bitpoke.io'
output = os.popen(add_helm_repo).read()
update_helm_repo = f'helm repo update'
output = os.popen(update_helm_repo).read()
install_mysql_operator = f"helm install mysql-operator bitpoke/mysql-operator"
output = os.popen(install_mysql_operator).read()
#print (output)
print ("MySQL-Operator is installed")
def create_cluster():
print('Create MySQL-Cluster')
jwt = input("JWT: ")
# ex: cloud.gig.tech/api/1
api_url = input("API URL: ")
customer_id = input("Customer ID: ")
cloudspace_id = input("CloudSpace ID: ")
cluster_name = input("Cluster Name: ")
replica = input("Number of replicas: ")
root_password = input("Root Password: ")
node_port = int(input("MySQL NodePort [30000-32767]: "))
pvc_size = input("PVC size: ")
answer = None
while answer not in ("yes", "no", "y", "Y", "n", "N"):
answer = input("Enable Auto backup ? [yes/no]: ")
if answer == "yes" or answer == "y" or answer == "Y":
backup_schedule = None
while backup_schedule not in ("daily", "weekly", "monthly", "yearly", "d", "D", "w", "W", "m", "M", "y", "Y", "custom", "c", "C"):
backup_schedule = input("Backup Schedule [daily/weekly/monthly/yearly/custom]: ")
if backup_schedule == "daily" or backup_schedule == "d" or backup_schedule == "D" :
my_backup_schedule = "0 0 * * * *"
#print(f'"{my_backup_schedule}"')
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
os_port = input("Object storage port: ")
#test_s3_connection(os_url,os_port,os_access_key,os_secret_key)
#break
elif backup_schedule == "weekly" or backup_schedule == "w" or backup_schedule == "W" :
my_backup_schedule = "0 0 0 * * 0"
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
os_port = input("Object storage port: ")
#break
elif backup_schedule == "monthly" or backup_schedule == "m" or backup_schedule == "M" :
my_backup_schedule= "0 0 0 1 * *"
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
os_port = input("Object storage port: ")
#break
elif backup_schedule == "yearly" or backup_schedule == "y" or backup_schedule == "Y":
my_backup_schedule= "15 0 0 1 1 *"
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
os_port = input("Object storage port: ")
#break
elif backup_schedule == "custom" or backup_schedule == "c" or backup_schedule == "C":
my_backup_schedule = input("Custom backup cronjob: ")
mybucket = input("Bucket Name: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
os_port = input("Object storage port: ")
#break
else:
print("Error please enter correct value")
## Test S3
test_s3_connection(os_url,os_port,os_access_key,os_secret_key)
#### DEF CREATE SERVER POOL & LB
create_server_pool_lb(api_url,customer_id,cloudspace_id,cluster_name,node_port,jwt)
# Deploy cluster with backup
print("Deploying your cluster with auto backup...")
command2 = f'helm install {cluster_name} ./mysql-cluster --set replicas={replica} --set rootPassword={root_password} --set mysqlnodeport={node_port} --set backupSchedule="{my_backup_schedule}" --set backupURL="s3://{mybucket}/" --set backupCredentials.AWS_ACCESS_KEY_ID="{os_access_key}" --set backupCredentials.AWS_SECRET_ACCESS_KEY="{os_secret_key}" --set backupCredentials.S3_PROVIDER=Minio --set backupCredentials.S3_ENDPOINT=https://{os_url} --set volumeSpec.persistentVolumeClaim.resources.requests.storage={pvc_size}Gi '
output2 = os.popen(command2).read()
print (output2)
print(f"Access your cluster with port {node_port}")
elif answer == "no" or answer == "n" or answer == "N":
#print(f"OUT")
#### Deploy cluster without backup
#### DEF CREATE SERVER POOL & LB
create_server_pool_lb(api_url,customer_id,cloudspace_id,cluster_name,node_port,jwt)
# Deploy mysql cluster without backup
print("Deploying your cluster...")
command = f"helm install {cluster_name} ./mysql-cluster --set replicas={replica} --set rootPassword={root_password} --set mysqlnodeport={node_port} --set volumeSpec.persistentVolumeClaim.resources.requests.storage={pvc_size}Gi"
output = os.popen(command).read()
print (output)
print(f"Access your cluster with port {node_port}")
else:
print("Please enter yes or no.")
def create_cluster_from_backup():
print('Create Cluster from existing backup')
jwt = input("JWT: ")
# ex: cloud.gig.tech/api/1
api_url = input("API URL: ")
customer_id = input("Customer ID: ")
cloudspace_id = input("CloudSpace ID: ")
cluster_name = input("Cluster Name: ")
replica = input("Number of replicas: ")
# use your root password from backup
root_password = input("Root Password: ")
node_port = input("MySQL NodePort [30000-32767]: ")
pvc_size = input("PVC size: ")
mybucket = input("Bucket Name: ")
backup_file_name = input("Backup File Name: ")
backup_bucket_url = f's3://{mybucket}/{backup_file_name}'
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
os_url = input("Object storage URL: ")
#### DEF CREATE SERVER POOL & LB
create_server_pool_lb(api_url,customer_id,cloudspace_id,cluster_name,node_port,jwt)
# Deploy your cluster ..
print("Deploying your cluster...")
command = f'helm install {cluster_name} ./mysql-cluster --set replicas={replica} --set rootPassword={root_password} --set mysqlnodeport={node_port} --set initBucketURL={backup_bucket_url} --set backupCredentials.AWS_ACCESS_KEY_ID="{os_access_key}" --set backupCredentials.AWS_SECRET_ACCESS_KEY="{os_secret_key}" --set backupCredentials.S3_PROVIDER=Minio --set backupCredentials.S3_ENDPOINT="{os_url}" --set volumeSpec.persistentVolumeClaim.resources.requests.storage={pvc_size}Gi '
output = os.popen(command).read()
print (output)
print(f"Access your cluster with port {node_port}")
def create_database():
print('Create Database inside your cluster')
database_name = input("Database Name: ")
cluster_name = input("Cluster Name: ")
#Generate YAML file to create DB
template = env.get_template('create-db.j2')
output = template.render(database_name=database_name, cluster_name=cluster_name)
with open("templates/create-db.yaml", "w") as fh:
fh.write(output)
print("Creating Database...")
command = f"kubectl create -f templates/create-db.yaml"
output = os.popen(command).read()
print (output)
print(f"Your Database is created: {database_name} inside cluster {cluster_name}")
def edit_cluster():
print('Edit your cluster')
cluster_name = input("Cluster Name: ")
while(True):
print_edit_cluster_menu()
option = ''
try:
option = int(input('Choice: '))
except:
print('Wrong input. Please enter a number ...')
#Check what choice was entered and act accordingly
if option == 1:
print('1')
replica_num = input("Number of replicas:" )
command = f'kubectl scale --replicas={replica_num} mysqlcluster {cluster_name}'
output = os.popen(command).read()
print (output)
break;
elif option == 2:
print('2')
get_cluster_yaml = f'kubectl get mysqlcluster {cluster_name} -o yaml > {cluster_name}.yaml '
output = os.popen(get_cluster_yaml).read()
cronjob_input = input("Custom Cronjob:" )
cronjob = f"'\{cronjob_input}'"
# replace cronjob
replace_cronjob = f'sed -i "s/backupSchedule.*/backupSchedule: {cronjob}/g" {cluster_name}.yaml'
output = os.popen(replace_cronjob).read()
apply_changes = f'kubectl apply -f {cluster_name}.yaml'
output = os.popen(apply_changes).read()
print (output)
break;
else:
print('Invalid option. Please enter a number between 1 and 2.')
def list_clusters():
print ("List clusters")
list_helm_deployment = f'helm list -A'
output = os.popen(list_helm_deployment).read()
firstline = True
# Print only first column "deployment name"
for line in output.splitlines():
if firstline: #skip first line
firstline = False
continue
fields = line.split()
deployment_name = fields[0]
print (f'helm deployment name {deployment_name}')
list_deployment_resources = f'helm get all {deployment_name} | grep -e mysql.presslabs.org/cluster -e nodePort | sed "s/mysql.presslabs.org\///g" | sed "s/node//g"'
output = os.popen(list_deployment_resources).read()
print (output)
def remove_cluster():
list_helm_deployment = f'helm list -A'
output = os.popen(list_helm_deployment).read()
# Print only first column "deployment name"
for line in output.splitlines():
fields = line.split()
if len(fields) >= 1:
print (fields[0])
deployment_name = input("Deployment Name: ")
delete_deployment = f'helm delete {deployment_name}'
output = os.popen(delete_deployment).read()
print (output)
def list_databases():
print('List Databases...')
command = f'kubectl get mysqldatabase'
output = os.popen(command).read()
print (output)
#def list_backups():
# print('List Backups...')
# command = f'kubectl get mysqlbackups'
# output = os.popen(command).read()
# print (output)
def list_backups():
print('List Backups from Object Storage...')
os_endpoint = input("Object storage endpoint: ")
os_port = input("Object storage port: ")
os_access_key = input("Object storage access key: ")
os_secret_key = input("Object storage secret key: ")
mybucket = input("Bucket Name: ")
endpoint_url = f"{os_endpoint}:{os_port}"
x_access_key = f"{os_access_key}"
x_secret_key = f"{os_secret_key}"
#print (endpoint_url,x_access_key,x_secret_key)
#list_buckets = f"'{mybucket}', prefix=None, recursive=True"
#print (list_buckets)
client = Minio(
endpoint=endpoint_url,
secure=True,
access_key=x_access_key,
secret_key=x_secret_key
)
## List Objects
#list_buckets = f"'{mybucket}', prefix=None, recursive=True"
objects = client.list_objects(mybucket, prefix=None, recursive=True)
for obj in objects:
print(obj.object_name)
if __name__=='__main__':
while(True):
print_menu()
option = ''
try:
option = int(input('Enter your choice: '))
except:
print('Wrong input. Please enter a number ...')
#Check what choice was entered and act accordingly
if option == 1:
install_mysql_operator()
#break;
elif option == 2:
create_cluster()
elif option == 3:
create_cluster_from_backup()
# elif option == 4:
# create_database()
elif option == 4:
list_clusters()
# elif option == 6:
# list_databases()
elif option == 5:
edit_cluster()
elif option == 6:
remove_cluster()
elif option == 7:
list_backups()
elif option == 8:
print('Thanks for using our service')
exit()
else:
print('Invalid option. Please enter a number between 1 and 8.')
# this will create new DB inside your cluster
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlDatabase
metadata:
name: {{ database_name }}
spec:
database: {{ database_name }} # db-name-in-mysql-cluster
clusterRef:
name: {{ cluster_name }}
namespace: default
#initBucketURL:
#initBucketSecretName: mycluster-with-backups
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment