{ "module": "networkmanager", "version": "1", "upgrade": { "policy": "record", "why": "the machine's network: a build that breaks it can cut the machine off from the bus, and then neither the gate's rollback nor a push reaches it (hq ADR 0236)" }, "slug": "nm", "requires": [ "wildcard-resolution" ], "capabilities": [ "package-manager", "service-manager", "uplink-networkmanager" ], "claims": [ { "name": "node-uplink", "scope": "node" } ], "build": { "artifacts": [ { "name": "tools", "kind": "bundle", "language": "go", "system": "arch", "from": "cmd/uplink-tools", "binary": "uplink-tools", "loads": [ "uplink-tools" ] }, { "name": "files", "kind": "archive", "from": "files" } ] }, "facts": { "resolvers": { "path": "/etc/resolv.conf", "template": "# Managed by the mesh, and written by the module holding this machine's uplink:\n# the program that manages the machine's network would otherwise rewrite this\n# file on every change of network, so its holder is the one that writes it\n# (novox/hq ADR 0117, ADR 0223). Replaced on every push; edit nothing here.\n#\n# Every resolver of the mesh, by address, and nothing else (novox/hq ADR 0223) \u2014\n# this machine's own first when it holds one, then the others by name. Each\n# answers the mesh's names from the same roster and forwards every other name, so\n# whichever answers first gives the one answer. There is no public resolver here:\n# a C library that asks every listed server at once and takes the first reply \u2014\n# musl, so every Alpine container \u2014 took a public resolver's \"no such name\" for\n# a mesh name and failed. A machine that reaches none of these has no names until\n# it does. Containers copy these lines from their machine.\n{{range index .Holders \"mesh-dns-resolver\"}}nameserver {{.Address}}\n{{end}}options timeout:1 attempts:2 edns0\n" } }, "resources": [ { "id": "package", "type": "package", "package": "networkmanager" }, { "id": "config", "type": "file", "path": "/etc/NetworkManager/conf.d/50-mesh.conf", "mode": "0644", "template": "files/50-mesh.conf" }, { "id": "service", "type": "service", "unit": "NetworkManager.service", "reload-on": [ "config" ] } ] }