)]}'
{
  "log": [
    {
      "commit": "b6308cd63854e3ef48e6afcc4c1f51e0c6ac1203",
      "tree": "ca6a5e292e05e420b7f04250c1e189511a6de3f7",
      "parents": [
        "a85c86f5b2d80251811f3a659fe9570694dd6056"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Oct 10 21:19:03 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Nov 16 18:09:16 2023 +0000"
      },
      "message": "cloud: split shepherd up\n\nChange-Id: I8e386d9eaaf17543743e1e8a37a8d71426910d59\nReviewed-on: https://review.monogon.dev/c/monogon/+/2213\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "0e74961fc03de5a439484ea5ec33e0fc52a22edd",
      "tree": "79097191057579098832aaafe30fceb2572a3bdc",
      "parents": [
        "9563673b5913420e143518b53d3134d4f29b404b"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Aug 07 17:42:59 2023 +0000"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Aug 08 12:06:53 2023 +0000"
      },
      "message": "cloud/bmaas/bmdb: Filter for machines based on provider\n\nCurrently the equinix shepherd tries to initialize our nodes from lumen,\nwhich of course is not correct. This change adds another parameter to\nthe queries and prevents that.\n\nChange-Id: Ib3f65e68403cb1b1282b80c1d494fb030a6d17b1\nReviewed-on: https://review.monogon.dev/c/monogon/+/2039\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "12c814085ac4b58922ca5d88ee571b8ee5ee7ece",
      "tree": "a392fb27ca7e53b9e528e1b1bba7125dcf7e3ac0",
      "parents": [
        "72a903fb7b60d629a8f25a2eadf34c7fa1948c10"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Jul 03 02:16:08 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Jul 03 13:55:41 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/cli: replace old argument handling and wrong loop\n\nChange-Id: I1c1657432296170a6a214d4a5907c86c8a3daeec\nReviewed-on: https://review.monogon.dev/c/monogon/+/1883\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "72a903fb7b60d629a8f25a2eadf34c7fa1948c10",
      "tree": "1189b483e1984a0e26fc20aac901d32264f3b1fc",
      "parents": [
        "521a83591361c7c0353944a1e742eb70e013cf9b"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Jun 27 15:49:36 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Jul 03 13:50:27 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/cli: Rename servers before deletion\n\nThis avoids collisions when redeploying servers\n\nChange-Id: I94c8c5e0b1b601ee6513f7baddb251053ce9430b\nReviewed-on: https://review.monogon.dev/c/monogon/+/1864\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "7e1c489409345f7212efdfcdfb105a5bbfd365c2",
      "tree": "be82408747ad02bdd08c6e3b5f0cacfa56d154ca",
      "parents": [
        "54e212a9914ad8003fc4e353f96651340d287c2d"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Jun 20 12:07:02 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Jun 20 12:27:20 2023 +0000"
      },
      "message": "c/shepherd/equinix/wrapngo: correct metric endpoint matcher\n\nAs stated in the error message its projects instead of project\n\nChange-Id: I4bee1fd7821d80280b314b8beaecfd88e48d81fd\nReviewed-on: https://review.monogon.dev/c/monogon/+/1822\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "4264b8c641109c05c4828b40cd2e01e686890903",
      "tree": "c890d91434d3be41b12291338c55c7d0baf61315",
      "parents": [
        "44cacd6bd39f0d70aab912e4d02f2ef2e453bc4d"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Jun 12 23:54:58 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Jun 13 09:40:46 2023 +0000"
      },
      "message": "cloud: replace klog with klog/v2\n\nChange-Id: Ie54ef593825fdc72409da38ab1a6244e94db9eb9\nReviewed-on: https://review.monogon.dev/c/monogon/+/1799\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "44cacd6bd39f0d70aab912e4d02f2ef2e453bc4d",
      "tree": "1ab3deae3f63c854bf4e2a89f25937ad062a6130",
      "parents": [
        "f9e3a6558f8725123e4cde38098e80c1167fb47c"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Jun 12 23:54:45 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Jun 13 09:40:46 2023 +0000"
      },
      "message": "cloud: validate that there are not positional arguments\n\nflag.Parse() parses arguments after boolean flags as positional argument.\nThis produces unexpected behaviour like this:\n```\n\u003e -a \"true\" -b \"true\"\na: false\n\n\u003e -a -b \"true\"\nb: true\n```\n\nChange-Id: I0f8555fc45acf305a5efd365a6eae03eb8930942\nReviewed-on: https://review.monogon.dev/c/monogon/+/1798\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "886c386f9acf84d2600878c61e5f1822a5fb8c1b",
      "tree": "e7c747d479e3d9854233894db49dc0a77c9ed43f",
      "parents": [
        "8180de90e9b90601cb87feac51426e7f39abc747"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue May 23 16:47:41 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue May 30 20:37:36 2023 +0000"
      },
      "message": "c/s/e/cli: add equinix api cli tooling\n\nThis is a fairly simple and hacked together cli but it does its job for basic maintenance tasks\n\nChange-Id: I043c12b930546f9405b9f8190326724122f1c0aa\nReviewed-on: https://review.monogon.dev/c/monogon/+/1704\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "8180de90e9b90601cb87feac51426e7f39abc747",
      "tree": "dfe750f650d7d3b16972f541e521d3e01f3898f2",
      "parents": [
        "7c38eef75b395b0515e34e2059091f8b0f8d3daf"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu May 11 19:45:37 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue May 30 20:37:36 2023 +0000"
      },
      "message": "c/s/e/wrapngo: add more api wrappers\n\nChange-Id: I826a799cccc609d95b1ea3bd933b019558690c59\nReviewed-on: https://review.monogon.dev/c/monogon/+/1556\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "dea7cd0e3d0aeee571f25209d76b52cc495a389f",
      "tree": "9aa755c3488f2db6f15327a3f0feef7147a434a3",
      "parents": [
        "c50f69427b1bb1816fa1ae8ecbdd1f00651f1e7f"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 26 13:58:17 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 27 12:34:43 2023 +0000"
      },
      "message": "cloud/shepherd: add equinix API metrics\n\nThis adds the following signals to our interaction with the Equinix API:\n\n 1. Latency\n 2. Traffic\n 3. Errors\n 4. Saturation\n\nChange-Id: Ic2d5e36a7a26ab906ac1c2fa6741ebf86b9e551a\nReviewed-on: https://review.monogon.dev/c/monogon/+/1606\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "c50f69427b1bb1816fa1ae8ecbdd1f00651f1e7f",
      "tree": "0db95195b72142bfbfd9054d2505d40c99ccc6a4",
      "parents": [
        "2bffb6fd2e9af6c4b0e79a1d69a4be1a3275ba40"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Apr 24 18:27:22 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 25 12:45:16 2023 +0000"
      },
      "message": "cloud/bmaas/bmdb: implement BMDB client metrics\n\nThis implements some basic BMDB metrics exported by any client code\nusing the BMDB.\n\nIt also enables their use in the Shepherd and BMSRV.\n\nChange-Id: I1d5e82fd2c34a7bfd42f37fad540d69f7b23f347\nReviewed-on: https://review.monogon.dev/c/monogon/+/1600\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "fbda89eeab18b56d0d9908829532e8c86c5e9e6b",
      "tree": "df7d6823c4315c4d69b21def8f7ad5cbe5b10d55",
      "parents": [
        "00cf57dd411af5f5c9aa21ced2a2d6c67729297c"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Apr 24 17:43:58 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 25 11:56:50 2023 +0000"
      },
      "message": "cloud: enable prometheus server\n\nThis makes cloud components start a Prometheus server on a separate port\n(:4243 by default) using either gRPC TLS credentials or plain HTTP.\n\nThe Prometheus server currently only export the standard Go/Process\nmetrics that the default Prometheus library exports.\n\nChange-Id: I9f2ae20c34446c0e10a946d4a93251764f5d2fce\nReviewed-on: https://review.monogon.dev/c/monogon/+/1599\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "00cf57dd411af5f5c9aa21ced2a2d6c67729297c",
      "tree": "bdd35f818c7aca6d2f0bac93501d7a56fcfc2911",
      "parents": [
        "afd3cf8bb5c99e9a8db23a5f435f7c1e31c96f91"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 20 11:19:00 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 25 11:56:50 2023 +0000"
      },
      "message": "cloud/bmaas: split ShepherdAccess into Shepherd{AgentStart,Recovery}\n\nThis effectively undoes our previous attempted consolidation of all\nShepherd accesses under one tag. We now use two separate tags for the\ntwo main Shepherd work processes, and mutually exclude them in SQL.\n\nWe do this so that we can see more clearly in work history (and in\ngeneral when processing machines) what the Shepherd is actually trying\nto do to a machine.\n\nThe downside of this implementation is that we now extend the BMDB/ETP\nmodel to being able to mutually exclude different processes. This is\neasy enough to express in SQL, but might make future generic modelling\nmore difficult.\n\nAn alternative would be to add an extra field to work/work history that\nacts as an informative field for operators to know the details of a work\nitem. We might still want to do that in the future. However, that field\nbeing freeform, we could not really rely on it for machine parsing.\n\nChange-Id: I9578ac000f6112514fe587e9fddf7e85671c6437\nReviewed-on: https://review.monogon.dev/c/monogon/+/1584\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "afd3cf8bb5c99e9a8db23a5f435f7c1e31c96f91",
      "tree": "092e34305b19af962cac644a1551822c436f1060",
      "parents": [
        "fac487481bf56e9510ff9a528c6729b2427d42b1"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 19 17:43:46 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 25 11:56:50 2023 +0000"
      },
      "message": "cloud/shepherd/equinix: update provider extra data\n\nThis adds a new sub-component to the Equinix Shepherd, the Updater.\n\nThe Updater periodically scans all machines backed by the Equinix\nprovider in the BMDB and queries the Equinix API for their status. The\nstatus then populates the new \u0027Provided\u0027 row data.\n\nChange-Id: I99657545aabfb13d71e165d36ce549c852feaf49\nReviewed-on: https://review.monogon.dev/c/monogon/+/1578\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "913a03a9eb220adfba3a9dd73bce1fba7ba5aeb1",
      "tree": "0fbe31e31c68dff595121473f8e30c2d508c2ddb",
      "parents": [
        "cd7343ed524944d16a46edbccfaf47a113394f5f"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Apr 24 15:57:02 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Mon Apr 24 19:16:26 2023 +0000"
      },
      "message": "c/s/e/manager: add sleep after reboot\n\nThis is required as Equinix doesn\u0027t reboot the machines synchronously\nduring the API call.\n\nChange-Id: Ie01b7ed5c57868e1c60a33af934a50e7338ce3ac\nReviewed-on: https://review.monogon.dev/c/monogon/+/1595\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "4969fd72246bf4d50436a22acbb1bdcdaa72a0e9",
      "tree": "5373a7a45fe6920443aa3639ce72aaa5c34c8ec2",
      "parents": [
        "1cd2696d61071b072a24dbe127d9d95874377d66"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 19 17:43:12 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 20 08:47:22 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/wrapngo: allow specifying options when getting device\n\nChange-Id: Ib1f4a88d1a45d9c0da1c56bd8ee21bf18302d9f8\nReviewed-on: https://review.monogon.dev/c/monogon/+/1576\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "20312b40ed4644c64581b4cc8d93a0fc0035fc71",
      "tree": "5b812982e0b5bfd7ef0c10659393d37ad0062d62",
      "parents": [
        "ff619354a126df5acffd78ee2f072a17d074e7ab"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 19 13:49:47 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 19 15:42:44 2023 +0000"
      },
      "message": "cloud/bmaas: implement exponential backoffs\n\nThis lets work fail with a proper exponential backoff. This is important\nnot just to not hammer external systems, but also to not end up with\nexteremely long and verbose historical logs for repeatedly failing\nprocesses.\n\nTo implement these, we have to slightly alter our model: instead of\nalways persisting backoffs for a given machine, we only persist them as\nlong as the last work for a given process has failed, deleting pertinent\nbackoffs (if any) on success. Then, the existence of a backoff item is\nused to calculate the value of the next backoff.\n\nThe change also introduces and explicit period, in seconds, to the\nbackoff item. It is currently implemented as a nullable field, but a\nfuture migration/update might make them non-nullable (and delete any\nstraggling backoffs that still don\u0027t have the period set).\n\nChange-Id: I958fcd957dae1156349224f07fb8d4836955d375\nReviewed-on: https://review.monogon.dev/c/monogon/+/1565\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "ff619354a126df5acffd78ee2f072a17d074e7ab",
      "tree": "a873c1feea47b816132f762178b8fb53e040955c",
      "parents": [
        "28fcddc459d020bebf32d1385e2c89fb86e42085"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Wed Apr 19 15:46:08 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Wed Apr 19 14:17:10 2023 +0000"
      },
      "message": "c/s/e/manager: add RID and hostname to log message\n\nChange-Id: I80f885461641b206e7a49165bade157599b405d9\nReviewed-on: https://review.monogon.dev/c/monogon/+/1570\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "28fcddc459d020bebf32d1385e2c89fb86e42085",
      "tree": "c8339f063a6b3c12dd64973698e4b49694635ee1",
      "parents": [
        "ae00468363b0006ecf1ae90ed3833bbe54820df5"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Wed Apr 19 15:34:25 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Wed Apr 19 14:12:57 2023 +0000"
      },
      "message": "c/s/e/manager: add UseProjectKeys flag\n\nWhen ProjectSSHKeys is set inside a DeviceCreateRequest, only the given SSH keys are added. For debug purposes it is useful to leave it empty and fall back to the default behaviour of equinix which adds all keys that are defined inside the project\n\nChange-Id: I5f4a0d4b3bdc4b183653afd715b4104af2c2a701\nReviewed-on: https://review.monogon.dev/c/monogon/+/1569\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "ae00468363b0006ecf1ae90ed3833bbe54820df5",
      "tree": "3dff4cdf264bed17e66f7aed2c8085b67738104d",
      "parents": [
        "86a714d6e81bb524dc59fda7baa63b45e7180489"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 18 13:28:48 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 19 13:55:01 2023 +0000"
      },
      "message": "cloud/shepherd/equinix: implement recoverer\n\nThis implements basic recovery functionality for \u0027stuck\u0027 agents. The\nshepherd will notice machines with a agent that either never sent a\nheartbeat, or stopped sending heartbeats, and will remove their agent\nstarted tags and reboot the machine. Then, the main agent start logic\nshould kick in again.\n\nMore complex recovery flows can be implemented later, this will do for\nnow.\n\nChange-Id: I2c1b0d0465e4e302cdecce950a041581c2dc8548\nReviewed-on: https://review.monogon.dev/c/monogon/+/1560\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "86a714d6e81bb524dc59fda7baa63b45e7180489",
      "tree": "1d1cadea7a23d82d40144e3d9988d31fbe26270f",
      "parents": [
        "42f13465aa2a2b57c2971d20219f15aeb2a21f3e"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Apr 17 15:54:21 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Apr 19 13:55:01 2023 +0000"
      },
      "message": "cloud/shepherd/equinix: split out control loop logic\n\nThis is in preparation for implementing the recoverer/rebooter inside\nthe shepherd.\n\nIn the future this will likely be split away from from the shepherd and\nend up as a generic bmdb library. But let\u0027s first wait for concrete\nusages outside of the shepherd component.\n\nChange-Id: I69b9a2e913dcefa2c6558e271b6853285c6120b3\nReviewed-on: https://review.monogon.dev/c/monogon/+/1559\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "0d58cb9592852ddb9cc767a33958c65b5eab8deb",
      "tree": "dffec8a2fc8278408f3d22e35588b3ce024044cf",
      "parents": [
        "d1b174725e1fd9c40201bbd6047f6bc0755c8e34"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Apr 17 18:38:56 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 18 16:13:46 2023 +0000"
      },
      "message": "c/shepherd/equinix/wrapngo: isolate live API tests\n\nSo far all wrapngo tests were fired directly against a live Equinix\nendpoint, and the entire test harness was skipped if such an endpoint\nwas not configured/available.\n\nThis consolidates all of the live tests into a single test with\nsub-tests, and only that test is skipped if endpoint data is not\nprovided.\n\nThis will in turn allow us to have some unit/regression tests for\nwrapngo that do not need to contact the live Equinix API.\n\nChange-Id: I2590a41b935b5d5417520d7510025f6289cece63\nReviewed-on: https://review.monogon.dev/c/monogon/+/1557\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "d1b174725e1fd9c40201bbd6047f6bc0755c8e34",
      "tree": "ea8bc7eddf418d30ed27e7b1847d0152b70abbb3",
      "parents": [
        "ea94663006eb84ab97d2097e989d5169c75deb2a"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Apr 18 03:49:12 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Apr 18 14:21:21 2023 +0000"
      },
      "message": "c/s/e/wrapngo: workaround for unstable pagination\n\nThe packngo API doesnt have a stable pagination. This leads to duplicate entries and invalid lists. To increase the chance of having a correct response, we sort the list by hostname and pray to the RNG gods\n\nChange-Id: Ie31b823eac8a3fef260ea56861894976b3354d71\nReviewed-on: https://review.monogon.dev/c/monogon/+/1555\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "ea94663006eb84ab97d2097e989d5169c75deb2a",
      "tree": "e51c56de04ff5aaf04ec77c2d09b10543f58206c",
      "parents": [
        "b44a5076cec5a8863ae9ff26fd641d6b62911aac"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Apr 18 03:46:58 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Tue Apr 18 14:21:21 2023 +0000"
      },
      "message": "c/s/e/manager: print hardware reservation stats\n\nThis also removes a lookup to check if the machine is managed by the shepherd. We can skip that since already know that the hardware reservation has a device attached.\n\nChange-Id: Ic732a8152316cf5ba83e980451fd2a4b0f778d99\nReviewed-on: https://review.monogon.dev/c/monogon/+/1554\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "b78919e7708904f042756e280015786caecf668c",
      "tree": "1593fe40c696e32ebcb6c509d34cb279ea4c08aa",
      "parents": [
        "e4a4ce1dbbc8abc8a0817f80fcb27437a9e6ca63"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Apr 17 15:51:58 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Apr 18 07:40:55 2023 +0000"
      },
      "message": "cloud/shepherd/wrapngo: don\u0027t crash on remote API errors\n\nA regression test for this will come in a subsequent CL.\n\nChange-Id: Ic2c1f872bcea510bef7adbdb6ed86f504733ecca\nReviewed-on: https://review.monogon.dev/c/monogon/+/1549\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "23fa5c1f021739297bfc3def8514f3e1324503b7",
      "tree": "f4600843b28aedf574563b55b137f94e168e39bc",
      "parents": [
        "8867b2ccc6d991abe4a765f5db4124e5f4c2a1a5"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Apr 06 20:34:50 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Apr 06 22:07:41 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/manager: embed takeover agent\n\nChange-Id: Ibd3841dfe9d6e40042b1812d335eec3025841db1\nReviewed-on: https://review.monogon.dev/c/monogon/+/1510\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "8867b2ccc6d991abe4a765f5db4124e5f4c2a1a5",
      "tree": "63192b53756e83a9aa76a2e728b0c2f06c79eab3",
      "parents": [
        "51987d6cca3b619f365f978c1ce09012cdf23276"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Apr 06 15:09:30 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Apr 06 21:48:42 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/manager: embed test_agent\n\nChange-Id: Iee2c1f68350412a49fae9fe2b80ab70a12b1a618\nReviewed-on: https://review.monogon.dev/c/monogon/+/1505\nTested-by: Jenkins CI\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\n"
    },
    {
      "commit": "51987d6cca3b619f365f978c1ce09012cdf23276",
      "tree": "5790faeb4e218f790e1efc2c03c9fa7a94dea334",
      "parents": [
        "752fda3e5255bd6e0f08c4e2498b0bf7af15c321"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 06 16:35:35 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Apr 06 21:48:42 2023 +0000"
      },
      "message": "c/shepherd/equinix/manager: add CA certificate path flag\n\nThis lets us specify a CA certificate that the Agent will then use to\nverify the endpoint it\u0027s connecting to.\n\nChange-Id: Iaa85caa156cbe8ad45ba6a3b8a820a40e15e012c\nReviewed-on: https://review.monogon.dev/c/monogon/+/1509\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "77b11d3b440efb95cd29cbca5d56e63e5951ca17",
      "tree": "c35a9c7b84c20ccb0d8f3cebf17272649ae34052",
      "parents": [
        "2fd37ea54317f23add3b8baa37ce3eaf33253479"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 06 14:43:19 2023 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Apr 06 12:53:42 2023 +0000"
      },
      "message": "c/shepherd/equinix: fix redundant agent path error\n\nObserved in prod:\n\ninvalid value \"/app/cloud/shepherd/equinix/manager/test_agent_/test_agent\" for flag -agent_executable_path: could not read -agent_executable_path: open /app/cloud/shepherd/equinix/manager/test_agent_/test_agent: no such file or directory\n\nThis changes it to:\n\ninvalid value \"/app/cloud/shepherd/equinix/manager/test_agent_/test_agent\" for flag -agent_executable_path: could not read: open /app/cloud/shepherd/equinix/manager/test_agent_/test_agent: no such file or directory\n\nChange-Id: I40a7bd97b37dd8cb72020d69ea4eabd6b3055198\nReviewed-on: https://review.monogon.dev/c/monogon/+/1503\nTested-by: Jenkins CI\nReviewed-by: Tim Windelschmidt \u003ctim@monogon.tech\u003e\n"
    },
    {
      "commit": "f50c31ff196d2d5ae6c73d732e3d241020cf7882",
      "tree": "48024296472f235ea7cbd5b76c887fec1a2d7bff",
      "parents": [
        "ff95552a751ca68fb3834b7cdb101f1b7c421a05"
      ],
      "author": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Mar 30 15:04:03 2023 +0200"
      },
      "committer": {
        "name": "Tim Windelschmidt",
        "email": "tim@monogon.tech",
        "time": "Thu Mar 30 14:43:15 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/manager/server: add container_image\n\nChange-Id: I1788eb56ecb08394b3f82f9dd0973b18c2e72498\nReviewed-on: https://review.monogon.dev/c/monogon/+/1443\nReviewed-by: Serge Bazanski \u003cserge@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "5b8b86069584664f8be69467290d7cae7d000b8d",
      "tree": "9eae59a652bcafb11e017a61db58e41c67f42977",
      "parents": [
        "2d284b5718ad0948e7ef5afc5905f36701f4a3ab"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Mar 09 17:22:21 2023 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Mar 09 20:09:06 2023 +0000"
      },
      "message": "cloud: use machine_id for all agent communication\n\nThe original proto used provider-scoped provider_ids, these are being\nreplaced by  a single machine_id, assigned by the BMaaS service.\nIts API works in terms of machine_id, not provider_id (see\nAgentHeartbeatRequest), so this needs to be changed.\n\nChange-Id: If13942d02a8ac0e2901c549a92a67b6b10a1e196\nReviewed-on: https://review.monogon.dev/c/monogon/+/1263\nTested-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "595dfe95bd3dd0d4e7eb81b3d9552fc981073fc2",
      "tree": "981234291526796596d324c3abf0eece634d3940",
      "parents": [
        "8733950f8ee7a47141c92b5ad82e2fe87471a7a2"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Tue Feb 21 19:13:02 2023 +0100"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@monogon.tech",
        "time": "Thu Mar 09 20:09:06 2023 +0000"
      },
      "message": "c/a/api: reorganize and add AgentInit\n\nMove hardware reporting-related data into a separate file for better\norganization.\n\nAlso add an AgentInit message which will be used to pass data to the\nAgent.\n\nChange-Id: I1eecbd5a78da03170651f76f9f24e134dddaca4f\nReviewed-on: https://review.monogon.dev/c/monogon/+/1140\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n"
    },
    {
      "commit": "7448f28cad048a5a7c2fad432dbe31ef91a73867",
      "tree": "17581107a23c8b0002b33b44015ba90ab0a886bf",
      "parents": [
        "9eb903d18540192d22c626e80745eed0630930e6"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 20 14:15:51 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Feb 23 09:37:40 2023 +0000"
      },
      "message": "cloud/equinix/wrapngo: implement configurable parallelism\n\nSetting this to a value higher than \u00271\u0027 is beneficial in case we want to\ncall some fast endpoints while we\u0027re executing a long-standing hardware\nreservation list call. This can happen in the Equinix Shepherd.\n\nChange-Id: I57cf416de1e5fe23cb28248ddf8bb1b2ad73b6a8\nReviewed-on: https://review.monogon.dev/c/monogon/+/1134\nTested-by: Jenkins CI\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "9eb903d18540192d22c626e80745eed0630930e6",
      "tree": "55c135fe20ef12988b4efa992d30fa89d2e1edf7",
      "parents": [
        "1038313b7a4f929dcd942a3ac24d371877ee8ce7"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 20 14:28:19 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Feb 23 09:01:29 2023 +0000"
      },
      "message": "cloud/shepherd/equinix: implement initializer parallelism\n\nThis adds a flag which allows starting multiple initializers in\nparallel, sharing the same SSH key/config and API rate limiting.\n\nChange-Id: I415e855d9b649fac258e25d884cac17f895c91c0\nReviewed-on: https://review.monogon.dev/c/monogon/+/1135\nTested-by: Jenkins CI\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    },
    {
      "commit": "1038313b7a4f929dcd942a3ac24d371877ee8ce7",
      "tree": "7d0233b57288509591d1df4f4d5d3ab3e3ac595e",
      "parents": [
        "48e9bab7237448c7fabfef1721f2ac48e6b77822"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 20 15:39:45 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Tue Feb 21 09:15:20 2023 +0000"
      },
      "message": "cloud: rename ShepherdInstall to ShepherdAccess and clean up other \u0027installation\u0027 references\n\nShepherdInstall should\u0027ve been called ShepherdAgentStart from the\nbeginning, but got named incorrectly because of a momentary lapse of\nreason.\n\nInstead of doing a rename, we widen that Process to anything that\ninvolved the Shepherds directly accessing the underlying provider\nmachines, be it starting the agent, trying to fix the machine, or\nrebooting a machine. This wide meaning makes sure no two shepherds work\non the same machine ever, regardless of the actual workflow each one is\nperforming.\n\nChange-Id: Ic247919d1bcf1c5ec9fcf7125f17b90413068ed5\nReviewed-on: https://review.monogon.dev/c/monogon/+/1138\nTested-by: Jenkins CI\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n"
    },
    {
      "commit": "7762831b4c4d68f77bdc9fbf1f812390d970a4b3",
      "tree": "bc89893327ed28301aaf53cfb31560ba56e39db7",
      "parents": [
        "9e7875c98f78c2ee0419c043211785159e1539de"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Wed Feb 15 23:33:22 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 20 14:45:38 2023 +0000"
      },
      "message": "cloud/bmaas: implement webug\n\nWebug (pronounced: /wɛbʌɡ/, not /wiːbʌɡ/) is a web debug interface for\nBMDB, inspired by the great web debug interfaces of old.\n\nIt uses the new BMDB reflection API to access most\nmachine/tag/work/backoff information, plus sqlc queries to access\nsession information.\n\nChange-Id: If0e65b6fc33ad92baef9c6d98333f90a02efa1b3\nReviewed-on: https://review.monogon.dev/c/monogon/+/1132\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "caa1208a769351f70e55369e908fa3e823f72090",
      "tree": "47f3c8bd9174b3b610e07f0e3b0cd2a62151e1a8",
      "parents": [
        "6a058e7e0c84306cb0470f2641102a284f98fc0b"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Thu Feb 16 14:54:04 2023 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 20 12:12:19 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/manager: init\n\nThis adds implementation managing Equinix Metal server lifecycle as\npart of the BMaaS project.\n\nCo-authored-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\nSupersedes: https://review.monogon.dev/c/monogon/+/990\nChange-Id: I5537b2d07763985ad27aecac544ed19f933d6727\nReviewed-on: https://review.monogon.dev/c/monogon/+/1129\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\nTested-by: Jenkins CI\n"
    },
    {
      "commit": "6a058e7e0c84306cb0470f2641102a284f98fc0b",
      "tree": "13b4ef9a4db8275a51bbaa5026f5d926efe67b3f",
      "parents": [
        "424e201b27ce334714d870c0ad0c6e9046a14981"
      ],
      "author": {
        "name": "Mateusz Zalega",
        "email": "mateusz@monogon.tech",
        "time": "Wed Nov 30 18:03:07 2022 +0100"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@monogon.tech",
        "time": "Mon Feb 20 12:12:19 2023 +0000"
      },
      "message": "cloud/shepherd/equinix/wrapngo: init\n\nThis adds a wrapper extending packngo for use with the upcoming\nShepherd implementation.\n\nSupersedes: https://review.monogon.dev/c/monogon/+/989\nChange-Id: I55d1a609a8b5241704c5fe4ce8c2294122cfa0c8\nReviewed-on: https://review.monogon.dev/c/monogon/+/1128\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\nTested-by: Jenkins CI\nReviewed-by: Mateusz Zalega \u003cmateusz@monogon.tech\u003e\n"
    }
  ]
}
