Compare commits
1 commit
master
...
feature-ad
Author | SHA1 | Date | |
---|---|---|---|
86f5dfa47a |
5 changed files with 44 additions and 30 deletions
|
@ -1,6 +1,6 @@
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from helpers.cmd import execute_cmd
|
from helpers.cmd import execute_cmd, log
|
||||||
|
|
||||||
|
|
||||||
def create_bucket(endpoint, versioning, location, no_verify_ssl):
|
def create_bucket(endpoint, versioning, location, no_verify_ssl):
|
||||||
|
@ -13,22 +13,24 @@ def create_bucket(endpoint, versioning, location, no_verify_ssl):
|
||||||
cmd_line_ver = f"aws {no_verify_ssl_str} s3api put-bucket-versioning --bucket {bucket_name} " \
|
cmd_line_ver = f"aws {no_verify_ssl_str} s3api put-bucket-versioning --bucket {bucket_name} " \
|
||||||
f"--versioning-configuration Status=Enabled --endpoint {endpoint} "
|
f"--versioning-configuration Status=Enabled --endpoint {endpoint} "
|
||||||
|
|
||||||
out, success = execute_cmd(cmd_line)
|
output, success = execute_cmd(cmd_line)
|
||||||
|
|
||||||
if not success and "succeeded and you already own it" not in out:
|
if not success and "succeeded and you already own it" not in output:
|
||||||
print(f" > Bucket {bucket_name} has not been created:\n{out}")
|
log(f"{cmd_line}\n"
|
||||||
|
f"Bucket {bucket_name} has not been created:\n"
|
||||||
|
f"Error: {output}", endpoint)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print(f"cmd: {cmd_line}")
|
|
||||||
|
|
||||||
if versioning == "True":
|
if versioning == "True":
|
||||||
out, success = execute_cmd(cmd_line_ver)
|
output, success = execute_cmd(cmd_line_ver)
|
||||||
if not success:
|
if not success:
|
||||||
print(f" > Bucket versioning has not been applied for bucket {bucket_name}:\n{out}")
|
log(f"{cmd_line_ver}\n"
|
||||||
|
f"Bucket versioning has not been applied for bucket {bucket_name}\n"
|
||||||
|
f"Error: {output}", endpoint)
|
||||||
else:
|
else:
|
||||||
print(f" > Bucket versioning has been applied.")
|
log(f"Bucket versioning has been applied for bucket {bucket_name}", endpoint)
|
||||||
|
|
||||||
print(f"Created bucket: {bucket_name} via endpoint {endpoint}")
|
log(f"Created bucket: {bucket_name}", endpoint)
|
||||||
return bucket_name
|
return bucket_name
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,10 +39,12 @@ def upload_object(bucket, payload_filepath, endpoint, no_verify_ssl):
|
||||||
no_verify_ssl_str = "--no-verify-ssl" if no_verify_ssl else ""
|
no_verify_ssl_str = "--no-verify-ssl" if no_verify_ssl else ""
|
||||||
cmd_line = f"aws {no_verify_ssl_str} s3api put-object --bucket {bucket} --key {object_name} " \
|
cmd_line = f"aws {no_verify_ssl_str} s3api put-object --bucket {bucket} --key {object_name} " \
|
||||||
f"--body {payload_filepath} --endpoint {endpoint}"
|
f"--body {payload_filepath} --endpoint {endpoint}"
|
||||||
out, success = execute_cmd(cmd_line)
|
output, success = execute_cmd(cmd_line)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
print(f" > Object {object_name} has not been uploaded.")
|
log(f"{cmd_line}\n"
|
||||||
|
f"Object {object_name} has not been uploaded\n"
|
||||||
|
f"Error: {output}", endpoint)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return bucket, endpoint, object_name
|
return bucket, endpoint, object_name
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import os
|
import os
|
||||||
import shlex
|
import shlex
|
||||||
import sys
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
from subprocess import check_output, CalledProcessError, STDOUT
|
from subprocess import check_output, CalledProcessError, STDOUT
|
||||||
|
|
||||||
|
def log(message, endpoint):
|
||||||
|
time = datetime.utcnow()
|
||||||
|
print(f"{time} at {endpoint}: {message}")
|
||||||
|
|
||||||
def execute_cmd(cmd_line):
|
def execute_cmd(cmd_line):
|
||||||
cmd_args = shlex.split(cmd_line)
|
cmd_args = shlex.split(cmd_line)
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import re
|
import re
|
||||||
|
from helpers.cmd import execute_cmd, log
|
||||||
from helpers.cmd import execute_cmd
|
|
||||||
|
|
||||||
|
|
||||||
def create_container(endpoint, policy, wallet_file, wallet_config):
|
def create_container(endpoint, policy, wallet_file, wallet_config):
|
||||||
cmd_line = f"frostfs-cli --rpc-endpoint {endpoint} container create --wallet {wallet_file} --config {wallet_config} " \
|
cmd_line = f"frostfs-cli --rpc-endpoint {endpoint} container create --wallet {wallet_file} --config {wallet_config} " \
|
||||||
|
@ -10,19 +8,23 @@ def create_container(endpoint, policy, wallet_file, wallet_config):
|
||||||
output, success = execute_cmd(cmd_line)
|
output, success = execute_cmd(cmd_line)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
print(f" > Container has not been created:\n{output}")
|
log(f"{cmd_line}\n"
|
||||||
|
f"Container has not been created\n"
|
||||||
|
f"{output}", endpoint)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
fst_str = output.split('\n')[0]
|
fst_str = output.split('\n')[0]
|
||||||
except Exception:
|
except Exception:
|
||||||
print(f"Got empty output: {output}")
|
log(f"{cmd_line}\n"
|
||||||
|
f"Incorrect output\n"
|
||||||
|
f"Output: {output or '<empty>'}", endpoint)
|
||||||
return False
|
return False
|
||||||
splitted = fst_str.split(": ")
|
splitted = fst_str.split(": ")
|
||||||
if len(splitted) != 2:
|
if len(splitted) != 2:
|
||||||
raise ValueError(f"no CID was parsed from command output:\t{fst_str}")
|
raise ValueError(f"no CID was parsed from command output:\t{fst_str}")
|
||||||
|
|
||||||
print(f"Created container: {splitted[1]} via endpoint {endpoint}")
|
log(f"Created container {splitted[1]}", endpoint)
|
||||||
|
|
||||||
return splitted[1]
|
return splitted[1]
|
||||||
|
|
||||||
|
@ -34,14 +36,18 @@ def upload_object(container, payload_filepath, endpoint, wallet_file, wallet_con
|
||||||
output, success = execute_cmd(cmd_line)
|
output, success = execute_cmd(cmd_line)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
print(f" > Object {object_name} has not been uploaded:\n{output}")
|
log(f"{cmd_line}\n"
|
||||||
|
f"Object {object_name} has not been uploaded\n"
|
||||||
|
f"Error: {output}", endpoint)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# taking second string from command output
|
# taking second string from command output
|
||||||
snd_str = output.split('\n')[1]
|
snd_str = output.split('\n')[1]
|
||||||
except Exception:
|
except Exception:
|
||||||
print(f"Got empty input: {output}")
|
log(f"{cmd_line}\n"
|
||||||
|
f"Incorrect output\n"
|
||||||
|
f"Output: {output or '<empty>'}", endpoint)
|
||||||
return False
|
return False
|
||||||
splitted = snd_str.split(": ")
|
splitted = snd_str.split(": ")
|
||||||
if len(splitted) != 2:
|
if len(splitted) != 2:
|
||||||
|
@ -56,8 +62,9 @@ def get_object(cid, oid, endpoint, out_filepath, wallet_file, wallet_config):
|
||||||
output, success = execute_cmd(cmd_line)
|
output, success = execute_cmd(cmd_line)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
print(f" > Failed to get object {output} from container {cid} \r\n"
|
log(f"{cmd_line}\n"
|
||||||
f" > Error: {output}")
|
f"Failed to get object {oid} from container {cid}\n"
|
||||||
|
f"Error: {output}", endpoint)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -69,13 +76,14 @@ def search_object_by_id(cid, oid, endpoint, wallet_file, wallet_config, ttl=2):
|
||||||
output, success = execute_cmd(cmd_line)
|
output, success = execute_cmd(cmd_line)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
print(f" > Failed to search object {oid} for container {cid} \r\n"
|
log(f"{cmd_line}\n"
|
||||||
f" > Error: {output}")
|
f"Failed to search object {oid} for container {cid}\n"
|
||||||
|
f"Error: {output}", endpoint)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
re_rst = re.search(r'Found (\d+) objects', output)
|
re_rst = re.search(r'Found (\d+) objects', output)
|
||||||
|
|
||||||
if not re_rst:
|
if not re_rst:
|
||||||
raise Exception("Failed to parce search results")
|
raise Exception("Failed to parse search results")
|
||||||
|
|
||||||
return re_rst.group(1)
|
return re_rst.group(1)
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
import argparse
|
import argparse
|
||||||
from itertools import cycle
|
from itertools import cycle
|
||||||
import json
|
import json
|
||||||
import random
|
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
|
@ -33,7 +32,7 @@ parser.add_argument('--endpoint', help='Nodes addresses separated by comma.')
|
||||||
parser.add_argument('--update', help='Save existed containers')
|
parser.add_argument('--update', help='Save existed containers')
|
||||||
parser.add_argument('--ignore-errors', help='Ignore preset errors', action='store_true')
|
parser.add_argument('--ignore-errors', help='Ignore preset errors', action='store_true')
|
||||||
parser.add_argument('--workers', help='Count of workers in preset. Max = 50, Default = 50', default=50)
|
parser.add_argument('--workers', help='Count of workers in preset. Max = 50, Default = 50', default=50)
|
||||||
parser.add_argument('--sleep', help='Time to sleep between container creation and object PUT (in seconds), '
|
parser.add_argument('--sleep', help='Time to sleep between containers creation and objects upload (in seconds), '
|
||||||
'Default = 8', default=8)
|
'Default = 8', default=8)
|
||||||
|
|
||||||
args: Namespace = parser.parse_args()
|
args: Namespace = parser.parse_args()
|
||||||
|
|
|
@ -25,7 +25,7 @@ parser.add_argument('--versioning', help='True/False, False by default.')
|
||||||
parser.add_argument('--ignore-errors', help='Ignore preset errors', action='store_true')
|
parser.add_argument('--ignore-errors', help='Ignore preset errors', action='store_true')
|
||||||
parser.add_argument('--no-verify-ssl', help='Ignore SSL verifications', action='store_true')
|
parser.add_argument('--no-verify-ssl', help='Ignore SSL verifications', action='store_true')
|
||||||
parser.add_argument('--workers', help='Count of workers in preset. Max = 50, Default = 50', default=50)
|
parser.add_argument('--workers', help='Count of workers in preset. Max = 50, Default = 50', default=50)
|
||||||
parser.add_argument('--sleep', help='Time to sleep between container creation and object PUT (in seconds), '
|
parser.add_argument('--sleep', help='Time to sleep between buckets creation and objects upload (in seconds), '
|
||||||
'Default = 8', default=8)
|
'Default = 8', default=8)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
Loading…
Reference in a new issue