git.delta.rocks / jrsonnet / refs/commits / 41ecf404fcd9

difftreelog

feat better logs

Yaroslav Bolyukin2021-12-20parent: #cf28306.patch.diff
in: trunk

18 files changed

modifiedCargo.lockdiffbeforeafterboth
17 "generic-array",17 "generic-array",
18]18]
19
20[[package]]
21name = "aead"
22version = "0.4.3"
23source = "registry+https://github.com/rust-lang/crates.io-index"
24checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
25dependencies = [
26 "generic-array",
27]
1928
20[[package]]29[[package]]
21name = "aes"30name = "aes"
28 "cipher 0.2.5",37 "cipher 0.2.5",
29]38]
39
40[[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]
3052
31[[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]
4264
43[[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]
120
121[[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]
98154
99[[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]
171
172[[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]
115187
116[[package]]188[[package]]
117name = "aho-corasick"189name = "aho-corasick"
131 "winapi",203 "winapi",
132]204]
205
206[[package]]
207name = "ansi_term"
208version = "0.12.1"
209source = "registry+https://github.com/rust-lang/crates.io-index"
210checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
211dependencies = [
212 "winapi",
213]
133214
134[[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"
220
221[[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]
139231
140[[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"
254
255[[package]]
256name = "base58"
257version = "0.2.0"
258source = "registry+https://github.com/rust-lang/crates.io-index"
259checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581"
162260
163[[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"
266
267[[package]]
268name = "base64ct"
269version = "1.1.1"
270source = "registry+https://github.com/rust-lang/crates.io-index"
271checksum = "e6b4d9b1225d28d360ec6a231d65af1fd99a2a095154c8040689617290569c5c"
168272
169[[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]
285
286[[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]
181297
182[[package]]298[[package]]
183name = "bech32"299name = "bech32"
212 "generic-array",328 "generic-array",
213]329]
330
331[[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]
214339
215[[package]]340[[package]]
216name = "block-modes"341name = "block-modes"
222 "cipher 0.2.5",347 "cipher 0.2.5",
223]348]
349
350[[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]
224359
225[[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"
388
389[[package]]
390name = "bytes"
391version = "1.1.0"
392source = "registry+https://github.com/rust-lang/crates.io-index"
393checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
253394
254[[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"
416
417[[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]
275428
276[[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]
440
441[[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]
287453
288[[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]
500
501[[package]]
502name = "const-oid"
503version = "0.6.2"
504source = "registry+https://github.com/rust-lang/crates.io-index"
505checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b"
334506
335[[package]]507[[package]]
336name = "cookie-factory"508name = "cookie-factory"
347 "libc",519 "libc",
348]520]
521
522[[package]]
523name = "cpufeatures"
524version = "0.2.1"
525source = "registry+https://github.com/rust-lang/crates.io-index"
526checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
527dependencies = [
528 "libc",
529]
349530
350[[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"
536
537[[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]
547
548[[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]
355556
356[[package]]557[[package]]
357name = "crypto-mac"558name = "crypto-mac"
372 "cipher 0.2.5",573 "cipher 0.2.5",
373]574]
575
576[[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]
374584
375[[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]
607
608[[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]
397617
398[[package]]618[[package]]
399name = "digest"619name = "digest"
404 "generic-array",624 "generic-array",
405]625]
626
627[[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]
406638
407[[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]
462699
463[[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]
725
726[[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]
488735
489[[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"
781
782[[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]
796
797[[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]
806
807[[package]]
808name = "futures-core"
809version = "0.3.18"
810source = "registry+https://github.com/rust-lang/crates.io-index"
811checksum = "629316e42fe7c2a0b9a65b47d159ceaa5453ab14e8f0a3c5eedbb8cd55b4a445"
812
813[[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]
823
824[[package]]
825name = "futures-io"
826version = "0.3.18"
827source = "registry+https://github.com/rust-lang/crates.io-index"
828checksum = "e481354db6b5c353246ccf6a728b0c5511d752c08da7260546fc0933869daa11"
829
830[[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]
842
843[[package]]
844name = "futures-sink"
845version = "0.3.18"
846source = "registry+https://github.com/rust-lang/crates.io-index"
847checksum = "996c6442437b62d21a32cd9906f9c41e7dc1e19a9579843fad948696769305af"
848
849[[package]]
850name = "futures-task"
851version = "0.3.18"
852source = "registry+https://github.com/rust-lang/crates.io-index"
853checksum = "dabf1872aaab32c886832f2276d2f5399887e2bd613698a02359e4ea83f8de12"
854
855[[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]
534875
535[[package]]876[[package]]
536name = "generic-array"877name = "generic-array"
582 "libc",923 "libc",
583]924]
925
926[[package]]
927name = "hex-literal"
928version = "0.3.4"
929source = "registry+https://github.com/rust-lang/crates.io-index"
930checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
584931
585[[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]
594941
595[[package]]942[[package]]
599checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"946checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
600dependencies = [947dependencies = [
601 "crypto-mac",948 "crypto-mac",
602 "digest",949 "digest 0.9.0",
603]950]
951
952[[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]
604960
605[[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]
1011
1012[[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]
6551031
656[[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]
1052
1053[[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]
6761073
677[[package]]1074[[package]]
678name = "i18n-embed-impl"1075name = "i18n-embed-impl"
687 "syn",1084 "syn",
688]1085]
1086
1087[[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]
6891099
690[[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"
1185
1186[[package]]
1187name = "matchers"
1188version = "0.1.0"
1189source = "registry+https://github.com/rust-lang/crates.io-index"
1190checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
1191dependencies = [
1192 "regex-automata",
1193]
7751194
776[[package]]1195[[package]]
777name = "memchr"1196name = "memchr"
788 "autocfg 1.0.1",1207 "autocfg 1.0.1",
789]1208]
1209
1210[[package]]
1211name = "minimal-lexical"
1212version = "0.2.1"
1213source = "registry+https://github.com/rust-lang/crates.io-index"
1214checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
1215
1216[[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]
1228
1229[[package]]
1230name = "miow"
1231version = "0.3.7"
1232source = "registry+https://github.com/rust-lang/crates.io-index"
1233checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
1234dependencies = [
1235 "winapi",
1236]
7901237
791[[package]]1238[[package]]
792name = "nix"1239name = "nix"
824 "version_check",1271 "version_check",
825]1272]
1273
1274[[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]
1284
1285[[package]]
1286name = "ntapi"
1287version = "0.3.6"
1288source = "registry+https://github.com/rust-lang/crates.io-index"
1289checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
1290dependencies = [
1291 "winapi",
1292]
8261293
827[[package]]1294[[package]]
828name = "num-bigint"1295name = "num-bigint"
854 "zeroize",1321 "zeroize",
855]1322]
1323
1324[[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]
8561341
857[[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]
8861372
887[[package]]1373[[package]]
963 "crypto-mac",1449 "crypto-mac",
964]1450]
1451
1452[[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]
9651460
966[[package]]1461[[package]]
967name = "peg"1462name = "peg"
1001 "regex",1496 "regex",
1002]1497]
1498
1499[[package]]
1500name = "pem-rfc7468"
1501version = "0.2.4"
1502source = "registry+https://github.com/rust-lang/crates.io-index"
1503checksum = "84e93a3b1cc0510b03020f33f21e62acdde3dcaef432edc95bea377fbd4c2cd4"
1504dependencies = [
1505 "base64ct",
1506]
10031507
1004[[package]]1508[[package]]
1005name = "pin-project"1509name = "pin-project"
1021 "syn",1525 "syn",
1022]1526]
1527
1528[[package]]
1529name = "pin-project-lite"
1530version = "0.2.7"
1531source = "registry+https://github.com/rust-lang/crates.io-index"
1532checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
1533
1534[[package]]
1535name = "pin-utils"
1536version = "0.1.0"
1537source = "registry+https://github.com/rust-lang/crates.io-index"
1538checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1539
1540[[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]
1550
1551[[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]
10231563
1024[[package]]1564[[package]]
1025name = "poly1305"1565name = "poly1305"
1031 "universal-hash",1571 "universal-hash",
1032]1572]
1573
1574[[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]
10331584
1034[[package]]1585[[package]]
1035name = "ppv-lite86"1586name = "ppv-lite86"
1061 "version_check",1612 "version_check",
1062]1613]
1614
1615[[package]]
1616name = "proc-macro-hack"
1617version = "0.5.19"
1618source = "registry+https://github.com/rust-lang/crates.io-index"
1619checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
1620
1621[[package]]
1622name = "proc-macro-nested"
1623version = "0.1.7"
1624source = "registry+https://github.com/rust-lang/crates.io-index"
1625checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
10631626
1064[[package]]1627[[package]]
1065name = "proc-macro2"1628name = "proc-macro2"
1186 "regex-syntax",1749 "regex-syntax",
1187]1750]
1751
1752[[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]
11881760
1189[[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]
1797
1798[[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]
12251817
1226[[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]
1828
1829[[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]
12361839
1237[[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]
1852
1853[[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]
12491865
1250[[package]]1866[[package]]
1251name = "rust-embed-utils"1867name = "rust-embed-utils"
1256 "walkdir",1872 "walkdir",
1257]1873]
1874
1875[[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]
12581884
1259[[package]]1885[[package]]
1260name = "rustc-hash"1886name = "rustc-hash"
1277 "cipher 0.3.0",1903 "cipher 0.3.0",
1278]1904]
1905
1906[[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]
12791914
1280[[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]
1941
1942[[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]
13061953
1307[[package]]1954[[package]]
1308name = "secrecy"1955name = "secrecy"
1313 "zeroize",1960 "zeroize",
1314]1961]
1962
1963[[package]]
1964name = "secrecy"
1965version = "0.8.0"
1966source = "registry+https://github.com/rust-lang/crates.io-index"
1967checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
1968dependencies = [
1969 "zeroize",
1970]
13151971
1316[[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]
2015
2016[[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]
2026
2027[[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]
2035
2036[[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]
13592044
1360[[package]]2045[[package]]
1361name = "simple_asn1"2046name = "simple_asn1"
1368 "num-traits",2053 "num-traits",
1369]2054]
2055
2056[[package]]
2057name = "slab"
2058version = "0.4.5"
2059source = "registry+https://github.com/rust-lang/crates.io-index"
2060checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
13702061
1371[[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"
2073
2074[[package]]
2075name = "spki"
2076version = "0.4.1"
2077source = "registry+https://github.com/rust-lang/crates.io-index"
2078checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32"
2079dependencies = [
2080 "der",
2081]
13822082
1383[[package]]2083[[package]]
1384name = "stable_deref_trait"2084name = "stable_deref_trait"
1509 "syn",2209 "syn",
1510]2210]
2211
2212[[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]
15112220
1512[[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"
2246
2247[[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]
2266
2267[[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]
2277
2278[[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]
15372291
1538[[package]]2292[[package]]
1539name = "toml"2293name = "toml"
1544 "serde",2298 "serde",
1545]2299]
2300
2301[[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]
2312
2313[[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]
2323
2324[[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]
2332
2333[[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]
2343
2344[[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]
15462361
1547[[package]]2362[[package]]
1548name = "type-map"2363name = "type-map"
16802495
1681[[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",
16972512
1698[[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]
modifiedcmds/fleet/Cargo.tomldiffbeforeafterboth
77
8[dependencies]8[dependencies]
9anyhow = "1.0"9anyhow = "1.0"
10log = "0.4.14"
11env_logger = "0.9.0"
12serde = { version = "1.0", features = ["derive"] }10serde = { version = "1.0", features = ["derive"] }
13serde_json = "1.0"11serde_json = "1.0"
14time = { version = "0.3.2", features = ["serde"] }12time = { version = "0.3.2", features = ["serde"] }
15tempfile = "3.2"13tempfile = "3.2"
16once_cell = "1.5"14once_cell = "1.5"
17hostname = "0.3.1"15hostname = "0.3.1"
18age-core = "0.6.0"16age-core = "0.7.0"
19peg = "0.7.0"17peg = "0.7.0"
20nixlike = {path = "../../crates/nixlike"}18nixlike = {path = "../../crates/nixlike"}
21age = { version = "0.6.0", features = ["ssh", "armor"] }19age = { version = "0.7.0", features = ["ssh", "armor"] }
22base64 = "0.13.0"20base64 = "0.13.0"
23chrono = { version = "0.4.19", features = ["serde"] }21chrono = { version = "0.4.19", features = ["serde"] }
24z85 = "3.0.3"22z85 = "3.0.3"
23base58 = "*"
25structopt = "0.3.23"24structopt = "0.3.23"
25tokio = { version = "1.14.0", features = ["full"] }
26tracing = "0.1.29"
27tracing-subscriber = { version = "0.3.3", features = ["fmt", "env-filter"] }
28tokio-util = { version = "0.6.9", features = ["codec"] }
29async-trait = "0.1.52"
30futures = "0.3.17"
2631
modifiedcmds/fleet/src/cmds/build_systems.rsdiffbeforeafterboth
1use std::{env::current_dir, process::Command};1use std::{env::current_dir, time::Duration};
22
3use crate::{command::CommandExt, host::Config, nix::SYSTEMS_ATTRIBUTE};3use crate::{command::CommandExt, host::Config, nix::SYSTEMS_ATTRIBUTE};
4use anyhow::Result;4use anyhow::Result;
5use log::info;5use structopt::StructOpt;
6use structopt::StructOpt;6use tokio::{process::Command, task::LocalSet, time::sleep};
7use tracing::{error, field, info, info_span, warn, Instrument};
78
8#[derive(StructOpt)]9#[derive(StructOpt, Clone)]
9pub struct BuildSystems {10pub struct BuildSystems {
10 /// --builders arg for nix11 /// --builders arg for nix
11 #[structopt(long)]12 #[structopt(long)]
78}79}
7980
80impl BuildSystems {81impl BuildSystems {
81 pub fn run(self, config: &Config) -> Result<()> {82 pub async fn run(self, config: &Config) -> Result<()> {
82 let hosts = config.list_hosts()?;83 let hosts = config.list_hosts().await?;
8384 let set = LocalSet::new();
85 let this = &self;
84 for host in hosts.iter() {86 for host in hosts.iter() {
85 if config.should_skip(host) {87 if config.should_skip(host) {
86 continue;88 continue;
87 }89 }
90 let config = config.clone();
91 let host = host.clone();
92 let this = this.clone();
88 info!("Building host {}", host);93 let span = info_span!("deployment", host = field::display(&host));
94 set.spawn_local(
95 (async move {
96 let res: Result<()> = try {
97 info!("building");
89 let built = {98 let built = {
90 let dir = tempfile::tempdir()?;99 let dir = tempfile::tempdir()?;
91 dir.path().to_owned()100 dir.path().to_owned()
92 };101 };
93102
94 let mut nix_build = if self.privileged_build {103 let mut nix_build = if this.privileged_build {
95 let mut out = Command::new("sudo");104 let mut out = Command::new("sudo");
96 out.arg("nix");105 out.arg("nix");
97 out106 out
102 .args(&["build", "--impure", "--no-link", "--out-link"])111 .args(&[
112 "build",
113 "--impure",
114 "--json",
115 // "--show-trace",
116 "--no-link",
117 "--out-link",
118 ])
103 .arg(&built)119 .arg(&built)
104 .arg(format!(120 .arg(format!(
105 "{}.{}.config.system.build.toplevel",121 "{}.{}.config.system.build.toplevel",
106 SYSTEMS_ATTRIBUTE, host,122 SYSTEMS_ATTRIBUTE, host,
107 ));123 ));
108124
109 if let Some(builders) = &self.builders {125 if let Some(builders) = &this.builders {
110 nix_build.arg("--builders").arg(builders);126 nix_build.arg("--builders").arg(builders);
111 }127 }
112 if let Some(jobs) = &self.jobs {128 if let Some(jobs) = &this.jobs {
113 nix_build.arg("--max-jobs");129 nix_build.arg("--max-jobs");
114 nix_build.arg(format!("{}", jobs));130 nix_build.arg(format!("{}", jobs));
115 }131 }
116 if !self.fail_fast {132 if !this.fail_fast {
117 nix_build.arg("--keep-going");133 nix_build.arg("--keep-going");
118 }134 }
119135
120 nix_build.inherit_stdio().run()?;136 nix_build.run_nix().await?;
121 let built = std::fs::canonicalize(built)?;137 let built = std::fs::canonicalize(built)?;
122 info!("Built closure: {:?}", built);
123138
124 let action = Action::from(self.subcommand.clone());139 let action = Action::from(this.subcommand.clone());
125140
126 match action {141 match action {
127 Action::Upload(action) => {142 Action::Upload(action) => {
128 if !config.is_local(host) {143 if !config.is_local(&host) {
129 info!("Uploading system closure");144 info!("uploading system closure");
145 let mut tries = 0;
146 loop {
130 Command::new("nix")147 match Command::new("nix")
131 .args(&["copy", "--to"])148 .args(&["copy", "--to"])
132 .arg(format!("ssh://root@{}", host))149 .arg(format!("ssh://root@{}", host))
133 .arg(&built)150 .arg(&built)
134 .inherit_stdio()151 .inherit_stdio()
135 .run()?;152 .run_nix()
153 .await
154 {
155 Ok(()) => break,
156 Err(e) if tries < 3 => {
157 tries += 1;
158 warn!("Copy failure ({}/3): {}", tries, e);
159 sleep(Duration::from_millis(5000)).await;
160 }
161 Err(e) => return Err(e),
162 }
163 }
136 }164 }
137 if let Some(action) = action {165 if let Some(action) = action {
138 if action.should_switch_profile() {166 if action.should_switch_profile() {
139 info!("Switching generation");167 info!("switching generation");
140 config168 config
141 .command_on(host, "nix-env", true)
142 .args(&["-p", "/nix/var/nix/profiles/system", "--set"])169 .command_on(&host, "nix-env", true)
170 .args(&["-p", "/nix/var/nix/profiles/system", "--set"])
143 .arg(&built)171 .arg(&built)
144 .inherit_stdio()172 .inherit_stdio()
145 .run()?;173 .run()
174 .await?;
146 }175 }
147 info!("Executing activation script");176 info!("executing activation script");
148 let mut switch_script = built.clone();177 let mut switch_script = built.clone();
149 switch_script.push("bin");178 switch_script.push("bin");
150 switch_script.push("switch-to-configuration");179 switch_script.push("switch-to-configuration");
151 config180 config
152 .command_on(host, switch_script, true)181 .command_on(&host, switch_script, true)
153 .arg(action.name())182 .arg(action.name())
154 .inherit_stdio()183 .inherit_stdio()
184 .run()
155 .run()?;185 .await?;
156 }186 }
157 }187 }
158 Action::Package(PackageAction::SdImage) => {188 Action::Package(PackageAction::SdImage) => {
159 let mut out = current_dir()?;189 let mut out = current_dir()?;
160 out.push(format!("sd-image-{}", host));190 out.push(format!("sd-image-{}", host));
161191
162 info!("Building sd image to {:?}", out);192 info!("building sd image to {:?}", out);
163 let mut nix_build = if self.privileged_build {193 let mut nix_build = if this.privileged_build {
164 let mut out = Command::new("sudo");194 let mut out = Command::new("sudo");
165 out.arg("nix");195 out.arg("nix");
166 out196 out
174 "{}.{}.config.system.build.sdImage",204 "{}.{}.config.system.build.sdImage",
175 SYSTEMS_ATTRIBUTE, host,205 SYSTEMS_ATTRIBUTE, host,
176 ));206 ));
177 if let Some(builders) = &self.builders {207 if let Some(builders) = &this.builders {
178 nix_build.arg("--builders").arg(builders);208 nix_build.arg("--builders").arg(builders);
179 }209 }
180 if let Some(jobs) = &self.jobs {210 if let Some(jobs) = &this.jobs {
181 nix_build.arg("--max-jobs");211 nix_build.arg("--max-jobs");
182 nix_build.arg(format!("{}", jobs));212 nix_build.arg(format!("{}", jobs));
183 }213 }
184 if !self.fail_fast {214 if !this.fail_fast {
185 nix_build.arg("--keep-going");215 nix_build.arg("--keep-going");
186 }216 }
187217
188 nix_build.inherit_stdio().run()?;218 nix_build.inherit_stdio().run_nix().await?;
189 }219 }
190 };220 };
221 };
222 match res {
223 Ok(_) => {}
224 Err(e) => {
225 error!("failed to deploy host: {}", e)
226 }
227 }
228 Ok(())
229 })
230 .instrument(span),
231 );
191 }232 }
233 set.await;
192 Ok(())234 Ok(())
193 }235 }
194}236}
modifiedcmds/fleet/src/cmds/info.rsdiffbeforeafterboth
30}30}
3131
32impl Info {32impl Info {
33 pub fn run(self, config: &Config) -> Result<()> {33 pub async fn run(self, config: &Config) -> Result<()> {
34 let mut data = Vec::new();34 let mut data = Vec::new();
35 match self.cmd {35 match self.cmd {
36 InfoCmd::ListHosts { ref tagged } => {36 InfoCmd::ListHosts { ref tagged } => {
37 'host: for host in config.list_hosts()? {37 'host: for host in config.list_hosts().await? {
38 if !tagged.is_empty() {38 if !tagged.is_empty() {
39 let tags: Vec<String> = config.config_attr(&host, "tags")?;39 let tags: Vec<String> = config.config_attr(&host, "tags").await?;
40 for tag in tagged {40 for tag in tagged {
41 if !tags.contains(&tag) {41 if !tags.contains(&tag) {
42 continue 'host;42 continue 'host;
60 out.extend(config.config_attr::<Vec<String>>(&host, "network.externalIps")?);60 out.extend(
61 config
62 .config_attr::<Vec<String>>(&host, "network.externalIps")
63 .await?,
64 );
61 }65 }
62 if internal {66 if internal {
63 out.extend(config.config_attr::<Vec<String>>(&host, "network.internalIps")?);67 out.extend(
68 config
69 .config_attr::<Vec<String>>(&host, "network.internalIps")
70 .await?,
71 );
64 }72 }
65 for ip in out {73 for ip in out {
modifiedcmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth
3 host::Config,3 host::Config,
4};4};
5use anyhow::{bail, Result};5use anyhow::{bail, Result};
6use futures::{StreamExt, TryStreamExt};
6use std::{7use std::{
7 io::{self, Cursor, Read},8 io::{self, Cursor, Read},
8 path::PathBuf,9 path::PathBuf,
44}45}
4546
46impl Secrets {47impl Secrets {
47 pub fn run(self, config: &Config) -> Result<()> {48 pub async fn run(self, config: &Config) -> Result<()> {
48 match self {49 match self {
49 Secrets::ForceKeys => {50 Secrets::ForceKeys => {
50 for host in config.list_hosts()? {51 for host in config.list_hosts().await? {
51 if config.should_skip(&host) {52 if config.should_skip(&host) {
52 continue;53 continue;
53 }54 }
54 config.key(&host)?;55 config.key(&host).await?;
55 }56 }
56 }57 }
57 Secrets::AddShared {58 Secrets::AddShared {
61 public,62 public,
62 public_file,63 public_file,
63 } => {64 } => {
64 let recipients = machines65 let recipients = futures::stream::iter(machines.iter())
65 .iter()
66 .map(|m| config.recipient(m))66 .then(|m| config.recipient(m))
67 .try_collect::<Vec<_>>()
67 .collect::<Result<Vec<_>>>()?;68 .await?;
6869
69 let secret = {70 let secret = {
70 let mut input = vec![];71 let mut input = vec![];
117 public,118 public,
118 public_file,119 public_file,
119 } => {120 } => {
120 let recipient = config.recipient(&machine)?;121 let recipient = config.recipient(&machine).await?;
121122
122 let secret = {123 let secret = {
123 let mut input = vec![];124 let mut input = vec![];
modifiedcmds/fleet/src/command.rsdiffbeforeafterboth
1use std::{1use std::{ffi::OsStr, process::Stdio};
2 ffi::OsStr,
3 process::{Command, Stdio},
4};
52
6use anyhow::{Context, Result};3use anyhow::{Context, Result};
4use async_trait::async_trait;
5use futures::StreamExt;
7use serde::de::DeserializeOwned;6use serde::{
87 de::{DeserializeOwned, Visitor},
8 Deserialize,
9};
10use tokio::{process::Command, select};
11use tokio_util::codec::{BytesCodec, FramedRead, LinesCodec};
12use tracing::{info, warn};
13
14#[async_trait]
9pub trait CommandExt {15pub trait CommandExt {
16 async fn run_nix(&mut self) -> Result<()>;
17 async fn run_nix_json<T: DeserializeOwned>(&mut self) -> Result<T>;
18 async fn run_nix_string(&mut self) -> Result<String>;
10 fn run(&mut self) -> Result<()>;19 async fn run(&mut self) -> Result<()>;
11 fn run_json<T: DeserializeOwned>(&mut self) -> Result<T>;20 async fn run_json<T: DeserializeOwned>(&mut self) -> Result<T>;
12 fn run_string(&mut self) -> Result<String>;21 async fn run_string(&mut self) -> Result<String>;
13 fn inherit_stdio(&mut self) -> &mut Self;22 fn inherit_stdio(&mut self) -> &mut Self;
14 fn ssh_on(host: impl AsRef<OsStr>, command: impl AsRef<OsStr>) -> Self;23 fn ssh_on(host: impl AsRef<OsStr>, command: impl AsRef<OsStr>) -> Self;
15}24}
1625
26#[derive(Debug)]
27enum LogField {
28 String(String),
29 Num(u64),
30}
31
32impl<'de> Deserialize<'de> for LogField {
33 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
34 where
35 D: serde::Deserializer<'de>,
36 {
37 struct StringOrNum;
38 impl<'de> Visitor<'de> for StringOrNum {
39 type Value = LogField;
40
41 fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
42 write!(f, "string or unsigned")
43 }
44
45 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
46 where
47 E: serde::de::Error,
48 {
49 Ok(LogField::String(v.to_owned()))
50 }
51
52 fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E>
53 where
54 E: serde::de::Error,
55 {
56 Ok(LogField::Num(v))
57 }
58 }
59
60 deserializer.deserialize_any(StringOrNum)
61 }
62}
63
64#[derive(Deserialize, Debug)]
65#[serde(rename_all = "camelCase", tag = "action")]
66enum NixLog {
67 Msg {
68 level: u32,
69 msg: String,
70 raw_msg: Option<String>,
71 },
72 Start {
73 id: u64,
74 level: u32,
75 #[serde(default)]
76 fields: Vec<LogField>,
77 text: String,
78 #[serde(rename = "type")]
79 typ: u32,
80 },
81 Stop {
82 id: u64,
83 },
84 Result {
85 id: u64,
86 #[serde(rename = "type")]
87 typ: u32,
88 },
89}
90
91#[async_trait]
17impl CommandExt for Command {92impl CommandExt for Command {
93 async fn run_nix(&mut self) -> Result<()> {
94 self.run_nix_string().await.map(|_| ())
95 }
96 async fn run_nix_json<T: DeserializeOwned>(&mut self) -> Result<T> {
97 let str = self.run_nix_string().await?;
98 serde_json::from_str(&str).with_context(|| format!("{:?}", str))
99 }
100
101 async fn run_nix_string(&mut self) -> Result<String> {
102 self.arg("--log-format").arg("internal-json");
103 self.stderr(Stdio::piped());
104 self.stdout(Stdio::piped());
105 let mut child = self.spawn()?;
106 let mut stderr = child.stderr.take().unwrap();
107 let mut stdout = child.stdout.take().unwrap();
108 let mut err = FramedRead::new(&mut stderr, LinesCodec::new());
109 let mut out = FramedRead::new(&mut stdout, BytesCodec::new());
110
111 // while let Some(line) = read.next().await? {}
112
113 let mut out_buf = vec![];
114 loop {
115 select! {
116 e = err.next() => {
117 if let Some(e) = e {
118 let e = e?;
119 if let Some(e) = e.strip_prefix("@nix ") {
120
121 let log: NixLog = match serde_json::from_str(e) {
122 Ok(l) => l,
123 Err(err) => {
124 warn!("failed to parse nix log line {:?}: {}", e, err);
125 continue;
126 },
127 };
128 match log {
129 NixLog::Msg { msg, raw_msg, .. } => {
130 if !(msg.ends_with(" is dirty") && msg.contains("warning:") && msg.contains(" Git tree ")) {
131 info!(target: "nix", "{}", raw_msg.unwrap_or(msg))
132 }
133 },
134 NixLog::Start { ref fields, typ, .. } if typ == 105 && fields.len() >= 1 => {
135 if let [LogField::String(drv), ..] = &fields[..] {
136 info!(target: "nix","building {}", drv)
137 } else {
138 warn!("bad build log: {:?}", log)
139 }
140 },
141 NixLog::Start { ref fields, typ, .. } if typ == 100 && fields.len() >= 3 => {
142 if let [LogField::String(drv), LogField::String(from), LogField::String(to), ..] = &fields[..] {
143 info!(target: "nix","copying {} {} -> {}", drv, from, to)
144 } else {
145 warn!("bad copy log: {:?}", log)
146 }
147 },
148 NixLog::Start { text, typ, .. } if typ == 0 || typ == 102 || typ == 103 || typ == 104 => {
149 if !text.is_empty() && text != "querying info about missing paths" && text != "copying 0 paths" {
150 info!(target: "nix", "{}", text)
151 }
152 },
153 NixLog::Stop { .. } => {},
154 NixLog::Result { .. } => {},
155 _ => warn!("unknown log: {:?}", log)
156 };
157 } else {
158 warn!(target="nix","unknown: {}", e)
159 }
160 }
161 },
162 o = out.next() => {
163 if let Some(o) = o {
164 out_buf.extend_from_slice(&o?);
165 }
166 },
167 code = child.wait() => {
168 let code = code?;
169 if !code.success() {
170 anyhow::bail!("command ({:?}) failed with status {}", self, code);
171 }
172 break;
173 }
174 }
175 }
176
177 Ok(String::from_utf8(out_buf)?)
178 }
179
18 fn inherit_stdio(&mut self) -> &mut Self {180 fn inherit_stdio(&mut self) -> &mut Self {
19 self.stderr(Stdio::inherit());181 self.stderr(Stdio::inherit());
20 self182 self
21 }183 }
22184
23 fn run(&mut self) -> Result<()> {185 async fn run(&mut self) -> Result<()> {
24 self.inherit_stdio();186 self.inherit_stdio();
25 let out = self.output()?;187 let out = self.output().await?;
26 if !out.status.success() {188 if !out.status.success() {
27 anyhow::bail!("command ({:?}) failed with status {}", self, out.status);189 anyhow::bail!("command ({:?}) failed with status {}", self, out.status);
28 }190 }
29 Ok(())191 Ok(())
30 }192 }
31193
32 fn run_json<T: DeserializeOwned>(&mut self) -> Result<T> {194 async fn run_json<T: DeserializeOwned>(&mut self) -> Result<T> {
33 let str = self.run_string()?;195 let str = self.run_string().await?;
34 serde_json::from_str(&str).with_context(|| format!("{:?}", str))196 serde_json::from_str(&str).with_context(|| format!("{:?}", str))
35 }197 }
36198
37 fn run_string(&mut self) -> Result<String> {199 async fn run_string(&mut self) -> Result<String> {
38 self.inherit_stdio();200 self.inherit_stdio();
39 let out = self.output()?;201 let out = self.output().await?;
40 if !out.status.success() {202 if !out.status.success() {
41 anyhow::bail!("command ({:?}) failed with status {}", self, out.status);203 anyhow::bail!("command ({:?}) failed with status {}", self, out.status);
42 }204 }
modifiedcmds/fleet/src/host.rsdiffbeforeafterboth
4 ffi::{OsStr, OsString},4 ffi::{OsStr, OsString},
5 ops::Deref,5 ops::Deref,
6 path::PathBuf,6 path::PathBuf,
7 process::Command,
8 sync::Arc,7 sync::Arc,
9};8};
109
11use anyhow::Result;10use anyhow::Result;
12use serde::de::DeserializeOwned;11use serde::de::DeserializeOwned;
13use structopt::clap::ArgGroup;12use structopt::clap::ArgGroup;
14use structopt::StructOpt;13use structopt::StructOpt;
14use tokio::process::Command;
1515
16use crate::{command::CommandExt, fleetdata::FleetData};16use crate::{command::CommandExt, fleetdata::FleetData};
1717
73 str73 str
74 }74 }
7575
76 pub fn list_hosts(&self) -> Result<Vec<String>> {76 pub async fn list_hosts(&self) -> Result<Vec<String>> {
77 Command::new("nix")77 Command::new("nix")
78 .arg("eval")78 .arg("eval")
79 .arg(self.full_attr_name("fleetConfigurations.default.configuredHosts"))79 .arg(self.full_attr_name("fleetConfigurations.default.configuredHosts"))
80 .args(&["--apply", "builtins.attrNames", "--json", "--show-trace"])80 .args(&["--apply", "builtins.attrNames", "--json", "--show-trace"])
81 .inherit_stdio()81 .run_nix_json()
82 .run_json()82 .await
83 }83 }
84 pub fn config_attr<T: DeserializeOwned>(&self, host: &str, attr: &str) -> Result<T> {84 pub async fn config_attr<T: DeserializeOwned>(&self, host: &str, attr: &str) -> Result<T> {
85 Command::new("nix")85 Command::new("nix")
86 .arg("eval")86 .arg("eval")
87 .arg(self.full_attr_name(&format!(87 .arg(self.full_attr_name(&format!(
88 "fleetConfigurations.default.configuredSystems.{}.config.{}",88 "fleetConfigurations.default.configuredSystems.{}.config.{}",
89 host, attr89 host, attr
90 )))90 )))
91 .args(&["--json", "--show-trace"])91 .args(&["--json", "--show-trace"])
92 .inherit_stdio()92 .run_nix_json()
93 .run_json()93 .await
94 }94 }
9595
96 pub fn data(&self) -> Ref<FleetData> {96 pub fn data(&self) -> Ref<FleetData> {
modifiedcmds/fleet/src/keys.rsdiffbeforeafterboth
22
3use crate::{command::CommandExt, host::Config};3use crate::{command::CommandExt, host::Config};
4use anyhow::{anyhow, Result};4use anyhow::{anyhow, Result};
5use log::warn;5use tracing::warn;
66
7impl Config {7impl Config {
8 pub fn cached_key(&self, host: &str) -> Option<String> {8 pub fn cached_key(&self, host: &str) -> Option<String> {
21 host.encryption_key = key.trim().to_string();21 host.encryption_key = key.trim().to_string();
22 }22 }
2323
24 pub fn key(&self, host: &str) -> anyhow::Result<String> {24 pub async fn key(&self, host: &str) -> anyhow::Result<String> {
25 if let Some(key) = self.cached_key(host) {25 if let Some(key) = self.cached_key(host) {
26 Ok(key)26 Ok(key)
27 } else {27 } else {
28 warn!("Loading key for {}", host);28 warn!("Loading key for {}", host);
29 let key = self29 let key = self
30 .command_on(host, "cat", false)30 .command_on(host, "cat", false)
31 .arg("/etc/ssh/ssh_host_ed25519_key.pub")31 .arg("/etc/ssh/ssh_host_ed25519_key.pub")
32 .run_string()?;32 .run_string()
33 .await?;
33 self.update_key(host, key.clone());34 self.update_key(host, key.clone());
34 Ok(key)35 Ok(key)
35 }36 }
36 }37 }
37 pub fn recipient(&self, host: &str) -> anyhow::Result<age::ssh::Recipient> {38 pub async fn recipient(&self, host: &str) -> anyhow::Result<age::ssh::Recipient> {
38 let key = self.key(host)?;39 let key = self.key(host).await?;
39 age::ssh::Recipient::from_str(&key).map_err(|e| anyhow!("parse recipient error: {:?}", e))40 age::ssh::Recipient::from_str(&key).map_err(|e| anyhow!("parse recipient error: {:?}", e))
40 }41 }
4142
42 pub fn orphaned_data(&self) -> Result<Vec<String>> {43 pub async fn orphaned_data(&self) -> Result<Vec<String>> {
43 let mut out = Vec::new();44 let mut out = Vec::new();
44 let host_names = self.list_hosts()?;45 let host_names = self.list_hosts().await?;
45 for hostname in self46 for hostname in self
46 .data()47 .data()
47 .hosts48 .hosts
modifiedcmds/fleet/src/main.rsdiffbeforeafterboth
1#![feature(try_blocks)]
2
1pub mod command;3pub mod command;
2pub mod host;4pub mod host;
79
8mod fleetdata;10mod fleetdata;
11
12use std::io;
913
10use anyhow::Result;14use anyhow::{anyhow, Result};
11use structopt::clap::AppSettings::*;15use structopt::clap::AppSettings::*;
12use structopt::StructOpt;16use structopt::StructOpt;
1317
14use cmds::{build_systems::BuildSystems, info::Info, secrets::Secrets};18use cmds::{build_systems::BuildSystems, info::Info, secrets::Secrets};
15use host::{Config, FleetOpts};19use host::{Config, FleetOpts};
20use tracing::{info, metadata::LevelFilter};
21use tracing_subscriber::EnvFilter;
1622
17#[derive(StructOpt)]23#[derive(StructOpt)]
18enum Opts {24enum Opts {
38 command: Opts,44 command: Opts,
39}45}
4046
41fn run_command(config: &Config, command: Opts) -> Result<()> {47async fn run_command(config: &Config, command: Opts) -> Result<()> {
42 match command {48 match command {
43 Opts::BuildSystems(c) => c.run(config)?,49 Opts::BuildSystems(c) => c.run(config).await?,
44 Opts::Secrets(s) => s.run(config)?,50 Opts::Secrets(s) => s.run(config).await?,
45 Opts::Info(i) => i.run(config)?,51 Opts::Info(i) => i.run(config).await?,
46 };52 };
47 Ok(())53 Ok(())
48}54}
4955
56#[tokio::main]
50fn main() -> Result<()> {57async fn main() -> Result<()> {
58 let filter = EnvFilter::from_default_env().add_directive(LevelFilter::INFO.into());
51 env_logger::Builder::new()59 tracing_subscriber::FmtSubscriber::builder()
52 .filter_level(log::LevelFilter::Info)60 .with_env_filter(filter)
61 .without_time()
62 .with_target(false)
63 .with_writer(|| {
64 // eprintln!("Line");
65 io::stderr()
66 })
67 .try_init()
53 .init();68 .map_err(|e| anyhow!("Failed to initialize logger: {}", e))?;
69
70 info!("Starting");
54 let opts = RootOpts::from_args();71 let opts = RootOpts::from_args();
55 let config = opts.fleet_opts.build()?;72 let config = opts.fleet_opts.build()?;
5673
57 match run_command(&config, opts.command) {74 match run_command(&config, opts.command).await {
58 Ok(()) => {75 Ok(()) => {
59 config.save()?;76 config.save()?;
60 Ok(())77 Ok(())
modifiedmodules/fleet/meta.nixdiffbeforeafterboth
45 hosts = fleet.hostsToAttrs (host: {45 hosts = fleet.hostsToAttrs (host: {
46 modules = config.globalModules;46 modules = config.globalModules;
47 });47 });
48 globalModules = import ../nixos/_modules.nix;48 globalModules = import ../../nixos/modules/module-list.nix;
49 };49 };
50}50}
5151
deletedmodules/nixos/_modules.nixdiffbeforeafterboth

no changes

deletedmodules/nixos/fleetPkgs.nixdiffbeforeafterboth

no changes

deletedmodules/nixos/meta.nixdiffbeforeafterboth

no changes

deletedmodules/nixos/secrets.nixdiffbeforeafterboth

no changes

addednixos/fleetPkgs.nixdiffbeforeafterboth

no changes

addednixos/meta.nixdiffbeforeafterboth

no changes

addednixos/modules/module-list.nixdiffbeforeafterboth

no changes

addednixos/secrets.nixdiffbeforeafterboth

no changes