Skip to content

Commit

Permalink
Mass deployments script/workflow (#1289)
Browse files Browse the repository at this point in the history
* added batch_vms script

* added batch deployments

* Edit batch script

* added mass deployments workflow

* test workflow

* Revert "test workflow"

This reverts commit 7d95fa5.

* test workflow

* test workflow

* update workflow

* requested changes

---------

Co-authored-by: zaelgohary <[email protected]>
Co-authored-by: kassem <[email protected]>
  • Loading branch information
3 people authored Oct 30, 2023
1 parent 178c069 commit fab5cf7
Show file tree
Hide file tree
Showing 4 changed files with 182 additions and 0 deletions.
58 changes: 58 additions & 0 deletions .github/workflows/mass_deployments.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Mass Deployments

on:
schedule:
- cron: "0 1 * * *"
workflow_dispatch:

jobs:
mass-deployments:
runs-on: ubuntu-latest
strategy:
fail-fast: false
env:
NETWORK: main
RMB_PROXY: true
STORE_SECRET: secret
MNEMONIC: ${{ secrets.MNEMONIC }}
SSH_KEY: ${{ secrets.SSH_KEY }}

steps:
- uses: actions/checkout@v4
with:
ref: refs/tags/v2.2.0
- name: Set up node 18
uses: actions/setup-node@v3
with:
node-version: 18
cache: "yarn"

- name: Install deps
run: |
sudo apt-get update
sudo apt-get install -y git libtool tmux redis net-tools
- name: Install
run: |
yarn
lerna run build --no-private
- name: Run test mass deployments
id: massdeployments
continue-on-error: true
run: |
yarn run ts-node --project packages/grid_client/tsconfig-node.json packages/grid_client/scripts/mass_deployments.ts
- name: Cleanup - Delete all contracts
id: deleteall
run: |
yarn run ts-node --project packages/grid_client/tsconfig-node.json packages/grid_client/scripts/delete_all_contracts.ts
- name: Test Results
run: |
echo Batch Vms: ${{ steps.massdeployments.outcome }}
echo Delete all contracts: ${{ steps.deleteall.outcome }}
- name: Check test script status
if: |
steps.massdeployments.outcome != 'success'
run: exit 1
120 changes: 120 additions & 0 deletions packages/grid_client/scripts/mass_deployments.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import {
DiskModel,
FarmFilterOptions,
FilterOptions,
generateString,
MachineModel,
MachinesModel,
NetworkModel,
randomChoice,
} from "../src";
import { config, getClient } from "./client_loader";
import { log } from "./utils";

async function main() {
const grid3 = await getClient();

const errors: any = [];
let failedCount = 0;
let successCount = 0;

for (let i = 0; i < 100; i++) {
//Generating the resources
const cru = 1;
const mru = 256;
const diskSize = 5;
const rootFs = 1;
const vmName = "vm" + generateString(8);
const deploymentName = "dep" + generateString(8);
const publicIp = false;

// create network Object
const n = new NetworkModel();
n.name = "nw" + generateString(5);
n.ip_range = "10.238.0.0/16";

// create disk Object
const disk1 = new DiskModel();
disk1.name = "d" + generateString(5);
disk1.size = diskSize;
disk1.mountpoint = "/newDisk1";

//Farm Selection
const farms = await grid3.capacity.filterFarms({
nodeMRU: mru / 1024,
nodeSRU: diskSize + rootFs,
publicIp: publicIp,
availableFor: await grid3.twins.get_my_twin_id(),
randomize: true,
} as FarmFilterOptions);

if (farms.length < 1) {
throw new Error("No farms found");
}

//Node Selection
const nodes = await grid3.capacity.filterNodes({
cru: cru,
mru: mru / 1024,
sru: rootFs + diskSize,
availableFor: await grid3.twins.get_my_twin_id(),
farmId: +randomChoice(farms).farmId,
randomize: true,
} as FilterOptions);

if (nodes.length < 1) {
errors.push("Node not found");
failedCount++;
continue;
}

// create vm node Object
const vm = new MachineModel();
vm.name = vmName;
vm.node_id = nodes[0].nodeId;
vm.disks = [disk1];
vm.public_ip = publicIp;
vm.planetary = true;
vm.cpu = cru;
vm.memory = mru;
vm.rootfs_size = rootFs;
vm.flist = "https://hub.grid.tf/tf-official-apps/base:latest.flist";
vm.entrypoint = "/sbin/zinit init";
vm.env = {
SSH_KEY: config.ssh_key,
};

// create VMs Object
const vms = new MachinesModel();
vms.name = deploymentName;
vms.network = n;
vms.machines = [vm];
vms.metadata = "";
vms.description = "test deploying VMs via ts grid3 client";

// deploy vm
try {
await grid3.machines.deploy(vms);
successCount++;
} catch (error) {
log(error);
errors.push(error);
failedCount++;
continue;
}
}

log("Successful Deployments: " + successCount);
log("Failed Deployments: " + failedCount);

// List of failed deployments errors
log("Failed deployments errors: ");
for (let i = 0; i < errors.length; i++) {
log(errors[i]);
log("---------------------------------------------");
}

await grid3.disconnect();
}

main();
2 changes: 2 additions & 0 deletions packages/grid_client/src/modules/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,7 @@ class FilterOptions {
@Expose() @IsOptional() @IsBoolean() hasGPU?: boolean;
@Expose() @IsOptional() @IsBoolean() rentable?: boolean;
@Expose() @IsOptional() @IsInt() @Min(1) rentedBy?: number;
@Expose() @IsOptional() @IsBoolean() randomize?: boolean;
}

enum CertificationType {
Expand All @@ -597,6 +598,7 @@ class FarmFilterOptions {
@Expose() @IsOptional() @IsInt() page?: number;
@Expose() @IsOptional() @IsInt() size?: number;
@Expose() @IsOptional() @IsInt() farmId?: number;
@Expose() @IsOptional() @IsBoolean() randomize?: boolean;
}

class CalculatorModel {
Expand Down
2 changes: 2 additions & 0 deletions packages/grid_client/src/primitives/nodes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,7 @@ class Nodes {
has_gpu: options.hasGPU,
rented_by: options.rentedBy,
rentable: options.rentable,
randomize: options.randomize,
};
if (options.gateway) {
params["ipv4"] = true;
Expand Down Expand Up @@ -383,6 +384,7 @@ class Nodes {
node_rented_by: options.nodeRentedBy,
node_certified: options.nodeCertified,
farm_id: options.farmId,
randomize: options.randomize,
};
return Object.entries(params)
.map(param => param.join("="))
Expand Down

0 comments on commit fab5cf7

Please sign in to comment.