difftreelog
feat better logs
in: trunk
18 files changed
Cargo.lockdiffbeforeafterboth17 "generic-array",17 "generic-array",18]18]1920[[package]]21name = "aead"22version = "0.4.3"23source = "registry+https://github.com/rust-lang/crates.io-index"24checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"25dependencies = [26 "generic-array",27]192820[[package]]29[[package]]21name = "aes"30name = "aes"28 "cipher 0.2.5",37 "cipher 0.2.5",29]38]3940[[package]]41name = "aes"42version = "0.7.5"43source = "registry+https://github.com/rust-lang/crates.io-index"44checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"45dependencies = [46 "cfg-if",47 "cipher 0.3.0",48 "cpufeatures 0.2.1",49 "ctr 0.8.0",50 "opaque-debug",51]305231[[package]]53[[package]]32name = "aes-ctr"54name = "aes-ctr"37 "aes-soft",59 "aes-soft",38 "aesni",60 "aesni",39 "cipher 0.2.5",61 "cipher 0.2.5",40 "ctr",62 "ctr 0.6.0",41]63]426443[[package]]65[[package]]66source = "registry+https://github.com/rust-lang/crates.io-index"88source = "registry+https://github.com/rust-lang/crates.io-index"67checksum = "16d68559c3ef40bc0fd7c3d2b156743e9387d477a68733b61dff0f6a5004ad58"89checksum = "16d68559c3ef40bc0fd7c3d2b156743e9387d477a68733b61dff0f6a5004ad58"68dependencies = [90dependencies = [69 "aes",91 "aes 0.6.0",70 "aes-ctr",92 "aes-ctr",71 "age-core",93 "age-core 0.6.0",72 "base64",94 "base64",73 "bcrypt-pbkdf",95 "bcrypt-pbkdf 0.6.1",74 "bech32",96 "bech32",75 "block-modes",97 "block-modes 0.7.0",76 "c2-chacha",98 "c2-chacha",77 "chacha20poly1305",99 "chacha20poly1305 0.7.1",78 "cookie-factory",100 "cookie-factory",79 "curve25519-dalek",101 "curve25519-dalek",80 "hkdf",102 "hkdf",81 "hmac",103 "hmac 0.11.0",82 "i18n-embed",104 "i18n-embed 0.12.1",83 "i18n-embed-fl",105 "i18n-embed-fl 0.5.0",84 "lazy_static",106 "lazy_static",85 "nom",107 "nom 6.2.1",86 "num-traits",108 "num-traits",87 "pin-project",109 "pin-project",88 "rand 0.7.3",110 "rand 0.7.3",89 "rsa",111 "rsa 0.3.0",90 "rust-embed",112 "rust-embed 5.9.0",91 "scrypt",113 "scrypt 0.7.0",92 "secrecy",114 "secrecy 0.7.0",93 "sha2",115 "sha2 0.9.5",94 "subtle",116 "subtle",95 "x25519-dalek",117 "x25519-dalek",96 "zeroize",118 "zeroize",97]119]120121[[package]]122name = "age"123version = "0.7.0"124source = "registry+https://github.com/rust-lang/crates.io-index"125checksum = "cf320f937ccd0eb7f63450be0f071586cd918cd86785303ec1d052a3e243b550"126dependencies = [127 "aes 0.7.5",128 "age-core 0.7.0",129 "base64",130 "bcrypt-pbkdf 0.7.2",131 "bech32",132 "block-modes 0.8.1",133 "chacha20poly1305 0.9.0",134 "cookie-factory",135 "curve25519-dalek",136 "hkdf",137 "hmac 0.11.0",138 "i18n-embed 0.13.1",139 "i18n-embed-fl 0.6.1",140 "lazy_static",141 "nom 7.1.0",142 "num-traits",143 "pin-project",144 "rand 0.7.3",145 "rand 0.8.4",146 "rsa 0.5.0",147 "rust-embed 6.3.0",148 "scrypt 0.8.1",149 "sha2 0.9.5",150 "subtle",151 "x25519-dalek",152 "zeroize",153]9815499[[package]]155[[package]]100name = "age-core"156name = "age-core"104dependencies = [160dependencies = [105 "base64",161 "base64",106 "c2-chacha",162 "c2-chacha",107 "chacha20poly1305",163 "chacha20poly1305 0.7.1",108 "cookie-factory",164 "cookie-factory",109 "hkdf",165 "hkdf",110 "nom",166 "nom 6.2.1",111 "rand 0.7.3",167 "rand 0.7.3",112 "secrecy",168 "secrecy 0.7.0",113 "sha2",169 "sha2 0.9.5",114]170]171172[[package]]173name = "age-core"174version = "0.7.0"175source = "registry+https://github.com/rust-lang/crates.io-index"176checksum = "a485102f6c7a23e0666b169ba77c9ff6c6d249c05395c379be3cbab48a948e84"177dependencies = [178 "base64",179 "chacha20poly1305 0.9.0",180 "cookie-factory",181 "hkdf",182 "nom 7.1.0",183 "rand 0.8.4",184 "secrecy 0.8.0",185 "sha2 0.9.5",186]115187116[[package]]188[[package]]117name = "aho-corasick"189name = "aho-corasick"131 "winapi",203 "winapi",132]204]205206[[package]]207name = "ansi_term"208version = "0.12.1"209source = "registry+https://github.com/rust-lang/crates.io-index"210checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"211dependencies = [212 "winapi",213]133214134[[package]]215[[package]]135name = "anyhow"216name = "anyhow"136version = "1.0.44"217version = "1.0.44"137source = "registry+https://github.com/rust-lang/crates.io-index"218source = "registry+https://github.com/rust-lang/crates.io-index"138checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"219checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"220221[[package]]222name = "async-trait"223version = "0.1.52"224source = "registry+https://github.com/rust-lang/crates.io-index"225checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"226dependencies = [227 "proc-macro2",228 "quote",229 "syn",230]139231140[[package]]232[[package]]141name = "atty"233name = "atty"160source = "registry+https://github.com/rust-lang/crates.io-index"252source = "registry+https://github.com/rust-lang/crates.io-index"161checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"253checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"254255[[package]]256name = "base58"257version = "0.2.0"258source = "registry+https://github.com/rust-lang/crates.io-index"259checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581"162260163[[package]]261[[package]]164name = "base64"262name = "base64"165version = "0.13.0"263version = "0.13.0"166source = "registry+https://github.com/rust-lang/crates.io-index"264source = "registry+https://github.com/rust-lang/crates.io-index"167checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"265checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"266267[[package]]268name = "base64ct"269version = "1.1.1"270source = "registry+https://github.com/rust-lang/crates.io-index"271checksum = "e6b4d9b1225d28d360ec6a231d65af1fd99a2a095154c8040689617290569c5c"168272169[[package]]273[[package]]170name = "bcrypt-pbkdf"274name = "bcrypt-pbkdf"171version = "0.6.2"275version = "0.6.1"172source = "registry+https://github.com/rust-lang/crates.io-index"276source = "registry+https://github.com/rust-lang/crates.io-index"173checksum = "7c38c03b9506bd92bf1ef50665a81eda156f615438f7654bffba58907e6149d7"277checksum = "12621b8e87feb183a6e5dbb315e49026b2229c4398797ee0ae2d1bc00aef41b9"174dependencies = [278dependencies = [175 "blowfish",279 "blowfish",176 "crypto-mac",280 "crypto-mac",177 "pbkdf2",281 "pbkdf2 0.8.0",178 "sha2",282 "sha2 0.9.5",179 "zeroize",283 "zeroize",180]284]285286[[package]]287name = "bcrypt-pbkdf"288version = "0.7.2"289source = "registry+https://github.com/rust-lang/crates.io-index"290checksum = "4bde65b3c84000288c0abe8aa601a4b7c40b0dbbb7d144dd6c712ed9796e1fd5"291dependencies = [292 "blowfish",293 "hex-literal",294 "pbkdf2 0.10.0",295 "sha2 0.10.0",296]181297182[[package]]298[[package]]183name = "bech32"299name = "bech32"212 "generic-array",328 "generic-array",213]329]330331[[package]]332name = "block-buffer"333version = "0.10.0"334source = "registry+https://github.com/rust-lang/crates.io-index"335checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95"336dependencies = [337 "generic-array",338]214339215[[package]]340[[package]]216name = "block-modes"341name = "block-modes"222 "cipher 0.2.5",347 "cipher 0.2.5",223]348]349350[[package]]351name = "block-modes"352version = "0.8.1"353source = "registry+https://github.com/rust-lang/crates.io-index"354checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"355dependencies = [356 "block-padding",357 "cipher 0.3.0",358]224359225[[package]]360[[package]]226name = "block-padding"361name = "block-padding"251source = "registry+https://github.com/rust-lang/crates.io-index"386source = "registry+https://github.com/rust-lang/crates.io-index"252checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"387checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"388389[[package]]390name = "bytes"391version = "1.1.0"392source = "registry+https://github.com/rust-lang/crates.io-index"393checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"253394254[[package]]395[[package]]255name = "c2-chacha"396name = "c2-chacha"273source = "registry+https://github.com/rust-lang/crates.io-index"414source = "registry+https://github.com/rust-lang/crates.io-index"274checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"415checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"416417[[package]]418name = "chacha20"419version = "0.8.1"420source = "registry+https://github.com/rust-lang/crates.io-index"421checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91"422dependencies = [423 "cfg-if",424 "cipher 0.3.0",425 "cpufeatures 0.2.1",426 "zeroize",427]275428276[[package]]429[[package]]277name = "chacha20poly1305"430name = "chacha20poly1305"278version = "0.7.1"431version = "0.7.1"279source = "registry+https://github.com/rust-lang/crates.io-index"432source = "registry+https://github.com/rust-lang/crates.io-index"280checksum = "af1fc18e6d90c40164bf6c317476f2a98f04661e310e79830366b7e914c58a8e"433checksum = "af1fc18e6d90c40164bf6c317476f2a98f04661e310e79830366b7e914c58a8e"281dependencies = [434dependencies = [282 "aead",435 "aead 0.3.2",283 "cipher 0.2.5",436 "cipher 0.2.5",284 "poly1305",437 "poly1305 0.6.2",285 "zeroize",438 "zeroize",286]439]440441[[package]]442name = "chacha20poly1305"443version = "0.9.0"444source = "registry+https://github.com/rust-lang/crates.io-index"445checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a"446dependencies = [447 "aead 0.4.3",448 "chacha20",449 "cipher 0.3.0",450 "poly1305 0.7.2",451 "zeroize",452]287453288[[package]]454[[package]]289name = "chrono"455name = "chrono"323source = "registry+https://github.com/rust-lang/crates.io-index"489source = "registry+https://github.com/rust-lang/crates.io-index"324checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"490checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"325dependencies = [491dependencies = [326 "ansi_term",492 "ansi_term 0.11.0",327 "atty",493 "atty",328 "bitflags",494 "bitflags",329 "strsim 0.8.0",495 "strsim 0.8.0",332 "vec_map",498 "vec_map",333]499]500501[[package]]502name = "const-oid"503version = "0.6.2"504source = "registry+https://github.com/rust-lang/crates.io-index"505checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b"334506335[[package]]507[[package]]336name = "cookie-factory"508name = "cookie-factory"347 "libc",519 "libc",348]520]521522[[package]]523name = "cpufeatures"524version = "0.2.1"525source = "registry+https://github.com/rust-lang/crates.io-index"526checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"527dependencies = [528 "libc",529]349530350[[package]]531[[package]]351name = "cpuid-bool"532name = "cpuid-bool"352version = "0.2.0"533version = "0.2.0"353source = "registry+https://github.com/rust-lang/crates.io-index"534source = "registry+https://github.com/rust-lang/crates.io-index"354checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba"535checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba"536537[[package]]538name = "crypto-bigint"539version = "0.2.11"540source = "registry+https://github.com/rust-lang/crates.io-index"541checksum = "f83bd3bb4314701c568e340cd8cf78c975aa0ca79e03d3f6d1677d5b0c9c0c03"542dependencies = [543 "generic-array",544 "rand_core 0.6.2",545 "subtle",546]547548[[package]]549name = "crypto-common"550version = "0.1.1"551source = "registry+https://github.com/rust-lang/crates.io-index"552checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0"553dependencies = [554 "generic-array",555]355556356[[package]]557[[package]]357name = "crypto-mac"558name = "crypto-mac"372 "cipher 0.2.5",573 "cipher 0.2.5",373]574]575576[[package]]577name = "ctr"578version = "0.8.0"579source = "registry+https://github.com/rust-lang/crates.io-index"580checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"581dependencies = [582 "cipher 0.3.0",583]374584375[[package]]585[[package]]376name = "curve25519-dalek"586name = "curve25519-dalek"379checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"589checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"380dependencies = [590dependencies = [381 "byteorder",591 "byteorder",382 "digest",592 "digest 0.9.0",383 "rand_core 0.5.1",593 "rand_core 0.5.1",384 "subtle",594 "subtle",385 "zeroize",595 "zeroize",395 "num_cpus",605 "num_cpus",396]606]607608[[package]]609name = "der"610version = "0.4.5"611source = "registry+https://github.com/rust-lang/crates.io-index"612checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4"613dependencies = [614 "const-oid",615 "crypto-bigint",616]397617398[[package]]618[[package]]399name = "digest"619name = "digest"404 "generic-array",624 "generic-array",405]625]626627[[package]]628name = "digest"629version = "0.10.1"630source = "registry+https://github.com/rust-lang/crates.io-index"631checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b"632dependencies = [633 "block-buffer 0.10.0",634 "crypto-common",635 "generic-array",636 "subtle",637]406638407[[package]]639[[package]]408name = "dprint-core"640name = "dprint-core"441name = "fleet"673name = "fleet"442version = "0.1.0"674version = "0.1.0"443dependencies = [675dependencies = [444 "age",676 "age 0.7.0",445 "age-core",677 "age-core 0.7.0",446 "anyhow",678 "anyhow",679 "async-trait",680 "base58",447 "base64",681 "base64",448 "chrono",682 "chrono",449 "env_logger",683 "futures",450 "hostname",684 "hostname",451 "log",452 "nixlike",685 "nixlike",453 "once_cell",686 "once_cell",454 "peg",687 "peg",457 "structopt",690 "structopt",458 "tempfile",691 "tempfile",459 "time 0.3.3",692 "time 0.3.3",693 "tokio",694 "tokio-util",695 "tracing",696 "tracing-subscriber",460 "z85",697 "z85",461]698]462699463[[package]]700[[package]]464name = "fleet-install-secrets"701name = "fleet-install-secrets"465version = "0.1.0"702version = "0.1.0"466dependencies = [703dependencies = [467 "age",704 "age 0.6.0",468 "anyhow",705 "anyhow",469 "env_logger",706 "env_logger",470 "log",707 "log",486 "unic-langid",723 "unic-langid",487]724]725726[[package]]727name = "fluent"728version = "0.16.0"729source = "registry+https://github.com/rust-lang/crates.io-index"730checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7"731dependencies = [732 "fluent-bundle",733 "unic-langid",734]488735489[[package]]736[[package]]490name = "fluent-bundle"737name = "fluent-bundle"532source = "registry+https://github.com/rust-lang/crates.io-index"779source = "registry+https://github.com/rust-lang/crates.io-index"533checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"780checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"781782[[package]]783name = "futures"784version = "0.3.17"785source = "registry+https://github.com/rust-lang/crates.io-index"786checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca"787dependencies = [788 "futures-channel",789 "futures-core",790 "futures-executor",791 "futures-io",792 "futures-sink",793 "futures-task",794 "futures-util",795]796797[[package]]798name = "futures-channel"799version = "0.3.18"800source = "registry+https://github.com/rust-lang/crates.io-index"801checksum = "7fc8cd39e3dbf865f7340dce6a2d401d24fd37c6fe6c4f0ee0de8bfca2252d27"802dependencies = [803 "futures-core",804 "futures-sink",805]806807[[package]]808name = "futures-core"809version = "0.3.18"810source = "registry+https://github.com/rust-lang/crates.io-index"811checksum = "629316e42fe7c2a0b9a65b47d159ceaa5453ab14e8f0a3c5eedbb8cd55b4a445"812813[[package]]814name = "futures-executor"815version = "0.3.17"816source = "registry+https://github.com/rust-lang/crates.io-index"817checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c"818dependencies = [819 "futures-core",820 "futures-task",821 "futures-util",822]823824[[package]]825name = "futures-io"826version = "0.3.18"827source = "registry+https://github.com/rust-lang/crates.io-index"828checksum = "e481354db6b5c353246ccf6a728b0c5511d752c08da7260546fc0933869daa11"829830[[package]]831name = "futures-macro"832version = "0.3.17"833source = "registry+https://github.com/rust-lang/crates.io-index"834checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb"835dependencies = [836 "autocfg 1.0.1",837 "proc-macro-hack",838 "proc-macro2",839 "quote",840 "syn",841]842843[[package]]844name = "futures-sink"845version = "0.3.18"846source = "registry+https://github.com/rust-lang/crates.io-index"847checksum = "996c6442437b62d21a32cd9906f9c41e7dc1e19a9579843fad948696769305af"848849[[package]]850name = "futures-task"851version = "0.3.18"852source = "registry+https://github.com/rust-lang/crates.io-index"853checksum = "dabf1872aaab32c886832f2276d2f5399887e2bd613698a02359e4ea83f8de12"854855[[package]]856name = "futures-util"857version = "0.3.17"858source = "registry+https://github.com/rust-lang/crates.io-index"859checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"860dependencies = [861 "autocfg 1.0.1",862 "futures-channel",863 "futures-core",864 "futures-io",865 "futures-macro",866 "futures-sink",867 "futures-task",868 "memchr",869 "pin-project-lite",870 "pin-utils",871 "proc-macro-hack",872 "proc-macro-nested",873 "slab",874]534875535[[package]]876[[package]]536name = "generic-array"877name = "generic-array"582 "libc",923 "libc",583]924]925926[[package]]927name = "hex-literal"928version = "0.3.4"929source = "registry+https://github.com/rust-lang/crates.io-index"930checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"584931585[[package]]932[[package]]586name = "hkdf"933name = "hkdf"587version = "0.11.0"934version = "0.11.0"588source = "registry+https://github.com/rust-lang/crates.io-index"935source = "registry+https://github.com/rust-lang/crates.io-index"589checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"936checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"590dependencies = [937dependencies = [591 "digest",938 "digest 0.9.0",592 "hmac",939 "hmac 0.11.0",593]940]594941595[[package]]942[[package]]599checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"946checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"600dependencies = [947dependencies = [601 "crypto-mac",948 "crypto-mac",602 "digest",949 "digest 0.9.0",603]950]951952[[package]]953name = "hmac"954version = "0.12.0"955source = "registry+https://github.com/rust-lang/crates.io-index"956checksum = "ddca131f3e7f2ce2df364b57949a9d47915cfbd35e46cfee355ccebbf794d6a2"957dependencies = [958 "digest 0.10.1",959]604960605[[package]]961[[package]]606name = "hostname"962name = "hostname"639source = "registry+https://github.com/rust-lang/crates.io-index"995source = "registry+https://github.com/rust-lang/crates.io-index"640checksum = "3794c3d7fea43e076281c9213cfaaa7a53c3f18b1613f12514b9f575a2908457"996checksum = "3794c3d7fea43e076281c9213cfaaa7a53c3f18b1613f12514b9f575a2908457"641dependencies = [997dependencies = [642 "fluent",998 "fluent 0.15.0",643 "fluent-langneg",999 "fluent-langneg",644 "fluent-syntax",1000 "fluent-syntax",645 "i18n-embed-impl",1001 "i18n-embed-impl 0.7.0",646 "intl-memoizer",1002 "intl-memoizer",647 "lazy_static",1003 "lazy_static",648 "log",1004 "log",649 "parking_lot",1005 "parking_lot",650 "rust-embed",1006 "rust-embed 5.9.0",651 "thiserror",1007 "thiserror",652 "unic-langid",1008 "unic-langid",653 "walkdir",1009 "walkdir",654]1010]10111012[[package]]1013name = "i18n-embed"1014version = "0.13.1"1015source = "registry+https://github.com/rust-lang/crates.io-index"1016checksum = "39a0b4598fcd199eb5da38f70ece82903b178ad638839661c00612719bcfc0ad"1017dependencies = [1018 "fluent 0.16.0",1019 "fluent-langneg",1020 "fluent-syntax",1021 "i18n-embed-impl 0.8.0",1022 "intl-memoizer",1023 "lazy_static",1024 "log",1025 "parking_lot",1026 "rust-embed 6.3.0",1027 "thiserror",1028 "unic-langid",1029 "walkdir",1030]6551031656[[package]]1032[[package]]657name = "i18n-embed-fl"1033name = "i18n-embed-fl"661dependencies = [1037dependencies = [662 "dashmap",1038 "dashmap",663 "find-crate",1039 "find-crate",664 "fluent",1040 "fluent 0.15.0",665 "fluent-syntax",1041 "fluent-syntax",666 "i18n-config",1042 "i18n-config",667 "i18n-embed",1043 "i18n-embed 0.12.1",668 "lazy_static",1044 "lazy_static",669 "proc-macro-error",1045 "proc-macro-error",670 "proc-macro2",1046 "proc-macro2",674 "unic-langid",1050 "unic-langid",675]1051]10521053[[package]]1054name = "i18n-embed-fl"1055version = "0.6.1"1056source = "registry+https://github.com/rust-lang/crates.io-index"1057checksum = "4c1d347d2f7f9f2f977385b43b204d59ebeb1b2f93ce73cd23622df2d2da1033"1058dependencies = [1059 "dashmap",1060 "find-crate",1061 "fluent 0.16.0",1062 "fluent-syntax",1063 "i18n-config",1064 "i18n-embed 0.13.1",1065 "lazy_static",1066 "proc-macro-error",1067 "proc-macro2",1068 "quote",1069 "strsim 0.10.0",1070 "syn",1071 "unic-langid",1072]6761073677[[package]]1074[[package]]678name = "i18n-embed-impl"1075name = "i18n-embed-impl"687 "syn",1084 "syn",688]1085]10861087[[package]]1088name = "i18n-embed-impl"1089version = "0.8.0"1090source = "registry+https://github.com/rust-lang/crates.io-index"1091checksum = "0db2330e035808eb064afb67e6743ddce353763af3e0f2bdfc2476e00ce76136"1092dependencies = [1093 "find-crate",1094 "i18n-config",1095 "proc-macro2",1096 "quote",1097 "syn",1098]6891099690[[package]]1100[[package]]691name = "instant"1101name = "instant"773source = "registry+https://github.com/rust-lang/crates.io-index"1183source = "registry+https://github.com/rust-lang/crates.io-index"774checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"1184checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"11851186[[package]]1187name = "matchers"1188version = "0.1.0"1189source = "registry+https://github.com/rust-lang/crates.io-index"1190checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"1191dependencies = [1192 "regex-automata",1193]7751194776[[package]]1195[[package]]777name = "memchr"1196name = "memchr"788 "autocfg 1.0.1",1207 "autocfg 1.0.1",789]1208]12091210[[package]]1211name = "minimal-lexical"1212version = "0.2.1"1213source = "registry+https://github.com/rust-lang/crates.io-index"1214checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"12151216[[package]]1217name = "mio"1218version = "0.7.14"1219source = "registry+https://github.com/rust-lang/crates.io-index"1220checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"1221dependencies = [1222 "libc",1223 "log",1224 "miow",1225 "ntapi",1226 "winapi",1227]12281229[[package]]1230name = "miow"1231version = "0.3.7"1232source = "registry+https://github.com/rust-lang/crates.io-index"1233checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"1234dependencies = [1235 "winapi",1236]7901237791[[package]]1238[[package]]792name = "nix"1239name = "nix"824 "version_check",1271 "version_check",825]1272]12731274[[package]]1275name = "nom"1276version = "7.1.0"1277source = "registry+https://github.com/rust-lang/crates.io-index"1278checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109"1279dependencies = [1280 "memchr",1281 "minimal-lexical",1282 "version_check",1283]12841285[[package]]1286name = "ntapi"1287version = "0.3.6"1288source = "registry+https://github.com/rust-lang/crates.io-index"1289checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"1290dependencies = [1291 "winapi",1292]8261293827[[package]]1294[[package]]828name = "num-bigint"1295name = "num-bigint"854 "zeroize",1321 "zeroize",855]1322]13231324[[package]]1325name = "num-bigint-dig"1326version = "0.7.0"1327source = "registry+https://github.com/rust-lang/crates.io-index"1328checksum = "4547ee5541c18742396ae2c895d0717d0f886d8823b8399cdaf7b07d63ad0480"1329dependencies = [1330 "autocfg 0.1.7",1331 "byteorder",1332 "lazy_static",1333 "libm",1334 "num-integer",1335 "num-iter",1336 "num-traits",1337 "rand 0.8.4",1338 "smallvec",1339 "zeroize",1340]8561341857[[package]]1342[[package]]858name = "num-integer"1343name = "num-integer"882checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"1367checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"883dependencies = [1368dependencies = [884 "autocfg 1.0.1",1369 "autocfg 1.0.1",1370 "libm",885]1371]8861372887[[package]]1373[[package]]963 "crypto-mac",1449 "crypto-mac",964]1450]14511452[[package]]1453name = "pbkdf2"1454version = "0.10.0"1455source = "registry+https://github.com/rust-lang/crates.io-index"1456checksum = "a4628cc3cf953b82edcd3c1388c5715401420ce5524fedbab426bd5aba017434"1457dependencies = [1458 "digest 0.10.1",1459]9651460966[[package]]1461[[package]]967name = "peg"1462name = "peg"1001 "regex",1496 "regex",1002]1497]14981499[[package]]1500name = "pem-rfc7468"1501version = "0.2.4"1502source = "registry+https://github.com/rust-lang/crates.io-index"1503checksum = "84e93a3b1cc0510b03020f33f21e62acdde3dcaef432edc95bea377fbd4c2cd4"1504dependencies = [1505 "base64ct",1506]100315071004[[package]]1508[[package]]1005name = "pin-project"1509name = "pin-project"1021 "syn",1525 "syn",1022]1526]15271528[[package]]1529name = "pin-project-lite"1530version = "0.2.7"1531source = "registry+https://github.com/rust-lang/crates.io-index"1532checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"15331534[[package]]1535name = "pin-utils"1536version = "0.1.0"1537source = "registry+https://github.com/rust-lang/crates.io-index"1538checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"15391540[[package]]1541name = "pkcs1"1542version = "0.2.4"1543source = "registry+https://github.com/rust-lang/crates.io-index"1544checksum = "116bee8279d783c0cf370efa1a94632f2108e5ef0bb32df31f051647810a4e2c"1545dependencies = [1546 "der",1547 "pem-rfc7468",1548 "zeroize",1549]15501551[[package]]1552name = "pkcs8"1553version = "0.7.6"1554source = "registry+https://github.com/rust-lang/crates.io-index"1555checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447"1556dependencies = [1557 "der",1558 "pem-rfc7468",1559 "pkcs1",1560 "spki",1561 "zeroize",1562]102315631024[[package]]1564[[package]]1025name = "poly1305"1565name = "poly1305"1031 "universal-hash",1571 "universal-hash",1032]1572]15731574[[package]]1575name = "poly1305"1576version = "0.7.2"1577source = "registry+https://github.com/rust-lang/crates.io-index"1578checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"1579dependencies = [1580 "cpufeatures 0.2.1",1581 "opaque-debug",1582 "universal-hash",1583]103315841034[[package]]1585[[package]]1035name = "ppv-lite86"1586name = "ppv-lite86"1061 "version_check",1612 "version_check",1062]1613]16141615[[package]]1616name = "proc-macro-hack"1617version = "0.5.19"1618source = "registry+https://github.com/rust-lang/crates.io-index"1619checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"16201621[[package]]1622name = "proc-macro-nested"1623version = "0.1.7"1624source = "registry+https://github.com/rust-lang/crates.io-index"1625checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"106316261064[[package]]1627[[package]]1065name = "proc-macro2"1628name = "proc-macro2"1186 "regex-syntax",1749 "regex-syntax",1187]1750]17511752[[package]]1753name = "regex-automata"1754version = "0.1.10"1755source = "registry+https://github.com/rust-lang/crates.io-index"1756checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"1757dependencies = [1758 "regex-syntax",1759]118817601189[[package]]1761[[package]]1190name = "regex-syntax"1762name = "regex-syntax"1208checksum = "3648b669b10afeab18972c105e284a7b953a669b0be3514c27f9b17acab2f9cd"1780checksum = "3648b669b10afeab18972c105e284a7b953a669b0be3514c27f9b17acab2f9cd"1209dependencies = [1781dependencies = [1210 "byteorder",1782 "byteorder",1211 "digest",1783 "digest 0.9.0",1212 "lazy_static",1784 "lazy_static",1213 "num-bigint-dig",1785 "num-bigint-dig 0.6.1",1214 "num-integer",1786 "num-integer",1215 "num-iter",1787 "num-iter",1216 "num-traits",1788 "num-traits",1217 "pem",1789 "pem",1218 "rand 0.7.3",1790 "rand 0.7.3",1219 "sha2",1791 "sha2 0.9.5",1220 "simple_asn1",1792 "simple_asn1",1221 "subtle",1793 "subtle",1222 "thiserror",1794 "thiserror",1223 "zeroize",1795 "zeroize",1224]1796]17971798[[package]]1799name = "rsa"1800version = "0.5.0"1801source = "registry+https://github.com/rust-lang/crates.io-index"1802checksum = "e05c2603e2823634ab331437001b411b9ed11660fbc4066f3908c84a9439260d"1803dependencies = [1804 "byteorder",1805 "digest 0.9.0",1806 "lazy_static",1807 "num-bigint-dig 0.7.0",1808 "num-integer",1809 "num-iter",1810 "num-traits",1811 "pkcs1",1812 "pkcs8",1813 "rand 0.8.4",1814 "subtle",1815 "zeroize",1816]122518171226[[package]]1818[[package]]1227name = "rust-embed"1819name = "rust-embed"1228version = "5.9.0"1820version = "5.9.0"1229source = "registry+https://github.com/rust-lang/crates.io-index"1821source = "registry+https://github.com/rust-lang/crates.io-index"1230checksum = "2fe1fe6aac5d6bb9e1ffd81002340363272a7648234ec7bdfac5ee202cb65523"1822checksum = "2fe1fe6aac5d6bb9e1ffd81002340363272a7648234ec7bdfac5ee202cb65523"1231dependencies = [1823dependencies = [1232 "rust-embed-impl",1824 "rust-embed-impl 5.9.0",1233 "rust-embed-utils",1825 "rust-embed-utils 5.1.0",1234 "walkdir",1826 "walkdir",1235]1827]18281829[[package]]1830name = "rust-embed"1831version = "6.3.0"1832source = "registry+https://github.com/rust-lang/crates.io-index"1833checksum = "d40377bff8cceee81e28ddb73ac97f5c2856ce5522f0b260b763f434cdfae602"1834dependencies = [1835 "rust-embed-impl 6.2.0",1836 "rust-embed-utils 7.1.0",1837 "walkdir",1838]123618391237[[package]]1840[[package]]1238name = "rust-embed-impl"1841name = "rust-embed-impl"1242dependencies = [1845dependencies = [1243 "proc-macro2",1846 "proc-macro2",1244 "quote",1847 "quote",1245 "rust-embed-utils",1848 "rust-embed-utils 5.1.0",1246 "syn",1849 "syn",1247 "walkdir",1850 "walkdir",1248]1851]18521853[[package]]1854name = "rust-embed-impl"1855version = "6.2.0"1856source = "registry+https://github.com/rust-lang/crates.io-index"1857checksum = "94e763e24ba2bf0c72bc6be883f967f794a019fafd1b86ba1daff9c91a7edd30"1858dependencies = [1859 "proc-macro2",1860 "quote",1861 "rust-embed-utils 7.1.0",1862 "syn",1863 "walkdir",1864]124918651250[[package]]1866[[package]]1251name = "rust-embed-utils"1867name = "rust-embed-utils"1256 "walkdir",1872 "walkdir",1257]1873]18741875[[package]]1876name = "rust-embed-utils"1877version = "7.1.0"1878source = "registry+https://github.com/rust-lang/crates.io-index"1879checksum = "ad22c7226e4829104deab21df575e995bfbc4adfad13a595e387477f238c1aec"1880dependencies = [1881 "sha2 0.9.5",1882 "walkdir",1883]125818841259[[package]]1885[[package]]1260name = "rustc-hash"1886name = "rustc-hash"1277 "cipher 0.3.0",1903 "cipher 0.3.0",1278]1904]19051906[[package]]1907name = "salsa20"1908version = "0.9.0"1909source = "registry+https://github.com/rust-lang/crates.io-index"1910checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686"1911dependencies = [1912 "cipher 0.3.0",1913]127919141280[[package]]1915[[package]]1281name = "same-file"1916name = "same-file"1298source = "registry+https://github.com/rust-lang/crates.io-index"1933source = "registry+https://github.com/rust-lang/crates.io-index"1299checksum = "879588d8f90906e73302547e20fffefdd240eb3e0e744e142321f5d49dea0518"1934checksum = "879588d8f90906e73302547e20fffefdd240eb3e0e744e142321f5d49dea0518"1300dependencies = [1935dependencies = [1301 "hmac",1936 "hmac 0.11.0",1302 "pbkdf2",1937 "pbkdf2 0.8.0",1303 "salsa20",1938 "salsa20 0.8.1",1304 "sha2",1939 "sha2 0.9.5",1305]1940]19411942[[package]]1943name = "scrypt"1944version = "0.8.1"1945source = "registry+https://github.com/rust-lang/crates.io-index"1946checksum = "e73d6d7c6311ebdbd9184ad6c4447b2f36337e327bda107d3ba9e3c374f9d325"1947dependencies = [1948 "hmac 0.12.0",1949 "pbkdf2 0.10.0",1950 "salsa20 0.9.0",1951 "sha2 0.10.0",1952]130619531307[[package]]1954[[package]]1308name = "secrecy"1955name = "secrecy"1313 "zeroize",1960 "zeroize",1314]1961]19621963[[package]]1964name = "secrecy"1965version = "0.8.0"1966source = "registry+https://github.com/rust-lang/crates.io-index"1967checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"1968dependencies = [1969 "zeroize",1970]131519711316[[package]]1972[[package]]1317name = "serde"1973name = "serde"1350source = "registry+https://github.com/rust-lang/crates.io-index"2006source = "registry+https://github.com/rust-lang/crates.io-index"1351checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12"2007checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12"1352dependencies = [2008dependencies = [1353 "block-buffer",2009 "block-buffer 0.9.0",1354 "cfg-if",2010 "cfg-if",1355 "cpufeatures",2011 "cpufeatures 0.1.5",1356 "digest",2012 "digest 0.9.0",1357 "opaque-debug",2013 "opaque-debug",1358]2014]20152016[[package]]2017name = "sha2"2018version = "0.10.0"2019source = "registry+https://github.com/rust-lang/crates.io-index"2020checksum = "900d964dd36bb15bcf2f2b35694c072feab74969a54f2bbeec7a2d725d2bdcb6"2021dependencies = [2022 "cfg-if",2023 "cpufeatures 0.2.1",2024 "digest 0.10.1",2025]20262027[[package]]2028name = "sharded-slab"2029version = "0.1.4"2030source = "registry+https://github.com/rust-lang/crates.io-index"2031checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"2032dependencies = [2033 "lazy_static",2034]20352036[[package]]2037name = "signal-hook-registry"2038version = "1.4.0"2039source = "registry+https://github.com/rust-lang/crates.io-index"2040checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"2041dependencies = [2042 "libc",2043]135920441360[[package]]2045[[package]]1361name = "simple_asn1"2046name = "simple_asn1"1368 "num-traits",2053 "num-traits",1369]2054]20552056[[package]]2057name = "slab"2058version = "0.4.5"2059source = "registry+https://github.com/rust-lang/crates.io-index"2060checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"137020611371[[package]]2062[[package]]1372name = "smallvec"2063name = "smallvec"1380source = "registry+https://github.com/rust-lang/crates.io-index"2071source = "registry+https://github.com/rust-lang/crates.io-index"1381checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"2072checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"20732074[[package]]2075name = "spki"2076version = "0.4.1"2077source = "registry+https://github.com/rust-lang/crates.io-index"2078checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32"2079dependencies = [2080 "der",2081]138220821383[[package]]2083[[package]]1384name = "stable_deref_trait"2084name = "stable_deref_trait"1509 "syn",2209 "syn",1510]2210]22112212[[package]]2213name = "thread_local"2214version = "1.1.3"2215source = "registry+https://github.com/rust-lang/crates.io-index"2216checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd"2217dependencies = [2218 "once_cell",2219]151122201512[[package]]2221[[package]]1513name = "time"2222name = "time"1535source = "registry+https://github.com/rust-lang/crates.io-index"2244source = "registry+https://github.com/rust-lang/crates.io-index"1536checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1"2245checksum = "29738eedb4388d9ea620eeab9384884fc3f06f586a2eddb56bedc5885126c7c1"22462247[[package]]2248name = "tokio"2249version = "1.14.0"2250source = "registry+https://github.com/rust-lang/crates.io-index"2251checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144"2252dependencies = [2253 "autocfg 1.0.1",2254 "bytes",2255 "libc",2256 "memchr",2257 "mio",2258 "num_cpus",2259 "once_cell",2260 "parking_lot",2261 "pin-project-lite",2262 "signal-hook-registry",2263 "tokio-macros",2264 "winapi",2265]22662267[[package]]2268name = "tokio-macros"2269version = "1.6.0"2270source = "registry+https://github.com/rust-lang/crates.io-index"2271checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e"2272dependencies = [2273 "proc-macro2",2274 "quote",2275 "syn",2276]22772278[[package]]2279name = "tokio-util"2280version = "0.6.9"2281source = "registry+https://github.com/rust-lang/crates.io-index"2282checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"2283dependencies = [2284 "bytes",2285 "futures-core",2286 "futures-sink",2287 "log",2288 "pin-project-lite",2289 "tokio",2290]153722911538[[package]]2292[[package]]1539name = "toml"2293name = "toml"1544 "serde",2298 "serde",1545]2299]23002301[[package]]2302name = "tracing"2303version = "0.1.29"2304source = "registry+https://github.com/rust-lang/crates.io-index"2305checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"2306dependencies = [2307 "cfg-if",2308 "pin-project-lite",2309 "tracing-attributes",2310 "tracing-core",2311]23122313[[package]]2314name = "tracing-attributes"2315version = "0.1.18"2316source = "registry+https://github.com/rust-lang/crates.io-index"2317checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"2318dependencies = [2319 "proc-macro2",2320 "quote",2321 "syn",2322]23232324[[package]]2325name = "tracing-core"2326version = "0.1.21"2327source = "registry+https://github.com/rust-lang/crates.io-index"2328checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"2329dependencies = [2330 "lazy_static",2331]23322333[[package]]2334name = "tracing-log"2335version = "0.1.2"2336source = "registry+https://github.com/rust-lang/crates.io-index"2337checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3"2338dependencies = [2339 "lazy_static",2340 "log",2341 "tracing-core",2342]23432344[[package]]2345name = "tracing-subscriber"2346version = "0.3.3"2347source = "registry+https://github.com/rust-lang/crates.io-index"2348checksum = "245da694cc7fc4729f3f418b304cb57789f1bed2a78c575407ab8a23f53cb4d3"2349dependencies = [2350 "ansi_term 0.12.1",2351 "lazy_static",2352 "matchers",2353 "regex",2354 "sharded-slab",2355 "smallvec",2356 "thread_local",2357 "tracing",2358 "tracing-core",2359 "tracing-log",2360]154623611547[[package]]2362[[package]]1548name = "type-map"2363name = "type-map"168024951681[[package]]2496[[package]]1682name = "x25519-dalek"2497name = "x25519-dalek"1683version = "1.2.0"2498version = "1.1.1"1684source = "registry+https://github.com/rust-lang/crates.io-index"2499source = "registry+https://github.com/rust-lang/crates.io-index"1685checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077"2500checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f"1686dependencies = [2501dependencies = [1687 "curve25519-dalek",2502 "curve25519-dalek",1688 "rand_core 0.5.1",2503 "rand_core 0.5.1",169725121698[[package]]2513[[package]]1699name = "zeroize"2514name = "zeroize"1700version = "1.3.0"2515version = "1.4.3"1701source = "registry+https://github.com/rust-lang/crates.io-index"2516source = "registry+https://github.com/rust-lang/crates.io-index"1702checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"2517checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619"1703dependencies = [2518dependencies = [1704 "zeroize_derive",2519 "zeroize_derive",1705]2520]cmds/fleet/Cargo.tomldiffbeforeafterboth--- a/cmds/fleet/Cargo.toml
+++ b/cmds/fleet/Cargo.toml
@@ -7,19 +7,24 @@
[dependencies]
anyhow = "1.0"
-log = "0.4.14"
-env_logger = "0.9.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
time = { version = "0.3.2", features = ["serde"] }
tempfile = "3.2"
once_cell = "1.5"
hostname = "0.3.1"
-age-core = "0.6.0"
+age-core = "0.7.0"
peg = "0.7.0"
nixlike = {path = "../../crates/nixlike"}
-age = { version = "0.6.0", features = ["ssh", "armor"] }
+age = { version = "0.7.0", features = ["ssh", "armor"] }
base64 = "0.13.0"
chrono = { version = "0.4.19", features = ["serde"] }
z85 = "3.0.3"
+base58 = "*"
structopt = "0.3.23"
+tokio = { version = "1.14.0", features = ["full"] }
+tracing = "0.1.29"
+tracing-subscriber = { version = "0.3.3", features = ["fmt", "env-filter"] }
+tokio-util = { version = "0.6.9", features = ["codec"] }
+async-trait = "0.1.52"
+futures = "0.3.17"
cmds/fleet/src/cmds/build_systems.rsdiffbeforeafterboth--- a/cmds/fleet/src/cmds/build_systems.rs
+++ b/cmds/fleet/src/cmds/build_systems.rs
@@ -1,11 +1,12 @@
-use std::{env::current_dir, process::Command};
+use std::{env::current_dir, time::Duration};
use crate::{command::CommandExt, host::Config, nix::SYSTEMS_ATTRIBUTE};
use anyhow::Result;
-use log::info;
use structopt::StructOpt;
+use tokio::{process::Command, task::LocalSet, time::sleep};
+use tracing::{error, field, info, info_span, warn, Instrument};
-#[derive(StructOpt)]
+#[derive(StructOpt, Clone)]
pub struct BuildSystems {
/// --builders arg for nix
#[structopt(long)]
@@ -78,117 +79,158 @@
}
impl BuildSystems {
- pub fn run(self, config: &Config) -> Result<()> {
- let hosts = config.list_hosts()?;
-
+ pub async fn run(self, config: &Config) -> Result<()> {
+ let hosts = config.list_hosts().await?;
+ let set = LocalSet::new();
+ let this = &self;
for host in hosts.iter() {
if config.should_skip(host) {
continue;
}
- info!("Building host {}", host);
- let built = {
- let dir = tempfile::tempdir()?;
- dir.path().to_owned()
- };
+ let config = config.clone();
+ let host = host.clone();
+ let this = this.clone();
+ let span = info_span!("deployment", host = field::display(&host));
+ set.spawn_local(
+ (async move {
+ let res: Result<()> = try {
+ info!("building");
+ let built = {
+ let dir = tempfile::tempdir()?;
+ dir.path().to_owned()
+ };
- let mut nix_build = if self.privileged_build {
- let mut out = Command::new("sudo");
- out.arg("nix");
- out
- } else {
- Command::new("nix")
- };
- nix_build
- .args(&["build", "--impure", "--no-link", "--out-link"])
- .arg(&built)
- .arg(format!(
- "{}.{}.config.system.build.toplevel",
- SYSTEMS_ATTRIBUTE, host,
- ));
+ let mut nix_build = if this.privileged_build {
+ let mut out = Command::new("sudo");
+ out.arg("nix");
+ out
+ } else {
+ Command::new("nix")
+ };
+ nix_build
+ .args(&[
+ "build",
+ "--impure",
+ "--json",
+ // "--show-trace",
+ "--no-link",
+ "--out-link",
+ ])
+ .arg(&built)
+ .arg(format!(
+ "{}.{}.config.system.build.toplevel",
+ SYSTEMS_ATTRIBUTE, host,
+ ));
+
+ if let Some(builders) = &this.builders {
+ nix_build.arg("--builders").arg(builders);
+ }
+ if let Some(jobs) = &this.jobs {
+ nix_build.arg("--max-jobs");
+ nix_build.arg(format!("{}", jobs));
+ }
+ if !this.fail_fast {
+ nix_build.arg("--keep-going");
+ }
- if let Some(builders) = &self.builders {
- nix_build.arg("--builders").arg(builders);
- }
- if let Some(jobs) = &self.jobs {
- nix_build.arg("--max-jobs");
- nix_build.arg(format!("{}", jobs));
- }
- if !self.fail_fast {
- nix_build.arg("--keep-going");
- }
+ nix_build.run_nix().await?;
+ let built = std::fs::canonicalize(built)?;
- nix_build.inherit_stdio().run()?;
- let built = std::fs::canonicalize(built)?;
- info!("Built closure: {:?}", built);
+ let action = Action::from(this.subcommand.clone());
- let action = Action::from(self.subcommand.clone());
+ match action {
+ Action::Upload(action) => {
+ if !config.is_local(&host) {
+ info!("uploading system closure");
+ let mut tries = 0;
+ loop {
+ match Command::new("nix")
+ .args(&["copy", "--to"])
+ .arg(format!("ssh://root@{}", host))
+ .arg(&built)
+ .inherit_stdio()
+ .run_nix()
+ .await
+ {
+ Ok(()) => break,
+ Err(e) if tries < 3 => {
+ tries += 1;
+ warn!("Copy failure ({}/3): {}", tries, e);
+ sleep(Duration::from_millis(5000)).await;
+ }
+ Err(e) => return Err(e),
+ }
+ }
+ }
+ if let Some(action) = action {
+ if action.should_switch_profile() {
+ info!("switching generation");
+ config
+ .command_on(&host, "nix-env", true)
+ .args(&["-p", "/nix/var/nix/profiles/system", "--set"])
+ .arg(&built)
+ .inherit_stdio()
+ .run()
+ .await?;
+ }
+ info!("executing activation script");
+ let mut switch_script = built.clone();
+ switch_script.push("bin");
+ switch_script.push("switch-to-configuration");
+ config
+ .command_on(&host, switch_script, true)
+ .arg(action.name())
+ .inherit_stdio()
+ .run()
+ .await?;
+ }
+ }
+ Action::Package(PackageAction::SdImage) => {
+ let mut out = current_dir()?;
+ out.push(format!("sd-image-{}", host));
- match action {
- Action::Upload(action) => {
- if !config.is_local(host) {
- info!("Uploading system closure");
- Command::new("nix")
- .args(&["copy", "--to"])
- .arg(format!("ssh://root@{}", host))
- .arg(&built)
- .inherit_stdio()
- .run()?;
- }
- if let Some(action) = action {
- if action.should_switch_profile() {
- info!("Switching generation");
- config
- .command_on(host, "nix-env", true)
- .args(&["-p", "/nix/var/nix/profiles/system", "--set"])
- .arg(&built)
- .inherit_stdio()
- .run()?;
- }
- info!("Executing activation script");
- let mut switch_script = built.clone();
- switch_script.push("bin");
- switch_script.push("switch-to-configuration");
- config
- .command_on(host, switch_script, true)
- .arg(action.name())
- .inherit_stdio()
- .run()?;
- }
- }
- Action::Package(PackageAction::SdImage) => {
- let mut out = current_dir()?;
- out.push(format!("sd-image-{}", host));
+ info!("building sd image to {:?}", out);
+ let mut nix_build = if this.privileged_build {
+ let mut out = Command::new("sudo");
+ out.arg("nix");
+ out
+ } else {
+ Command::new("nix")
+ };
+ nix_build
+ .args(&["build", "--impure", "--no-link", "--out-link"])
+ .arg(&out)
+ .arg(format!(
+ "{}.{}.config.system.build.sdImage",
+ SYSTEMS_ATTRIBUTE, host,
+ ));
+ if let Some(builders) = &this.builders {
+ nix_build.arg("--builders").arg(builders);
+ }
+ if let Some(jobs) = &this.jobs {
+ nix_build.arg("--max-jobs");
+ nix_build.arg(format!("{}", jobs));
+ }
+ if !this.fail_fast {
+ nix_build.arg("--keep-going");
+ }
- info!("Building sd image to {:?}", out);
- let mut nix_build = if self.privileged_build {
- let mut out = Command::new("sudo");
- out.arg("nix");
- out
- } else {
- Command::new("nix")
+ nix_build.inherit_stdio().run_nix().await?;
+ }
+ };
};
- nix_build
- .args(&["build", "--impure", "--no-link", "--out-link"])
- .arg(&out)
- .arg(format!(
- "{}.{}.config.system.build.sdImage",
- SYSTEMS_ATTRIBUTE, host,
- ));
- if let Some(builders) = &self.builders {
- nix_build.arg("--builders").arg(builders);
+ match res {
+ Ok(_) => {}
+ Err(e) => {
+ error!("failed to deploy host: {}", e)
+ }
}
- if let Some(jobs) = &self.jobs {
- nix_build.arg("--max-jobs");
- nix_build.arg(format!("{}", jobs));
- }
- if !self.fail_fast {
- nix_build.arg("--keep-going");
- }
-
- nix_build.inherit_stdio().run()?;
- }
- };
+ Ok(())
+ })
+ .instrument(span),
+ );
}
+ set.await;
Ok(())
}
}
cmds/fleet/src/cmds/info.rsdiffbeforeafterboth--- a/cmds/fleet/src/cmds/info.rs
+++ b/cmds/fleet/src/cmds/info.rs
@@ -30,13 +30,13 @@
}
impl Info {
- pub fn run(self, config: &Config) -> Result<()> {
+ pub async fn run(self, config: &Config) -> Result<()> {
let mut data = Vec::new();
match self.cmd {
InfoCmd::ListHosts { ref tagged } => {
- 'host: for host in config.list_hosts()? {
+ 'host: for host in config.list_hosts().await? {
if !tagged.is_empty() {
- let tags: Vec<String> = config.config_attr(&host, "tags")?;
+ let tags: Vec<String> = config.config_attr(&host, "tags").await?;
for tag in tagged {
if !tags.contains(&tag) {
continue 'host;
@@ -57,10 +57,18 @@
);
let mut out = <BTreeSet<String>>::new();
if external {
- out.extend(config.config_attr::<Vec<String>>(&host, "network.externalIps")?);
+ out.extend(
+ config
+ .config_attr::<Vec<String>>(&host, "network.externalIps")
+ .await?,
+ );
}
if internal {
- out.extend(config.config_attr::<Vec<String>>(&host, "network.internalIps")?);
+ out.extend(
+ config
+ .config_attr::<Vec<String>>(&host, "network.internalIps")
+ .await?,
+ );
}
for ip in out {
data.push(ip);
cmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth--- a/cmds/fleet/src/cmds/secrets/mod.rs
+++ b/cmds/fleet/src/cmds/secrets/mod.rs
@@ -3,6 +3,7 @@
host::Config,
};
use anyhow::{bail, Result};
+use futures::{StreamExt, TryStreamExt};
use std::{
io::{self, Cursor, Read},
path::PathBuf,
@@ -44,14 +45,14 @@
}
impl Secrets {
- pub fn run(self, config: &Config) -> Result<()> {
+ pub async fn run(self, config: &Config) -> Result<()> {
match self {
Secrets::ForceKeys => {
- for host in config.list_hosts()? {
+ for host in config.list_hosts().await? {
if config.should_skip(&host) {
continue;
}
- config.key(&host)?;
+ config.key(&host).await?;
}
}
Secrets::AddShared {
@@ -61,10 +62,10 @@
public,
public_file,
} => {
- let recipients = machines
- .iter()
- .map(|m| config.recipient(m))
- .collect::<Result<Vec<_>>>()?;
+ let recipients = futures::stream::iter(machines.iter())
+ .then(|m| config.recipient(m))
+ .try_collect::<Vec<_>>()
+ .await?;
let secret = {
let mut input = vec![];
@@ -117,7 +118,7 @@
public,
public_file,
} => {
- let recipient = config.recipient(&machine)?;
+ let recipient = config.recipient(&machine).await?;
let secret = {
let mut input = vec![];
cmds/fleet/src/command.rsdiffbeforeafterboth--- a/cmds/fleet/src/command.rs
+++ b/cmds/fleet/src/command.rs
@@ -1,42 +1,204 @@
-use std::{
- ffi::OsStr,
- process::{Command, Stdio},
-};
+use std::{ffi::OsStr, process::Stdio};
use anyhow::{Context, Result};
-use serde::de::DeserializeOwned;
+use async_trait::async_trait;
+use futures::StreamExt;
+use serde::{
+ de::{DeserializeOwned, Visitor},
+ Deserialize,
+};
+use tokio::{process::Command, select};
+use tokio_util::codec::{BytesCodec, FramedRead, LinesCodec};
+use tracing::{info, warn};
+#[async_trait]
pub trait CommandExt {
- fn run(&mut self) -> Result<()>;
- fn run_json<T: DeserializeOwned>(&mut self) -> Result<T>;
- fn run_string(&mut self) -> Result<String>;
+ async fn run_nix(&mut self) -> Result<()>;
+ async fn run_nix_json<T: DeserializeOwned>(&mut self) -> Result<T>;
+ async fn run_nix_string(&mut self) -> Result<String>;
+ async fn run(&mut self) -> Result<()>;
+ async fn run_json<T: DeserializeOwned>(&mut self) -> Result<T>;
+ async fn run_string(&mut self) -> Result<String>;
fn inherit_stdio(&mut self) -> &mut Self;
fn ssh_on(host: impl AsRef<OsStr>, command: impl AsRef<OsStr>) -> Self;
}
+#[derive(Debug)]
+enum LogField {
+ String(String),
+ Num(u64),
+}
+
+impl<'de> Deserialize<'de> for LogField {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ struct StringOrNum;
+ impl<'de> Visitor<'de> for StringOrNum {
+ type Value = LogField;
+
+ fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ write!(f, "string or unsigned")
+ }
+
+ fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
+ where
+ E: serde::de::Error,
+ {
+ Ok(LogField::String(v.to_owned()))
+ }
+
+ fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
+ where
+ E: serde::de::Error,
+ {
+ Ok(LogField::Num(v))
+ }
+ }
+
+ deserializer.deserialize_any(StringOrNum)
+ }
+}
+
+#[derive(Deserialize, Debug)]
+#[serde(rename_all = "camelCase", tag = "action")]
+enum NixLog {
+ Msg {
+ level: u32,
+ msg: String,
+ raw_msg: Option<String>,
+ },
+ Start {
+ id: u64,
+ level: u32,
+ #[serde(default)]
+ fields: Vec<LogField>,
+ text: String,
+ #[serde(rename = "type")]
+ typ: u32,
+ },
+ Stop {
+ id: u64,
+ },
+ Result {
+ id: u64,
+ #[serde(rename = "type")]
+ typ: u32,
+ },
+}
+
+#[async_trait]
impl CommandExt for Command {
+ async fn run_nix(&mut self) -> Result<()> {
+ self.run_nix_string().await.map(|_| ())
+ }
+ async fn run_nix_json<T: DeserializeOwned>(&mut self) -> Result<T> {
+ let str = self.run_nix_string().await?;
+ serde_json::from_str(&str).with_context(|| format!("{:?}", str))
+ }
+
+ async fn run_nix_string(&mut self) -> Result<String> {
+ self.arg("--log-format").arg("internal-json");
+ self.stderr(Stdio::piped());
+ self.stdout(Stdio::piped());
+ let mut child = self.spawn()?;
+ let mut stderr = child.stderr.take().unwrap();
+ let mut stdout = child.stdout.take().unwrap();
+ let mut err = FramedRead::new(&mut stderr, LinesCodec::new());
+ let mut out = FramedRead::new(&mut stdout, BytesCodec::new());
+
+ // while let Some(line) = read.next().await? {}
+
+ let mut out_buf = vec![];
+ loop {
+ select! {
+ e = err.next() => {
+ if let Some(e) = e {
+ let e = e?;
+ if let Some(e) = e.strip_prefix("@nix ") {
+
+ let log: NixLog = match serde_json::from_str(e) {
+ Ok(l) => l,
+ Err(err) => {
+ warn!("failed to parse nix log line {:?}: {}", e, err);
+ continue;
+ },
+ };
+ match log {
+ NixLog::Msg { msg, raw_msg, .. } => {
+ if !(msg.ends_with(" is dirty") && msg.contains("warning:") && msg.contains(" Git tree ")) {
+ info!(target: "nix", "{}", raw_msg.unwrap_or(msg))
+ }
+ },
+ NixLog::Start { ref fields, typ, .. } if typ == 105 && fields.len() >= 1 => {
+ if let [LogField::String(drv), ..] = &fields[..] {
+ info!(target: "nix","building {}", drv)
+ } else {
+ warn!("bad build log: {:?}", log)
+ }
+ },
+ NixLog::Start { ref fields, typ, .. } if typ == 100 && fields.len() >= 3 => {
+ if let [LogField::String(drv), LogField::String(from), LogField::String(to), ..] = &fields[..] {
+ info!(target: "nix","copying {} {} -> {}", drv, from, to)
+ } else {
+ warn!("bad copy log: {:?}", log)
+ }
+ },
+ NixLog::Start { text, typ, .. } if typ == 0 || typ == 102 || typ == 103 || typ == 104 => {
+ if !text.is_empty() && text != "querying info about missing paths" && text != "copying 0 paths" {
+ info!(target: "nix", "{}", text)
+ }
+ },
+ NixLog::Stop { .. } => {},
+ NixLog::Result { .. } => {},
+ _ => warn!("unknown log: {:?}", log)
+ };
+ } else {
+ warn!(target="nix","unknown: {}", e)
+ }
+ }
+ },
+ o = out.next() => {
+ if let Some(o) = o {
+ out_buf.extend_from_slice(&o?);
+ }
+ },
+ code = child.wait() => {
+ let code = code?;
+ if !code.success() {
+ anyhow::bail!("command ({:?}) failed with status {}", self, code);
+ }
+ break;
+ }
+ }
+ }
+
+ Ok(String::from_utf8(out_buf)?)
+ }
+
fn inherit_stdio(&mut self) -> &mut Self {
self.stderr(Stdio::inherit());
self
}
- fn run(&mut self) -> Result<()> {
+ async fn run(&mut self) -> Result<()> {
self.inherit_stdio();
- let out = self.output()?;
+ let out = self.output().await?;
if !out.status.success() {
anyhow::bail!("command ({:?}) failed with status {}", self, out.status);
}
Ok(())
}
- fn run_json<T: DeserializeOwned>(&mut self) -> Result<T> {
- let str = self.run_string()?;
+ async fn run_json<T: DeserializeOwned>(&mut self) -> Result<T> {
+ let str = self.run_string().await?;
serde_json::from_str(&str).with_context(|| format!("{:?}", str))
}
- fn run_string(&mut self) -> Result<String> {
+ async fn run_string(&mut self) -> Result<String> {
self.inherit_stdio();
- let out = self.output()?;
+ let out = self.output().await?;
if !out.status.success() {
anyhow::bail!("command ({:?}) failed with status {}", self, out.status);
}
cmds/fleet/src/host.rsdiffbeforeafterboth--- a/cmds/fleet/src/host.rs
+++ b/cmds/fleet/src/host.rs
@@ -4,7 +4,6 @@
ffi::{OsStr, OsString},
ops::Deref,
path::PathBuf,
- process::Command,
sync::Arc,
};
@@ -12,6 +11,7 @@
use serde::de::DeserializeOwned;
use structopt::clap::ArgGroup;
use structopt::StructOpt;
+use tokio::process::Command;
use crate::{command::CommandExt, fleetdata::FleetData};
@@ -73,15 +73,15 @@
str
}
- pub fn list_hosts(&self) -> Result<Vec<String>> {
+ pub async fn list_hosts(&self) -> Result<Vec<String>> {
Command::new("nix")
.arg("eval")
.arg(self.full_attr_name("fleetConfigurations.default.configuredHosts"))
.args(&["--apply", "builtins.attrNames", "--json", "--show-trace"])
- .inherit_stdio()
- .run_json()
+ .run_nix_json()
+ .await
}
- pub fn config_attr<T: DeserializeOwned>(&self, host: &str, attr: &str) -> Result<T> {
+ pub async fn config_attr<T: DeserializeOwned>(&self, host: &str, attr: &str) -> Result<T> {
Command::new("nix")
.arg("eval")
.arg(self.full_attr_name(&format!(
@@ -89,8 +89,8 @@
host, attr
)))
.args(&["--json", "--show-trace"])
- .inherit_stdio()
- .run_json()
+ .run_nix_json()
+ .await
}
pub fn data(&self) -> Ref<FleetData> {
cmds/fleet/src/keys.rsdiffbeforeafterboth--- a/cmds/fleet/src/keys.rs
+++ b/cmds/fleet/src/keys.rs
@@ -2,7 +2,7 @@
use crate::{command::CommandExt, host::Config};
use anyhow::{anyhow, Result};
-use log::warn;
+use tracing::warn;
impl Config {
pub fn cached_key(&self, host: &str) -> Option<String> {
@@ -21,7 +21,7 @@
host.encryption_key = key.trim().to_string();
}
- pub fn key(&self, host: &str) -> anyhow::Result<String> {
+ pub async fn key(&self, host: &str) -> anyhow::Result<String> {
if let Some(key) = self.cached_key(host) {
Ok(key)
} else {
@@ -29,19 +29,20 @@
let key = self
.command_on(host, "cat", false)
.arg("/etc/ssh/ssh_host_ed25519_key.pub")
- .run_string()?;
+ .run_string()
+ .await?;
self.update_key(host, key.clone());
Ok(key)
}
}
- pub fn recipient(&self, host: &str) -> anyhow::Result<age::ssh::Recipient> {
- let key = self.key(host)?;
+ pub async fn recipient(&self, host: &str) -> anyhow::Result<age::ssh::Recipient> {
+ let key = self.key(host).await?;
age::ssh::Recipient::from_str(&key).map_err(|e| anyhow!("parse recipient error: {:?}", e))
}
- pub fn orphaned_data(&self) -> Result<Vec<String>> {
+ pub async fn orphaned_data(&self) -> Result<Vec<String>> {
let mut out = Vec::new();
- let host_names = self.list_hosts()?;
+ let host_names = self.list_hosts().await?;
for hostname in self
.data()
.hosts
cmds/fleet/src/main.rsdiffbeforeafterboth--- a/cmds/fleet/src/main.rs
+++ b/cmds/fleet/src/main.rs
@@ -1,3 +1,5 @@
+#![feature(try_blocks)]
+
pub mod command;
pub mod host;
pub mod keys;
@@ -7,12 +9,16 @@
mod fleetdata;
-use anyhow::Result;
+use std::io;
+
+use anyhow::{anyhow, Result};
use structopt::clap::AppSettings::*;
use structopt::StructOpt;
use cmds::{build_systems::BuildSystems, info::Info, secrets::Secrets};
use host::{Config, FleetOpts};
+use tracing::{info, metadata::LevelFilter};
+use tracing_subscriber::EnvFilter;
#[derive(StructOpt)]
enum Opts {
@@ -38,23 +44,34 @@
command: Opts,
}
-fn run_command(config: &Config, command: Opts) -> Result<()> {
+async fn run_command(config: &Config, command: Opts) -> Result<()> {
match command {
- Opts::BuildSystems(c) => c.run(config)?,
- Opts::Secrets(s) => s.run(config)?,
- Opts::Info(i) => i.run(config)?,
+ Opts::BuildSystems(c) => c.run(config).await?,
+ Opts::Secrets(s) => s.run(config).await?,
+ Opts::Info(i) => i.run(config).await?,
};
Ok(())
}
-fn main() -> Result<()> {
- env_logger::Builder::new()
- .filter_level(log::LevelFilter::Info)
- .init();
+#[tokio::main]
+async fn main() -> Result<()> {
+ let filter = EnvFilter::from_default_env().add_directive(LevelFilter::INFO.into());
+ tracing_subscriber::FmtSubscriber::builder()
+ .with_env_filter(filter)
+ .without_time()
+ .with_target(false)
+ .with_writer(|| {
+ // eprintln!("Line");
+ io::stderr()
+ })
+ .try_init()
+ .map_err(|e| anyhow!("Failed to initialize logger: {}", e))?;
+
+ info!("Starting");
let opts = RootOpts::from_args();
let config = opts.fleet_opts.build()?;
- match run_command(&config, opts.command) {
+ match run_command(&config, opts.command).await {
Ok(()) => {
config.save()?;
Ok(())
modules/fleet/meta.nixdiffbeforeafterboth--- a/modules/fleet/meta.nix
+++ b/modules/fleet/meta.nix
@@ -45,6 +45,6 @@
hosts = fleet.hostsToAttrs (host: {
modules = config.globalModules;
});
- globalModules = import ../nixos/_modules.nix;
+ globalModules = import ../../nixos/modules/module-list.nix;
};
}
modules/nixos/_modules.nixdiffbeforeafterboth--- a/modules/nixos/_modules.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-[
- ./fleetPkgs.nix
- ./meta.nix
- ./secrets.nix
-]
modules/nixos/fleetPkgs.nixdiffbeforeafterboth--- a/modules/nixos/fleetPkgs.nix
+++ /dev/null
@@ -1,3 +0,0 @@
-{ ... }: {
- nixpkgs.overlays = [ (import ../../pkgs) ];
-}
modules/nixos/meta.nixdiffbeforeafterboth--- a/modules/nixos/meta.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{ lib, ... }:
-with lib;
-{
- options = with types; {
- tags = mkOption {
- type = listOf str;
- description = "Host tags";
- default = [ ];
- };
- network = mkOption {
- type = submodule {
- options = {
- internalIps = mkOption {
- type = listOf str;
- description = "Internal ips";
- default = [ ];
- };
- externalIps = mkOption {
- type = listOf str;
- description = "External ips";
- default = [ ];
- };
- };
- };
- description = "Network definition of host";
- };
- };
- config = {
- tags = [ "all" ];
- network = { };
- };
-}
modules/nixos/secrets.nixdiffbeforeafterboth--- a/modules/nixos/secrets.nix
+++ /dev/null
@@ -1,68 +0,0 @@
-{ lib, config, pkgs, ... }:
-
-with lib;
-
-let
- sysConfig = config;
- secretType = types.submodule ({ config, ... }: {
- config = {
- path = mkOptionDefault "/run/secrets/${config._module.args.name}";
- publicPath = mkOptionDefault (pkgs.writeText "pub-${config._module.args.name}" config.public);
- };
- options = {
- public = mkOption {
- type = types.nullOr types.str;
- description = "Secret public data";
- default = null;
- };
- secret = mkOption {
- type = types.nullOr types.str;
- description = "Encrypted secret data";
- default = null;
- };
- mode = mkOption {
- type = types.str;
- description = "Secret mode";
- default = "0440";
- };
- owner = mkOption {
- type = types.str;
- description = "Owner of the secret";
- default = "root";
- };
- group = mkOption {
- type = types.str;
- description = "Group of the secret";
- default = sysConfig.users.users.${config.owner}.group;
- };
-
- path = mkOption {
- type = types.str;
- description = "Path to the decrypted secret";
- };
- publicPath = mkOption {
- type = types.package;
- description = "Path to the public part of secret";
- };
- };
- });
- secretsFile = pkgs.writeTextFile {
- name = "secrets.json";
- text = builtins.toJSON config.secrets;
- };
-in
-{
- options = {
- secrets = mkOption {
- type = types.attrsOf secretType;
- default = { };
- description = "Host-local secrets";
- };
- };
- config = {
- system.activationScripts.decryptSecrets = stringAfter [ "users" "groups" "specialfs" ] ''
- 1>&2 echo "setting up secrets"
- ${pkgs.fleet-install-secrets}/bin/fleet-install-secrets ${secretsFile}
- '';
- };
-}
nixos/fleetPkgs.nixdiffbeforeafterboth--- /dev/null
+++ b/nixos/fleetPkgs.nix
@@ -0,0 +1,3 @@
+{ ... }: {
+ nixpkgs.overlays = [ (import ../pkgs) ];
+}
nixos/meta.nixdiffbeforeafterboth--- /dev/null
+++ b/nixos/meta.nix
@@ -0,0 +1,32 @@
+{ lib, ... }:
+with lib;
+{
+ options = with types; {
+ tags = mkOption {
+ type = listOf str;
+ description = "Host tags";
+ default = [ ];
+ };
+ network = mkOption {
+ type = submodule {
+ options = {
+ internalIps = mkOption {
+ type = listOf str;
+ description = "Internal ips";
+ default = [ ];
+ };
+ externalIps = mkOption {
+ type = listOf str;
+ description = "External ips";
+ default = [ ];
+ };
+ };
+ };
+ description = "Network definition of host";
+ };
+ };
+ config = {
+ tags = [ "all" ];
+ network = { };
+ };
+}
nixos/modules/module-list.nixdiffbeforeafterboth--- /dev/null
+++ b/nixos/modules/module-list.nix
@@ -0,0 +1,5 @@
+[
+ ../fleetPkgs.nix
+ ../meta.nix
+ ../secrets.nix
+]
nixos/secrets.nixdiffbeforeafterboth--- /dev/null
+++ b/nixos/secrets.nix
@@ -0,0 +1,68 @@
+{ lib, config, pkgs, ... }:
+
+with lib;
+
+let
+ sysConfig = config;
+ secretType = types.submodule ({ config, ... }: {
+ config = {
+ path = mkOptionDefault "/run/secrets/${config._module.args.name}";
+ publicPath = mkOptionDefault (pkgs.writeText "pub-${config._module.args.name}" config.public);
+ };
+ options = {
+ public = mkOption {
+ type = types.nullOr types.str;
+ description = "Secret public data";
+ default = null;
+ };
+ secret = mkOption {
+ type = types.nullOr types.str;
+ description = "Encrypted secret data";
+ default = null;
+ };
+ mode = mkOption {
+ type = types.str;
+ description = "Secret mode";
+ default = "0440";
+ };
+ owner = mkOption {
+ type = types.str;
+ description = "Owner of the secret";
+ default = "root";
+ };
+ group = mkOption {
+ type = types.str;
+ description = "Group of the secret";
+ default = sysConfig.users.users.${config.owner}.group;
+ };
+
+ path = mkOption {
+ type = types.str;
+ description = "Path to the decrypted secret";
+ };
+ publicPath = mkOption {
+ type = types.package;
+ description = "Path to the public part of secret";
+ };
+ };
+ });
+ secretsFile = pkgs.writeTextFile {
+ name = "secrets.json";
+ text = builtins.toJSON config.secrets;
+ };
+in
+{
+ options = {
+ secrets = mkOption {
+ type = types.attrsOf secretType;
+ default = { };
+ description = "Host-local secrets";
+ };
+ };
+ config = {
+ system.activationScripts.decryptSecrets = stringAfter [ "users" "groups" "specialfs" ] ''
+ 1>&2 echo "setting up secrets"
+ ${pkgs.fleet-install-secrets}/bin/fleet-install-secrets ${secretsFile}
+ '';
+ };
+}