)]}'
{
  "log": [
    {
      "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": "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": "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": "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"
    }
  ]
}
