)]}'
{
  "log": [
    {
      "commit": "57b4375dc2763dbf8444a4786bd41b7ec1a8172b",
      "tree": "96c6ec6648426bd51bbf82573b2fbe28f2044868",
      "parents": [
        "73fc59541abfc457598cc5e62ae4d2c3b84065a1"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jul 13 19:17:48 2020 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jul 13 19:17:48 2020 +0200"
      },
      "message": "core/internal/cluster: implement multi-node clusters with \u0027golden ticket\u0027.\n\nAs we have fully ripped out all traces of the node management service or\nintegrity checks, we implement a stopgap system that allows us to\ncontinue developing multi-node clusters. This mechanism is enrolment\nusing \u0027golden tickets\u0027, which are protobuf messages that can be\ngenerated via the debug service on an existing cluster, and set on a new\nnode\u0027s EnrolmentConfig to bring that enrol that node into the cluster.\n\nAs this is a stopgap measure (waiting for better cluster lifecycle\ndesign), this is somewhat poorly implemented, with known issues:\n - odd enrolment flow that creates all certificates off-node and results\n   in some code duplication in the cluster manager and node debug\n   service\n - (more) assumptions that every node is both a kubernetes and etcd\n   member.\n - absolutely no protection against consensus loss due to even quorum\n   membership, repeated issuance of certificates\n - dependence on knowing the IP address of the new node ahead of time,\n   which is not something that our test harness supports well (or that\n   we want to rely on at all)\n\nTest Plan: part of existing multi-node tests\n\nX-Origin-Diff: phab/D591\nGitOrigin-RevId: 8f099e6ef37f8d47fb2272a3a14b25ed480e377a\n"
    },
    {
      "commit": "1ebd1e133bac1a7fe0d667ec2ac95f87f63c3701",
      "tree": "c84bca5f68d4bbe959006215bf4711050af04288",
      "parents": [
        "c2c7ad97b50194a550e77b875570ece90259f4ea"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jul 13 19:17:16 2020 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jul 13 19:17:16 2020 +0200"
      },
      "message": "core/internal/cluster: add new single-node cluster code\n\nThis adds a cluster library, that consists of:\n - a Node object that can be loaded from and saved into etcd,\n   representing a node of the cluster that can have different \u0027role\n   tags\u0027 assigned to it\n - a cluster Manager, that is responsible for bringing up the local node\n   into a cluster (by creaating a new cluster, enrolling into or joining a\n   cluster)\n\nThis also gets wired into core/cmd/init, and as such completes a chunk\nof The Refactor. This code should pass tests.\n\nTest Plan: this should work! should be covered by existing e2e tests.\n\nX-Origin-Diff: phab/D590\nGitOrigin-RevId: e88022164e4353249b29fc16849a02805f15dd49\n"
    },
    {
      "commit": "efdb6e9da9ed4d575afe72fde02a27817eca37c4",
      "tree": "b1e1a9bff4b1b91ada8da8673e042bfecda2f505",
      "parents": [
        "b7689bd2d426a5b5fa8375bb6e72aa853610707f"
      ],
      "author": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jul 13 17:19:27 2020 +0200"
      },
      "committer": {
        "name": "Serge Bazanski",
        "email": "serge@nexantic.com",
        "time": "Mon Jul 13 17:19:27 2020 +0200"
      },
      "message": "core/api: move to core/proto\n\nThis is keeping in line with conventions that protobuf files generally\nlive in a \u0027proto/\u0027 directory. Even without that, a lot of the protos in\nthere aren\u0027t actually part of an API, so keeping them in `api/` is a bit\nof a misnomer.\n\nWe also remove unused protos that were part of the old\nintegrity/lifecycle flow. Again, these will make a comeback.\n\nTest Plan: this should fail. part of a larger stack. D590 is the first tip of the stack that should work.\n\nX-Origin-Diff: phab/D588\nGitOrigin-RevId: 4a7af494810348f6bcabd49e63902b4c47e6ec35\n"
    },
    {
      "commit": "52f7f291c1987fe98bd10d3ad79d4a0c8772ad03",
      "tree": "eaf212647f9bab001e62bb35647255b5f107bd2e",
      "parents": [
        "3ff5af330857b2aadcdae9d9e6ca37b7e5d2c56e"
      ],
      "author": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Wed Jun 24 16:42:02 2020 +0200"
      },
      "committer": {
        "name": "Lorenz Brun",
        "email": "lorenz@nexantic.com",
        "time": "Wed Jun 24 16:42:02 2020 +0200"
      },
      "message": "Add nanoswitch and cluster testing\n\nAdds nanoswitch and the `switched-multi2` launch target to launch two Smalltown instances on a switched\nnetwork and enroll them into a single cluster. Nanoswitch contains a Linux bridge and a minimal DHCP server\nand connects to the two Smalltown instances over virtual Ethernet cables. Also moves out the DHCP client into\na package since nanoswitch needs it.\n\nTest Plan:\nManually tested using `bazel run //:launch -- switched-multi2` and observing that the second VM\n(whose serial port is mapped to stdout) prints that it is enrolled. Also validated by `bazel run //core/cmd/dbg -- kubectl get node -o wide` returning two ready nodes.\n\nX-Origin-Diff: phab/D572\nGitOrigin-RevId: 9f6e2b3d8268749dd81588205646ae3976ad14b3\n"
    }
  ]
}
