{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Key s444498-pzc-ssh-key-2 already in use: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAj15oTbXA0KGBw5V/76KXDgJZpLNrxUO/rTA0u0eRl1 wirus@wirusowylapek\n" ] } ], "source": [ "from hcloud import Client\n", "client = Client(\n", " token=\"KccUEiddxtzGoLWSNC3V8tylq7MYHCjdnShtgasQ8jSbHqCjGoaa6Rq7yoz4uS23\"\n", ")\n", "PREFIX = \"s444498\"\n", "YOUR_LOCAL_SSH_PUBKEY = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAj15oTbXA0KGBw5V/76KXDgJZpLNrxUO/rTA0u0eRl1 wirus@wirusowylapek\"\n", "try:\n", " ssh_key = client.ssh_keys.create(name=f\"{PREFIX}-pzc-ssh-key-2\", public_key=YOUR_LOCAL_SSH_PUBKEY)\n", " print(f\"Key {ssh_key.data_model.name} created: {ssh_key.data_model.public_key}\")\n", "except:\n", " ssh_key = client.ssh_keys.get_by_name(f\"{PREFIX}-pzc-ssh-key-2\")\n", " print(f\"Key {ssh_key.data_model.name} already in use: {ssh_key.data_model.public_key}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from hcloud.networks.domain import NetworkSubnet\n", "\n", "try:\n", " vnet = client.networks.create(\n", " name=f\"{PREFIX}-pzc-test-vnet\", \n", " ip_range=\"10.10.10.0/24\", \n", " subnets=[\n", " NetworkSubnet(ip_range=\"10.10.10.0/24\", network_zone=\"eu-central\", type=\"cloud\")\n", " ]\n", " )\n", " print(f\"Created network: {vnet.data_model.name} ({vnet.data_model.ip_range})\")\n", "except:\n", " vnet = client.networks.get_by_name(\n", " f\"{PREFIX}-pzc-test-vnet\", \n", " )\n", " print(f\"Network in use: {vnet.data_model.name} ({vnet.data_model.ip_range})\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from hcloud.locations.domain import Location\n", "from hcloud.images.domain import Image\n", "from hcloud.server_types.domain import ServerType\n", "\n", "cloud_init_mysql=r'''#cloud-config\n", "packages:\n", " - apt-transport-https\n", " - ca-certificates\n", " - curl\n", " - gnupg-agent\n", " - software-properties-common\n", "\n", "write_files:\n", " - path: /root/docker-compose.yml\n", " content: |\n", " version: '3.9'\n", "\n", " services:\n", " db:\n", " image: mysql:5.7\n", " restart: always\n", " environment:\n", " MYSQL_DATABASE: gitea\n", " MYSQL_USER: gitea\n", " MYSQL_PASSWORD: gitea\n", " MYSQL_ROOT_PASSWORD: gitea\n", " ports:\n", " - \"10.10.10.2:3306:3306\"\n", " volumes:\n", " - my-db:/var/lib/mysql\n", " phpmyadmin:\n", " image: phpmyadmin\n", " restart: always\n", " ports:\n", " - \"8080:80\"\n", " volumes:\n", " my-db: {}\n", "\n", "runcmd:\n", " - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -\n", " - add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\"\n", " - apt-get update -y\n", " - apt-get install -y docker-ce docker-ce-cli containerd.io\n", " - curl -L \"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose\n", " - chmod +x /usr/local/bin/docker-compose\n", " - systemctl start docker\n", " - systemctl enable docker\n", " - cd /root/ && docker-compose up -d\n", " '''\n", "\n", "for i in range(20):\n", "\n", " mysql_server = client.servers.create(\n", " name=f\"{PREFIX}-mysql-{i}\", \n", " server_type=ServerType(\"cx11\"), \n", " image=Image(name=\"ubuntu-20.04\"), \n", " ssh_keys=[ssh_key], \n", " networks=[vnet], \n", " location=Location(\"hel1\"), \n", " user_data=cloud_init_mysql\n", " )\n", "\n", " mysql_server.action.wait_until_finished()\n", " print(f\"Creating gitea server: {mysql_server.action.complete}\")" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'client' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn [1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m shared_volume \u001b[39m=\u001b[39m client\u001b[39m.\u001b[39mvolumes\u001b[39m.\u001b[39mcreate(\n\u001b[1;32m 2\u001b[0m size\u001b[39m=\u001b[39m\u001b[39m15\u001b[39m,\n\u001b[1;32m 3\u001b[0m name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mgitea-volume\u001b[39m\u001b[39m\"\u001b[39m)\n", "\u001b[0;31mNameError\u001b[0m: name 'client' is not defined" ] } ], "source": [] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Usuwanie 9 serwerów\n" ] } ], "source": [ "servers = client.servers.get_all()\n", "print(f\"Usuwanie {len(servers)} serwerów\")\n", "for s in servers:\n", " if s.data_model.name.startswith(PREFIX):\n", " action = client.servers.delete(s)\n", " print(f\"\\tUsuwanie serwera {s.data_model.name} ({s.data_model.public_net.ipv4.ip}): {action.data_model.status}\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.10.8 64-bit", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.8" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "767d51c1340bd893661ea55ea3124f6de3c7a262a8b4abca0554b478b1e2ff90" } } }, "nbformat": 4, "nbformat_minor": 2 }