mirror of
https://github.com/lucky-sideburn/kubeinvaders.git
synced 2026-05-06 00:36:44 +00:00
added more presets
This commit is contained in:
495
README.md
495
README.md
@@ -174,6 +174,501 @@ In order to restrict the access to the Kubeinvaders endpoint add this annotation
|
||||
```yaml
|
||||
nginx.ingress.kubernetes.io/whitelist-source-range: <your_ip>/32
|
||||
```
|
||||
|
||||
## Test Loading and Chaos Experiment Presets - Python Code orchestrated by Kubeinvaders
|
||||
### Cassandra
|
||||
```python
|
||||
from cassandra.cluster import Cluster
|
||||
from random import randint
|
||||
import time
|
||||
|
||||
def main():
|
||||
cluster = Cluster(['127.0.0.1'])
|
||||
session = cluster.connect()
|
||||
|
||||
session.execute("CREATE KEYSPACE IF NOT EXISTS test WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor': 1 }")
|
||||
session.execute("CREATE TABLE IF NOT EXISTS test.messages (id int PRIMARY KEY, message text)")
|
||||
|
||||
for i in range(1000):
|
||||
session.execute("INSERT INTO test.messages (id, message) VALUES (%s, '%s')" % (i, str(randint(0, 1000))))
|
||||
time.sleep(0.001)
|
||||
|
||||
cluster.shutdown()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
|
||||
### Consul
|
||||
```python
|
||||
import time
|
||||
import consul
|
||||
|
||||
# Connect to the Consul cluster
|
||||
client = consul.Consul()
|
||||
|
||||
# Continuously register and deregister a service
|
||||
while True:
|
||||
# Register the service
|
||||
client.agent.service.register(
|
||||
"stress-test-service",
|
||||
port=8080,
|
||||
tags=["stress-test"],
|
||||
check=consul.Check().tcp("localhost", 8080, "10s")
|
||||
)
|
||||
|
||||
# Deregister the service
|
||||
client.agent.service.deregister("stress-test-service")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Elasticsearch
|
||||
```python
|
||||
import time
|
||||
from elasticsearch import Elasticsearch
|
||||
|
||||
# Connect to the Elasticsearch cluster
|
||||
es = Elasticsearch(["localhost"])
|
||||
|
||||
# Continuously index and delete documents
|
||||
while True:
|
||||
# Index a document
|
||||
es.index(index="test-index", doc_type="test-type", id=1, body={"test": "test"})
|
||||
|
||||
# Delete the document
|
||||
es.delete(index="test-index", doc_type="test-type", id=1)
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Etcd3
|
||||
```python
|
||||
import time
|
||||
import etcd3
|
||||
|
||||
# Connect to the etcd3 cluster
|
||||
client = etcd3.client()
|
||||
|
||||
# Continuously set and delete keys
|
||||
while True:
|
||||
# Set a key
|
||||
client.put("/stress-test-key", "stress test value")
|
||||
|
||||
# Delete the key
|
||||
client.delete("/stress-test-key")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Gitlab
|
||||
```python
|
||||
import gitlab
|
||||
import requests
|
||||
import time
|
||||
|
||||
gl = gitlab.Gitlab('https://gitlab.example.com', private_token='my_private_token')
|
||||
|
||||
def create_project():
|
||||
project = gl.projects.create({'name': 'My Project'})
|
||||
print("Created project: ", project.name)
|
||||
|
||||
def main():
|
||||
for i in range(1000):
|
||||
create_project()
|
||||
time.sleep(0.001)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
|
||||
### Http
|
||||
```python
|
||||
import time
|
||||
import requests
|
||||
|
||||
# Set up the URL to send requests to
|
||||
url = 'http://localhost:8080/'
|
||||
|
||||
# Set up the number of requests to send
|
||||
num_requests = 10000
|
||||
|
||||
# Set up the payload to send
|
||||
payload = {'key': 'value'}
|
||||
|
||||
# Send the requests
|
||||
start_time = time.time()
|
||||
for i in range(num_requests):
|
||||
requests.post(url, json=payload)
|
||||
end_time = time.time()
|
||||
|
||||
# Calculate the throughput
|
||||
throughput = num_requests / (end_time - start_time)
|
||||
print(f'Throughput: {throughput} requests/second')
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Jira
|
||||
```python
|
||||
import time
|
||||
from jira import JIRA
|
||||
|
||||
# Connect to the Jira instance
|
||||
jira = JIRA(
|
||||
server="https://jira.example.com",
|
||||
basic_auth=("user", "password")
|
||||
)
|
||||
|
||||
# Continuously create and delete issues
|
||||
while True:
|
||||
# Create an issue
|
||||
issue = jira.create_issue(
|
||||
project="PROJECT",
|
||||
summary="Stress test issue",
|
||||
description="This is a stress test issue.",
|
||||
issuetype={"name": "Bug"}
|
||||
)
|
||||
|
||||
# Delete the issue
|
||||
jira.delete_issue(issue)
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Kafka
|
||||
```python
|
||||
import time
|
||||
import random
|
||||
|
||||
from kafka import KafkaProducer
|
||||
|
||||
# Set up the Kafka producer
|
||||
producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
|
||||
|
||||
# Set up the topic to send messages to
|
||||
topic = 'test'
|
||||
|
||||
# Set up the number of messages to send
|
||||
num_messages = 10000
|
||||
|
||||
# Set up the payload to send
|
||||
payload = b'a' * 1000000
|
||||
|
||||
# Send the messages
|
||||
start_time = time.time()
|
||||
for i in range(num_messages):
|
||||
producer.send(topic, payload)
|
||||
end_time = time.time()
|
||||
|
||||
# Calculate the throughput
|
||||
throughput = num_messages / (end_time - start_time)
|
||||
print(f'Throughput: {throughput} messages/second')
|
||||
|
||||
# Flush and close the producer
|
||||
producer.flush()
|
||||
producer.close()
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Kubernetes
|
||||
```python
|
||||
import time
|
||||
import kubernetes
|
||||
|
||||
# Create a Kubernetes client
|
||||
client = kubernetes.client.CoreV1Api()
|
||||
|
||||
# Continuously create and delete pods
|
||||
while True:
|
||||
# Create a pod
|
||||
pod = kubernetes.client.V1Pod(
|
||||
metadata=kubernetes.client.V1ObjectMeta(name="stress-test-pod"),
|
||||
spec=kubernetes.client.V1PodSpec(
|
||||
containers=[kubernetes.client.V1Container(
|
||||
name="stress-test-container",
|
||||
image="nginx:latest"
|
||||
)]
|
||||
)
|
||||
)
|
||||
client.create_namespaced_pod(namespace="default", body=pod)
|
||||
|
||||
# Delete the pod
|
||||
client.delete_namespaced_pod(name="stress-test-pod", namespace="default")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Mongodb
|
||||
```python
|
||||
import time
|
||||
import random
|
||||
from pymongo import MongoClient
|
||||
|
||||
# Set up the MongoDB client
|
||||
client = MongoClient('mongodb://localhost:27017/')
|
||||
|
||||
# Set up the database and collection to use
|
||||
db = client['test']
|
||||
collection = db['test']
|
||||
|
||||
# Set up the number of documents to insert
|
||||
num_documents = 10000
|
||||
|
||||
# Set up the payload to insert
|
||||
payload = {'key': 'a' * 1000000}
|
||||
|
||||
# Insert the documents
|
||||
start_time = time.time()
|
||||
for i in range(num_documents):
|
||||
collection.insert_one(payload)
|
||||
end_time = time.time()
|
||||
|
||||
# Calculate the throughput
|
||||
throughput = num_documents / (end_time - start_time)
|
||||
print(f'Throughput: {throughput} documents/second')
|
||||
|
||||
# Close the client
|
||||
client.close()
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Mysql
|
||||
```python
|
||||
import time
|
||||
import mysql.connector
|
||||
|
||||
# Connect to the MySQL database
|
||||
cnx = mysql.connector.connect(
|
||||
host="localhost",
|
||||
user="root",
|
||||
password="password",
|
||||
database="test"
|
||||
)
|
||||
cursor = cnx.cursor()
|
||||
|
||||
# Continuously insert rows into the "test_table" table
|
||||
while True:
|
||||
cursor.execute("INSERT INTO test_table (col1, col2) VALUES (%s, %s)", (1, 2))
|
||||
cnx.commit()
|
||||
time.sleep(1)
|
||||
|
||||
# Close the database connection
|
||||
cnx.close()
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Nomad
|
||||
```python
|
||||
import time
|
||||
import nomad
|
||||
|
||||
# Create a Nomad client
|
||||
client = nomad.Nomad()
|
||||
|
||||
# Create a batch of jobs to submit to Nomad
|
||||
jobs = [{
|
||||
"Name": "stress-test-job",
|
||||
"Type": "batch",
|
||||
"Datacenters": ["dc1"],
|
||||
"TaskGroups": [{
|
||||
"Name": "stress-test-task-group",
|
||||
"Tasks": [{
|
||||
"Name": "stress-test-task",
|
||||
"Driver": "raw_exec",
|
||||
"Config": {
|
||||
"command": "sleep 10"
|
||||
},
|
||||
"Resources": {
|
||||
"CPU": 500,
|
||||
"MemoryMB": 512
|
||||
}
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
|
||||
# Continuously submit the batch of jobs to Nomad
|
||||
while True:
|
||||
for job in jobs:
|
||||
client.jobs.create(job)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Postgresql
|
||||
```python
|
||||
import time
|
||||
import random
|
||||
import psycopg2
|
||||
|
||||
# Set up the connection parameters
|
||||
params = {
|
||||
'host': 'localhost',
|
||||
'port': '5432',
|
||||
'database': 'test',
|
||||
'user': 'postgres',
|
||||
'password': 'password'
|
||||
}
|
||||
|
||||
# Connect to the database
|
||||
conn = psycopg2.connect(**params)
|
||||
|
||||
# Set up the cursor
|
||||
cur = conn.cursor()
|
||||
|
||||
# Set up the table and payload to insert
|
||||
table_name = 'test'
|
||||
payload = 'a' * 1000000
|
||||
|
||||
# Set up the number of rows to insert
|
||||
num_rows = 10000
|
||||
|
||||
# Insert the rows
|
||||
start_time = time.time()
|
||||
for i in range(num_rows):
|
||||
cur.execute(f"INSERT INTO {table_name} (col) VALUES ('{payload}')")
|
||||
conn.commit()
|
||||
end_time = time.time()
|
||||
|
||||
# Calculate the throughput
|
||||
throughput = num_rows / (end_time - start_time)
|
||||
print(f'Throughput: {throughput} rows/second')
|
||||
|
||||
# Close the cursor and connection
|
||||
cur.close()
|
||||
conn.close()
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Prometheus
|
||||
```python
|
||||
import time
|
||||
import random
|
||||
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
|
||||
|
||||
# Set up the metrics registry
|
||||
registry = CollectorRegistry()
|
||||
|
||||
# Set up the metric to push
|
||||
gauge = Gauge('test_gauge', 'A test gauge', registry=registry)
|
||||
|
||||
# Set up the push gateway URL
|
||||
push_gateway = 'http://localhost:9091'
|
||||
|
||||
# Set up the number of pushes to send
|
||||
num_pushes = 10000
|
||||
|
||||
# Set up the metric value to push
|
||||
value = random.random()
|
||||
|
||||
# Push the metric
|
||||
start_time = time.time()
|
||||
for i in range(num_pushes):
|
||||
gauge.set(value)
|
||||
push_to_gateway(push_gateway, job='test_job', registry=registry)
|
||||
end_time = time.time()
|
||||
|
||||
# Calculate the throughput
|
||||
throughput = num_pushes / (end_time - start_time)
|
||||
print(f'Throughput: {throughput} pushes/second')
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Rabbit
|
||||
```python
|
||||
import pika
|
||||
import time
|
||||
|
||||
def send_message(channel, message):
|
||||
channel.basic_publish(exchange='', routing_key='test_queue', body=message)
|
||||
print("Sent message: ", message)
|
||||
|
||||
def main():
|
||||
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
|
||||
channel = connection.channel()
|
||||
channel.queue_declare(queue='test_queue')
|
||||
|
||||
for i in range(1000):
|
||||
send_message(channel, str(i))
|
||||
time.sleep(0.001)
|
||||
|
||||
connection.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
|
||||
### Ssh
|
||||
```python
|
||||
import paramiko
|
||||
|
||||
# Define servers array
|
||||
servers = ['server1', 'server2', 'server3']
|
||||
|
||||
for server in servers:
|
||||
public_key = paramiko.RSAKey(data=b'your-public-key-string')
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
ssh.connect(hostname='your-server-name', username='your-username', pkey=public_key)
|
||||
stdin, stdout, stderr = ssh.exec_command('your-command')
|
||||
print(stdout.read())
|
||||
ssh.close()
|
||||
|
||||
```
|
||||
|
||||
|
||||
### Vault
|
||||
```python
|
||||
import time
|
||||
import hvac
|
||||
|
||||
# Connect to the Vault instance
|
||||
client = hvac.Client()
|
||||
client.auth_approle(approle_id="approle-id", secret_id="secret-id")
|
||||
|
||||
# Continuously read and write secrets
|
||||
while True:
|
||||
# Write a secret
|
||||
client.write("secret/stress-test", value="secret value")
|
||||
|
||||
# Read the secret
|
||||
client.read("secret/stress-test")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
```
|
||||
|
||||
## Community
|
||||
|
||||
Please reach out for news, bugs, feature requests, and other issues via:
|
||||
|
||||
@@ -309,9 +309,11 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="btn-group" id="loadButtonGroup" role="group" aria-label="Basic example" style="overflow-x: scroll; width: 100%; padding-bottom: 2%; padding-top: 2%; scrollbar-color: dark;">
|
||||
<button type="button" id="loadCassandra" class="btn btn-light btn-sm" onclick="loadPreset('cassandra', 'python')">Cassandra</button>
|
||||
<button type="button" id="loadConsul" class="btn btn-light btn-sm" onclick="loadPreset('consul', 'python')">Consul</button>
|
||||
<button type="button" id="loadElasticsearch" class="btn btn-light btn-sm" onclick="loadPreset('elasticsearch', 'python')">Elasticsearch</button>
|
||||
<button type="button" id="loadEtcd3" class="btn btn-light btn-sm" onclick="loadPreset('etcd3', 'python')">Etcd3</button>
|
||||
<button type="button" id="loadGitlab" class="btn btn-light btn-sm" onclick="loadPreset('gitlab', 'python')">Gitlab</button>
|
||||
<button type="button" id="loadHttp" class="btn btn-light btn-sm" onclick="loadPreset('http', 'python')">Http</button>
|
||||
<button type="button" id="loadJira" class="btn btn-light btn-sm" onclick="loadPreset('jira', 'python')">Jira</button>
|
||||
<button type="button" id="loadKafka" class="btn btn-light btn-sm" onclick="loadPreset('kafka', 'python')">Kafka</button>
|
||||
@@ -321,6 +323,8 @@
|
||||
<button type="button" id="loadNomad" class="btn btn-light btn-sm" onclick="loadPreset('nomad', 'python')">Nomad</button>
|
||||
<button type="button" id="loadPostgresql" class="btn btn-light btn-sm" onclick="loadPreset('postgresql', 'python')">Postgresql</button>
|
||||
<button type="button" id="loadPrometheus" class="btn btn-light btn-sm" onclick="loadPreset('prometheus', 'python')">Prometheus</button>
|
||||
<button type="button" id="loadRabbit" class="btn btn-light btn-sm" onclick="loadPreset('rabbit', 'python')">Rabbit</button>
|
||||
<button type="button" id="loadSSH" class="btn btn-light btn-sm" onclick="loadPreset('SSH', 'python')">SSH</button>
|
||||
<button type="button" id="loadVault" class="btn btn-light btn-sm" onclick="loadPreset('vault', 'python')">Vault</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -459,9 +463,11 @@ experiments:
|
||||
<script>
|
||||
|
||||
loadPresetsCodeJson = `{
|
||||
"cassandra": "ZnJvbSBjYXNzYW5kcmEuY2x1c3RlciBpbXBvcnQgQ2x1c3Rlcgpmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludAppbXBvcnQgdGltZQoKZGVmIG1haW4oKToKICAgIGNsdXN0ZXIgPSBDbHVzdGVyKFsnMTI3LjAuMC4xJ10pCiAgICBzZXNzaW9uID0gY2x1c3Rlci5jb25uZWN0KCkKCiAgICBzZXNzaW9uLmV4ZWN1dGUoIkNSRUFURSBLRVlTUEFDRSBJRiBOT1QgRVhJU1RTIHRlc3QgV0lUSCBSRVBMSUNBVElPTiA9IHsgJ2NsYXNzJzogJ1NpbXBsZVN0cmF0ZWd5JywgJ3JlcGxpY2F0aW9uX2ZhY3Rvcic6IDEgfSIpCiAgICBzZXNzaW9uLmV4ZWN1dGUoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRlc3QubWVzc2FnZXMgKGlkIGludCBQUklNQVJZIEtFWSwgbWVzc2FnZSB0ZXh0KSIpCgogICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CiAgICAgICAgc2Vzc2lvbi5leGVjdXRlKCJJTlNFUlQgSU5UTyB0ZXN0Lm1lc3NhZ2VzIChpZCwgbWVzc2FnZSkgVkFMVUVTICglcywgJyVzJykiICUgKGksIHN0cihyYW5kaW50KDAsIDEwMDApKSkpCiAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkKCiAgICBjbHVzdGVyLnNodXRkb3duKCkKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCk=",
|
||||
"consul": "aW1wb3J0IHRpbWUKaW1wb3J0IGNvbnN1bAoKIyBDb25uZWN0IHRvIHRoZSBDb25zdWwgY2x1c3RlcgpjbGllbnQgPSBjb25zdWwuQ29uc3VsKCkKCiMgQ29udGludW91c2x5IHJlZ2lzdGVyIGFuZCBkZXJlZ2lzdGVyIGEgc2VydmljZQp3aGlsZSBUcnVlOgogICAgIyBSZWdpc3RlciB0aGUgc2VydmljZQogICAgY2xpZW50LmFnZW50LnNlcnZpY2UucmVnaXN0ZXIoCiAgICAgICAgInN0cmVzcy10ZXN0LXNlcnZpY2UiLAogICAgICAgIHBvcnQ9ODA4MCwKICAgICAgICB0YWdzPVsic3RyZXNzLXRlc3QiXSwKICAgICAgICBjaGVjaz1jb25zdWwuQ2hlY2soKS50Y3AoImxvY2FsaG9zdCIsIDgwODAsICIxMHMiKQogICAgKQoKICAgICMgRGVyZWdpc3RlciB0aGUgc2VydmljZQogICAgY2xpZW50LmFnZW50LnNlcnZpY2UuZGVyZWdpc3Rlcigic3RyZXNzLXRlc3Qtc2VydmljZSIpCgogICAgdGltZS5zbGVlcCgxKQoK",
|
||||
"elasticsearch": "aW1wb3J0IHRpbWUKZnJvbSBlbGFzdGljc2VhcmNoIGltcG9ydCBFbGFzdGljc2VhcmNoCgojIENvbm5lY3QgdG8gdGhlIEVsYXN0aWNzZWFyY2ggY2x1c3RlcgplcyA9IEVsYXN0aWNzZWFyY2goWyJsb2NhbGhvc3QiXSkKCiMgQ29udGludW91c2x5IGluZGV4IGFuZCBkZWxldGUgZG9jdW1lbnRzCndoaWxlIFRydWU6CiAgICAjIEluZGV4IGEgZG9jdW1lbnQKICAgIGVzLmluZGV4KGluZGV4PSJ0ZXN0LWluZGV4IiwgZG9jX3R5cGU9InRlc3QtdHlwZSIsIGlkPTEsIGJvZHk9eyJ0ZXN0IjogInRlc3QifSkKCiAgICAjIERlbGV0ZSB0aGUgZG9jdW1lbnQKICAgIGVzLmRlbGV0ZShpbmRleD0idGVzdC1pbmRleCIsIGRvY190eXBlPSJ0ZXN0LXR5cGUiLCBpZD0xKQoKICAgIHRpbWUuc2xlZXAoMSkKCg==",
|
||||
"etcd3": "aW1wb3J0IHRpbWUKaW1wb3J0IGV0Y2QzCgojIENvbm5lY3QgdG8gdGhlIGV0Y2QzIGNsdXN0ZXIKY2xpZW50ID0gZXRjZDMuY2xpZW50KCkKCiMgQ29udGludW91c2x5IHNldCBhbmQgZGVsZXRlIGtleXMKd2hpbGUgVHJ1ZToKICAgICMgU2V0IGEga2V5CiAgICBjbGllbnQucHV0KCIvc3RyZXNzLXRlc3Qta2V5IiwgInN0cmVzcyB0ZXN0IHZhbHVlIikKCiAgICAjIERlbGV0ZSB0aGUga2V5CiAgICBjbGllbnQuZGVsZXRlKCIvc3RyZXNzLXRlc3Qta2V5IikKCiAgICB0aW1lLnNsZWVwKDEpCgo=",
|
||||
"gitlab": "aW1wb3J0IGdpdGxhYgppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHRpbWUKCmdsID0gZ2l0bGFiLkdpdGxhYignaHR0cHM6Ly9naXRsYWIuZXhhbXBsZS5jb20nLCBwcml2YXRlX3Rva2VuPSdteV9wcml2YXRlX3Rva2VuJykKCmRlZiBjcmVhdGVfcHJvamVjdCgpOgogICAgcHJvamVjdCA9IGdsLnByb2plY3RzLmNyZWF0ZSh7J25hbWUnOiAnTXkgUHJvamVjdCd9KQogICAgcHJpbnQoIkNyZWF0ZWQgcHJvamVjdDogIiwgcHJvamVjdC5uYW1lKQoKZGVmIG1haW4oKToKICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgogICAgICAgIGNyZWF0ZV9wcm9qZWN0KCkKICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQ==",
|
||||
"http": "aW1wb3J0IHRpbWUKaW1wb3J0IHJlcXVlc3RzCgojIFNldCB1cCB0aGUgVVJMIHRvIHNlbmQgcmVxdWVzdHMgdG8KdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8nCgojIFNldCB1cCB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHNlbmQKbnVtX3JlcXVlc3RzID0gMTAwMDAKCiMgU2V0IHVwIHRoZSBwYXlsb2FkIHRvIHNlbmQKcGF5bG9hZCA9IHsna2V5JzogJ3ZhbHVlJ30KCiMgU2VuZCB0aGUgcmVxdWVzdHMKc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCmZvciBpIGluIHJhbmdlKG51bV9yZXF1ZXN0cyk6CiAgICByZXF1ZXN0cy5wb3N0KHVybCwganNvbj1wYXlsb2FkKQplbmRfdGltZSA9IHRpbWUudGltZSgpCgojIENhbGN1bGF0ZSB0aGUgdGhyb3VnaHB1dAp0aHJvdWdocHV0ID0gbnVtX3JlcXVlc3RzIC8gKGVuZF90aW1lIC0gc3RhcnRfdGltZSkKcHJpbnQoZidUaHJvdWdocHV0OiB7dGhyb3VnaHB1dH0gcmVxdWVzdHMvc2Vjb25kJykKCg==",
|
||||
"jira": "aW1wb3J0IHRpbWUKZnJvbSBqaXJhIGltcG9ydCBKSVJBCgojIENvbm5lY3QgdG8gdGhlIEppcmEgaW5zdGFuY2UKamlyYSA9IEpJUkEoCiAgICBzZXJ2ZXI9Imh0dHBzOi8vamlyYS5leGFtcGxlLmNvbSIsCiAgICBiYXNpY19hdXRoPSgidXNlciIsICJwYXNzd29yZCIpCikKCiMgQ29udGludW91c2x5IGNyZWF0ZSBhbmQgZGVsZXRlIGlzc3Vlcwp3aGlsZSBUcnVlOgogICAgIyBDcmVhdGUgYW4gaXNzdWUKICAgIGlzc3VlID0gamlyYS5jcmVhdGVfaXNzdWUoCiAgICAgICAgcHJvamVjdD0iUFJPSkVDVCIsCiAgICAgICAgc3VtbWFyeT0iU3RyZXNzIHRlc3QgaXNzdWUiLAogICAgICAgIGRlc2NyaXB0aW9uPSJUaGlzIGlzIGEgc3RyZXNzIHRlc3QgaXNzdWUuIiwKICAgICAgICBpc3N1ZXR5cGU9eyJuYW1lIjogIkJ1ZyJ9CiAgICApCgogICAgIyBEZWxldGUgdGhlIGlzc3VlCiAgICBqaXJhLmRlbGV0ZV9pc3N1ZShpc3N1ZSkKCiAgICB0aW1lLnNsZWVwKDEpCgo=",
|
||||
"kafka": "aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQoKZnJvbSBrYWZrYSBpbXBvcnQgS2Fma2FQcm9kdWNlcgoKIyBTZXQgdXAgdGhlIEthZmthIHByb2R1Y2VyCnByb2R1Y2VyID0gS2Fma2FQcm9kdWNlcihib290c3RyYXBfc2VydmVycz1bJ2xvY2FsaG9zdDo5MDkyJ10pCgojIFNldCB1cCB0aGUgdG9waWMgdG8gc2VuZCBtZXNzYWdlcyB0bwp0b3BpYyA9ICd0ZXN0JwoKIyBTZXQgdXAgdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBzZW5kCm51bV9tZXNzYWdlcyA9IDEwMDAwCgojIFNldCB1cCB0aGUgcGF5bG9hZCB0byBzZW5kCnBheWxvYWQgPSBiJ2EnICogMTAwMDAwMAoKIyBTZW5kIHRoZSBtZXNzYWdlcwpzdGFydF90aW1lID0gdGltZS50aW1lKCkKZm9yIGkgaW4gcmFuZ2UobnVtX21lc3NhZ2VzKToKICAgIHByb2R1Y2VyLnNlbmQodG9waWMsIHBheWxvYWQpCmVuZF90aW1lID0gdGltZS50aW1lKCkKCiMgQ2FsY3VsYXRlIHRoZSB0aHJvdWdocHV0CnRocm91Z2hwdXQgPSBudW1fbWVzc2FnZXMgLyAoZW5kX3RpbWUgLSBzdGFydF90aW1lKQpwcmludChmJ1Rocm91Z2hwdXQ6IHt0aHJvdWdocHV0fSBtZXNzYWdlcy9zZWNvbmQnKQoKIyBGbHVzaCBhbmQgY2xvc2UgdGhlIHByb2R1Y2VyCnByb2R1Y2VyLmZsdXNoKCkKcHJvZHVjZXIuY2xvc2UoKQo=",
|
||||
@@ -471,6 +477,8 @@ experiments:
|
||||
"nomad": "aW1wb3J0IHRpbWUKaW1wb3J0IG5vbWFkCgojIENyZWF0ZSBhIE5vbWFkIGNsaWVudApjbGllbnQgPSBub21hZC5Ob21hZCgpCgojIENyZWF0ZSBhIGJhdGNoIG9mIGpvYnMgdG8gc3VibWl0IHRvIE5vbWFkCmpvYnMgPSBbewogICAgIk5hbWUiOiAic3RyZXNzLXRlc3Qtam9iIiwKICAgICJUeXBlIjogImJhdGNoIiwKICAgICJEYXRhY2VudGVycyI6IFsiZGMxIl0sCiAgICAiVGFza0dyb3VwcyI6IFt7CiAgICAgICAgIk5hbWUiOiAic3RyZXNzLXRlc3QtdGFzay1ncm91cCIsCiAgICAgICAgIlRhc2tzIjogW3sKICAgICAgICAgICAgIk5hbWUiOiAic3RyZXNzLXRlc3QtdGFzayIsCiAgICAgICAgICAgICJEcml2ZXIiOiAicmF3X2V4ZWMiLAogICAgICAgICAgICAiQ29uZmlnIjogewogICAgICAgICAgICAgICAgImNvbW1hbmQiOiAic2xlZXAgMTAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJSZXNvdXJjZXMiOiB7CiAgICAgICAgICAgICAgICAiQ1BVIjogNTAwLAogICAgICAgICAgICAgICAgIk1lbW9yeU1CIjogNTEyCiAgICAgICAgICAgIH0KICAgICAgICB9XQogICAgfV0KfV0KCiMgQ29udGludW91c2x5IHN1Ym1pdCB0aGUgYmF0Y2ggb2Ygam9icyB0byBOb21hZAp3aGlsZSBUcnVlOgogICAgZm9yIGpvYiBpbiBqb2JzOgogICAgICAgIGNsaWVudC5qb2JzLmNyZWF0ZShqb2IpCiAgICB0aW1lLnNsZWVwKDEpCgo=",
|
||||
"postgresql": "aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQppbXBvcnQgcHN5Y29wZzIKCiMgU2V0IHVwIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMKcGFyYW1zID0gewogICAgJ2hvc3QnOiAnbG9jYWxob3N0JywKICAgICdwb3J0JzogJzU0MzInLAogICAgJ2RhdGFiYXNlJzogJ3Rlc3QnLAogICAgJ3VzZXInOiAncG9zdGdyZXMnLAogICAgJ3Bhc3N3b3JkJzogJ3Bhc3N3b3JkJwp9CgojIENvbm5lY3QgdG8gdGhlIGRhdGFiYXNlCmNvbm4gPSBwc3ljb3BnMi5jb25uZWN0KCoqcGFyYW1zKQoKIyBTZXQgdXAgdGhlIGN1cnNvcgpjdXIgPSBjb25uLmN1cnNvcigpCgojIFNldCB1cCB0aGUgdGFibGUgYW5kIHBheWxvYWQgdG8gaW5zZXJ0CnRhYmxlX25hbWUgPSAndGVzdCcKcGF5bG9hZCA9ICdhJyAqIDEwMDAwMDAKCiMgU2V0IHVwIHRoZSBudW1iZXIgb2Ygcm93cyB0byBpbnNlcnQKbnVtX3Jvd3MgPSAxMDAwMAoKIyBJbnNlcnQgdGhlIHJvd3MKc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCmZvciBpIGluIHJhbmdlKG51bV9yb3dzKToKICAgIGN1ci5leGVjdXRlKGYiSU5TRVJUIElOVE8ge3RhYmxlX25hbWV9IChjb2wpIFZBTFVFUyAoJ3twYXlsb2FkfScpIikKY29ubi5jb21taXQoKQplbmRfdGltZSA9IHRpbWUudGltZSgpCgojIENhbGN1bGF0ZSB0aGUgdGhyb3VnaHB1dAp0aHJvdWdocHV0ID0gbnVtX3Jvd3MgLyAoZW5kX3RpbWUgLSBzdGFydF90aW1lKQpwcmludChmJ1Rocm91Z2hwdXQ6IHt0aHJvdWdocHV0fSByb3dzL3NlY29uZCcpCgojIENsb3NlIHRoZSBjdXJzb3IgYW5kIGNvbm5lY3Rpb24KY3VyLmNsb3NlKCkKY29ubi5jbG9zZSgpCgo=",
|
||||
"prometheus": "aW1wb3J0IHRpbWUKaW1wb3J0IHJhbmRvbQpmcm9tIHByb21ldGhldXNfY2xpZW50IGltcG9ydCBDb2xsZWN0b3JSZWdpc3RyeSwgR2F1Z2UsIHB1c2hfdG9fZ2F0ZXdheQoKIyBTZXQgdXAgdGhlIG1ldHJpY3MgcmVnaXN0cnkKcmVnaXN0cnkgPSBDb2xsZWN0b3JSZWdpc3RyeSgpCgojIFNldCB1cCB0aGUgbWV0cmljIHRvIHB1c2gKZ2F1Z2UgPSBHYXVnZSgndGVzdF9nYXVnZScsICdBIHRlc3QgZ2F1Z2UnLCByZWdpc3RyeT1yZWdpc3RyeSkKCiMgU2V0IHVwIHRoZSBwdXNoIGdhdGV3YXkgVVJMCnB1c2hfZ2F0ZXdheSA9ICdodHRwOi8vbG9jYWxob3N0OjkwOTEnCgojIFNldCB1cCB0aGUgbnVtYmVyIG9mIHB1c2hlcyB0byBzZW5kCm51bV9wdXNoZXMgPSAxMDAwMAoKIyBTZXQgdXAgdGhlIG1ldHJpYyB2YWx1ZSB0byBwdXNoCnZhbHVlID0gcmFuZG9tLnJhbmRvbSgpCgojIFB1c2ggdGhlIG1ldHJpYwpzdGFydF90aW1lID0gdGltZS50aW1lKCkKZm9yIGkgaW4gcmFuZ2UobnVtX3B1c2hlcyk6CiAgICBnYXVnZS5zZXQodmFsdWUpCiAgICBwdXNoX3RvX2dhdGV3YXkocHVzaF9nYXRld2F5LCBqb2I9J3Rlc3Rfam9iJywgcmVnaXN0cnk9cmVnaXN0cnkpCmVuZF90aW1lID0gdGltZS50aW1lKCkKCiMgQ2FsY3VsYXRlIHRoZSB0aHJvdWdocHV0CnRocm91Z2hwdXQgPSBudW1fcHVzaGVzIC8gKGVuZF90aW1lIC0gc3RhcnRfdGltZSkKcHJpbnQoZidUaHJvdWdocHV0OiB7dGhyb3VnaHB1dH0gcHVzaGVzL3NlY29uZCcpCgo=",
|
||||
"rabbit": "aW1wb3J0IHBpa2EKaW1wb3J0IHRpbWUKCmRlZiBzZW5kX21lc3NhZ2UoY2hhbm5lbCwgbWVzc2FnZSk6CiAgICBjaGFubmVsLmJhc2ljX3B1Ymxpc2goZXhjaGFuZ2U9JycsIHJvdXRpbmdfa2V5PSd0ZXN0X3F1ZXVlJywgYm9keT1tZXNzYWdlKQogICAgcHJpbnQoIlNlbnQgbWVzc2FnZTogIiwgbWVzc2FnZSkKCmRlZiBtYWluKCk6CiAgICBjb25uZWN0aW9uID0gcGlrYS5CbG9ja2luZ0Nvbm5lY3Rpb24ocGlrYS5Db25uZWN0aW9uUGFyYW1ldGVycygnbG9jYWxob3N0JykpCiAgICBjaGFubmVsID0gY29ubmVjdGlvbi5jaGFubmVsKCkKICAgIGNoYW5uZWwucXVldWVfZGVjbGFyZShxdWV1ZT0ndGVzdF9xdWV1ZScpCgogICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CiAgICAgICAgc2VuZF9tZXNzYWdlKGNoYW5uZWwsIHN0cihpKSkKICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQoKICAgIGNvbm5lY3Rpb24uY2xvc2UoKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW4oKQ==",
|
||||
"SSH": "aW1wb3J0IHBhcmFtaWtvCgojIERlZmluZSBzZXJ2ZXJzIGFycmF5CnNlcnZlcnMgPSBbJ3NlcnZlcjEnLCAnc2VydmVyMicsICdzZXJ2ZXIzJ10KCmZvciBzZXJ2ZXIgaW4gc2VydmVyczoKICAgIHB1YmxpY19rZXkgPSBwYXJhbWlrby5SU0FLZXkoZGF0YT1iJ3lvdXItcHVibGljLWtleS1zdHJpbmcnKQogICAgc3NoID0gcGFyYW1pa28uU1NIQ2xpZW50KCkKICAgIHNzaC5zZXRfbWlzc2luZ19ob3N0X2tleV9wb2xpY3kocGFyYW1pa28uQXV0b0FkZFBvbGljeSgpKQogICAgc3NoLmNvbm5lY3QoaG9zdG5hbWU9J3lvdXItc2VydmVyLW5hbWUnLCB1c2VybmFtZT0neW91ci11c2VybmFtZScsIHBrZXk9cHVibGljX2tleSkKICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciA9IHNzaC5leGVjX2NvbW1hbmQoJ3lvdXItY29tbWFuZCcpCiAgICBwcmludChzdGRvdXQucmVhZCgpKQogICAgc3NoLmNsb3NlKCkK",
|
||||
"vault": "aW1wb3J0IHRpbWUKaW1wb3J0IGh2YWMKCiMgQ29ubmVjdCB0byB0aGUgVmF1bHQgaW5zdGFuY2UKY2xpZW50ID0gaHZhYy5DbGllbnQoKQpjbGllbnQuYXV0aF9hcHByb2xlKGFwcHJvbGVfaWQ9ImFwcHJvbGUtaWQiLCBzZWNyZXRfaWQ9InNlY3JldC1pZCIpCgojIENvbnRpbnVvdXNseSByZWFkIGFuZCB3cml0ZSBzZWNyZXRzCndoaWxlIFRydWU6CiAgICAjIFdyaXRlIGEgc2VjcmV0CiAgICBjbGllbnQud3JpdGUoInNlY3JldC9zdHJlc3MtdGVzdCIsIHZhbHVlPSJzZWNyZXQgdmFsdWUiKQoKICAgICMgUmVhZCB0aGUgc2VjcmV0CiAgICBjbGllbnQucmVhZCgic2VjcmV0L3N0cmVzcy10ZXN0IikKCiAgICB0aW1lLnNsZWVwKDEpCgo="
|
||||
}`;
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
gitlab
|
||||
cassandra-driver
|
||||
pika
|
||||
paramiko
|
||||
setuptools<58.0
|
||||
atlassian-api-py
|
||||
python-consul
|
||||
|
||||
Reference in New Issue
Block a user