)]}'
{
  "commit": "6dff6d6a57b999eb91f1b9cf956e2ebc18c2defd",
  "tree": "4db4fa350e81b0fc52db7cf81f4c620114b28d18",
  "parents": [
    "636032e843efcdef0716ed9956f40642d07b8d4c"
  ],
  "author": {
    "name": "Serge Bazanski",
    "email": "serge@monogon.tech",
    "time": "Fri Jan 28 18:15:14 2022 +0100"
  },
  "committer": {
    "name": "Sergiusz Bazanski",
    "email": "serge@monogon.tech",
    "time": "Wed Feb 23 16:15:54 2022 +0000"
  },
  "message": "m/n/roleserve: reactive service management\n\nBottom line up first: this starts etcd, the curator and Kubernetes on\nnodes that register into the cluster. Effectively, this is multi-node\nsupport.\n\nThis significantly refactors the node roleserver to start both the\ncontrol plane and Kubernetes on demand, based on roles assigned by the\ncluster (or due to bootstrapping a new cluster). Most importantly, we\npretty much remove all cluster-bootstrapping code from the node startup\nprocess, thereby making the first node and any subsequent nodes not go\nthrough different codepaths.\n\nIn addition, access to the cluster Curators is now also mediated via\nthe roleserver, which is the component aware whether the node code\nshould connect to the local curator (if the control plane is running) or\nto remote curators (if the control plane is not [yet] running).\n\nThis implementation is a bit verbose as we make heavy use of untyped\nEvent Values, and we add quite a few lines repeated of code to combine\ndata from different values into something that a goroutine can wait on.\nOnce Go 1.18 lands we should be able to make this code much nicer.\n\nThere\u0027s still a few things that need to be implemented for all flows to\nbe working fully (notably, we can end up with stale curator clients,\ncurator clients are not load balanced across multiple curators, and\ncluster directories for connecting to the curator do not get updated\nafter startup). However, these are all features that we should be able\nto easily implement once this lands.\n\nCurrently this is only covered by the e2e test. The individual workers\nwithin roleserver should be able to be independently tested, and this is\nsomething I plan on doing very soon as another change on top, while this\none is being reviewed.\n\nWith time, the two large startup components (the cluster \"enrolment\"\nmanager and the roleserver) have slightly lost their original purpose\nand their names aren\u0027t exactly fitting anymore. I might rename them in\nan upcoming change, if anyone has any good naming ideas I\u0027m all ears :).\n\nChange-Id: Iaf0fc9f6fdd2122e6aae19607be1648382063e66\nReviewed-on: https://review.monogon.dev/c/monogon/+/532\nReviewed-by: Lorenz Brun \u003clorenz@monogon.tech\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c1d48ae5dcdc2693a48a684b6529ca25a91be791",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/BUILD.bazel",
      "new_id": "5a7322263d047d7652666e9f17ebbcb28ab19907",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "45c11640d5e8010ff0bcc326bfd34cbf2a823797",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/BUILD.bazel",
      "new_id": "2002571c0797093c72eccd930ebb82e958cf7214",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/cluster/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "ea3bfee49d432cb2321aacbe7be80585baa31e52",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/cluster.go",
      "new_id": "d51d7d901e5477d9c44d9dbaa0d4c77f77eecef9",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/cluster/cluster.go"
    },
    {
      "type": "modify",
      "old_id": "c5167a587afdb277e929f3eb991a25b714f65ae0",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/cluster_bootstrap.go",
      "new_id": "d40f1793e3a8c199bc7ed0128ccbd467ea4d6437",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/cluster/cluster_bootstrap.go"
    },
    {
      "type": "modify",
      "old_id": "1a413c60177cfc5e153b3f34dcfee6b92d13d705",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/cluster_register.go",
      "new_id": "76458b845ccecbff5873ce0ba4d0f7f09fd7ae3d",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/cluster/cluster_register.go"
    },
    {
      "type": "delete",
      "old_id": "da898bfc19d96e11a0aa998250fd07330a3a534e",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/status.go",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "1251f2da33c94b79cf44c18663196c3224825c51",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/watcher.go",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "f253d0e8dcf204f673c93cf22226df9558678624",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/debug_service.go",
      "new_id": "4d4c672a055f081746243cc47766c724eb2e2253",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/debug_service.go"
    },
    {
      "type": "modify",
      "old_id": "34fa05e8c228a90c35d1e41f4ebc004e8bee4706",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/main.go",
      "new_id": "6528ab51fe1b1a2ffd100cdf7eaac541de20a9c0",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/main.go"
    },
    {
      "type": "modify",
      "old_id": "2d19bcf439cd1a81b1865b994e39d08e48f3a502",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/network/hostsfile/BUILD.bazel",
      "new_id": "5cfffc92e1b118073caa84fe596b1ba03700d4f9",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/network/hostsfile/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "e2d4d897b707873cfbc0de72fa27ad7116bad573",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/network/hostsfile/hostsfile.go",
      "new_id": "069616f6f14d5ef236205cc2e9cf2f79ca407aa4",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/network/hostsfile/hostsfile.go"
    },
    {
      "type": "modify",
      "old_id": "06e6e100b12c6d1acae3af9bf0c34129d864b3e0",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/BUILD.bazel",
      "new_id": "ec1d4432333b90a693446e4112181251d82fcf1c",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/BUILD.bazel"
    },
    {
      "type": "delete",
      "old_id": "842b8415a01e7fb39243bc8f6836172c490ede27",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/cluster_agent.go",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "027e0ec8e9cddc3389cf6f97f5ff9208885826fe",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/kubernetes_worker.go",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "557ed688c2cbf4ca7f5a66c7f2767d04bc44947b",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/roleserve.go",
      "new_id": "2c2e885e2b6a63822f96ff2bc5459ee006c8cad0",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/roleserve.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ab1250722fbb387566822f5298f6dc2a5a7c31e",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_bootstrapdata.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4f9d196c45e7e54c7e2b6606c9393be889159de4",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_clustermembership.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4334dc3432908bbe04735b1139270ed363acc978",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_kubernetes.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f095f2fa317f6ec03b25592a51c80917e1725145",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_node.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6193c5aee28de22e7577647dc2f53a5a8a14f1c9",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_controlplane.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "06e6735d7868924800bcedc353e70f4ebb70963b",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_kubernetes.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "77b3bf2192672181e5f1d3d374cf1aff8f88ef04",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_rolefetch.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cdeeb26efa41e521a696fe411f46d7a2d346e0fa",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_statuspush.go"
    },
    {
      "type": "modify",
      "old_id": "6630db80f308857698bd3c9c9369066104c2ae06",
      "old_mode": 33188,
      "old_path": "metropolis/test/e2e/BUILD.bazel",
      "new_id": "138fd4a7fb3bd466974d4e0981190d2011b7ba5a",
      "new_mode": 33188,
      "new_path": "metropolis/test/e2e/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "201ba92ad18529e9b3a5bb7a5f154b5a13fffb45",
      "old_mode": 33188,
      "old_path": "metropolis/test/e2e/main_test.go",
      "new_id": "80140a3aa62d99284240ff1b5994b30d788abad9",
      "new_mode": 33188,
      "new_path": "metropolis/test/e2e/main_test.go"
    }
  ]
}
