From patchwork Fri Jul 5 18:53:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Jakob L. Kreuze" X-Patchwork-Id: 14477 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id A8E5A171C1; Fri, 5 Jul 2019 19:54:10 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 6FE08171A5 for ; Fri, 5 Jul 2019 19:54:09 +0100 (BST) Received: from localhost ([::1]:55392 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hjTLU-0005ES-MW for patchwork@mira.cbaines.net; Fri, 05 Jul 2019 14:54:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:45295) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hjTLP-0005E4-IE for guix-patches@gnu.org; Fri, 05 Jul 2019 14:54:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hjTLO-0003px-7s for guix-patches@gnu.org; Fri, 05 Jul 2019 14:54:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:44907) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hjTLO-0003pE-4l for guix-patches@gnu.org; Fri, 05 Jul 2019 14:54:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1hjTLN-0003Wq-Ve for guix-patches@gnu.org; Fri, 05 Jul 2019 14:54:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#36404] [PATCH v5 0/4] Add 'guix deploy'. Resent-From: zerodaysfordays@sdf.lonestar.org (Jakob L. Kreuze) Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 05 Jul 2019 18:54:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 36404 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?utf-8?q?Court=C3=A8s?= Received: via spool by 36404-submit@debbugs.gnu.org id=B36404.156235282813543 (code B ref 36404); Fri, 05 Jul 2019 18:54:01 +0000 Received: (at 36404) by debbugs.gnu.org; 5 Jul 2019 18:53:48 +0000 Received: from localhost ([127.0.0.1]:53728 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hjTLA-0003WN-3Z for submit@debbugs.gnu.org; Fri, 05 Jul 2019 14:53:48 -0400 Received: from mx.sdf.org ([205.166.94.20]:59308) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1hjTL6-0003WC-Tx for 36404@debbugs.gnu.org; Fri, 05 Jul 2019 14:53:46 -0400 Received: from Upsilon (mobile-166-172-60-210.mycingular.net [166.172.60.210]) (authenticated (0 bits)) by mx.sdf.org (8.15.2/8.14.5) with ESMTPSA id x65IrYCA028684 (using TLSv1.2 with cipher AES256-GCM-SHA384 (256 bits) verified NO); Fri, 5 Jul 2019 18:53:40 GMT From: zerodaysfordays@sdf.lonestar.org (Jakob L. Kreuze) References: <87o92ianbj.fsf@sdf.lonestar.org> <87o92glap5.fsf@dustycloud.org> <878sthoqzi.fsf@gnu.org> <87imsl9tsx.fsf_-_@sdf.lonestar.org> <87ef399tpu.fsf_-_@sdf.lonestar.org> <87a7dx9tog.fsf_-_@sdf.lonestar.org> <875zol9tn2.fsf_-_@sdf.lonestar.org> <871rz99tl9.fsf_-_@sdf.lonestar.org> <875zoldqah.fsf@kyleam.com> <87muhwtmfp.fsf@sdf.lonestar.org> <871rz874l2.fsf@kyleam.com> <877e90tj7l.fsf_-_@sdf.lonestar.org> <8736jotj5v.fsf_-_@sdf.lonestar.org> <87y31gs4k5.fsf_-_@sdf.lonestar.org> <87y31cnb2t.fsf@gnu.org> Date: Fri, 05 Jul 2019 14:53:27 -0400 In-Reply-To: <87y31cnb2t.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Fri, 05 Jul 2019 10:24:10 +0200") Message-ID: <87ftnkgvo8.fsf_-_@sdf.lonestar.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: 36404@debbugs.gnu.org Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches "Thompson, David" writes: > Replace "path" with "file name". Lots of people use them > interchangeably, but GNU makes a clear distinction between the two > terms. Ah, good to know. Updated. Ludovic Courtès writes: > Please add this file to po/guix/POTFILES.in so it can be subject to > localization. > >> +(define %default-options >> + '((system . ,(%current-system)) >> + (substitutes? . #t) >> + (build-hook? . #t) >> + (graft? . #t) >> + (debug . 0) >> + (verbosity . 2))) > > ‘verbosity’ should probably be 1 (only ‘guix build’ and ‘guix system > build’ default to 2.) > >> + (for-each (lambda (machine) >> + (format #t "building ~a... " (machine-display-name machine)) >> + (run-with-store store (build-machine machine)) >> + (display "done\n")) >> + machines) >> + (for-each (lambda (machine) >> + (format #t "deploying to ~a... " (machine-display-name machine)) >> + (run-with-store store (deploy-machine machine)) >> + (display "done\n")) >> + machines)))) > > For i18n purposes and also to get consistent output, please avoid > ‘format #t’ and instead write: > > (info (G_ "deploying ~a…~%") (machine-display-name machine)) > > I think you can omit the “done” message. > > As a matter of style, it’s clearer IMO to have only one ‘run-with-store’ > call in the whole program. As in, create a monadic expression with 'mapm' to evaluate the multiple calls to '(deploy-machine machine)' in sequence, and then pass that to 'run-with-store'? > In the SSH case, ‘deploy-machine’ should roughly translate to: > > (remote-eval #~(switch-to-system #$os) machine) > > Thus, ‘build-machine’ is unnecessary: the actual build of OS is > automatically triggered by ‘remote-eval’, either locally or remotely, > depending on #:build-locally?. > > So I believe you can remove ‘build-machine’ altogether. Thanks for pointing that out; I meant to ask about that since it's kinda vestigial at this point, but wasn't sure if it would be better to have it for the UI. But I went ahead and removed it, since we already have code for showing what derivations are going to be built, etc. > It’s a bit verbose, but I’d suggest using SRFI-34/35 instead, like so: > > (raise (condition > (&message (message "unsupported machine configuration type")))) > > That way, if you also add the file to po/guix/POTFILES.in, i18n will do > its magic. :-) In the end, I generalized the various configuration-related error messages into a 'maybe-raise-unsupported-configuration-error' that uses SRFI-35. Hopefully that's alright -- I believe the manual specifies the behavior enough that one more detailed message is better than two. > Yay! > > You can add a copyright line for you at the top of guix.texi. > >> +@section Invoking @code{guix deploy} >> + >> +We've already seen @code{operating-system} declarations used to manage a >> +machine's configuration locally. Suppose you need to configure multiple >> +machines, though---perhaps you're managing a service on the web that's >> +comprised of several servers. @command{guix deploy} enables you to use those >> +same @code{operating-system} declarations to manage multiple remote hosts at >> +once as a logical ``deployment''. > > Perhaps add something like: > > @quotation Note > The functionality described in this section is still under development > and is subject to change. Get in touch with us on > @email{guix-devel@@gnu.org}! > @end quotation > > That way, if we make a Guix release before this is all stabilized, > we make sure people have appropriate expectations. :-) I like it! >> +complex deployment may involve, for example, starting virtual machines through >> +a VPS provider. In such a case, a different @var{environment} type would be > ^^^ > I would write “Virtual Private Server (VPS)”. > > I hope the nitpicking level is acceptable, let me know. I’m really > excited to see this land in master! Oh, I appreciate this level of attention to detail. The hardest part of technical writing for me is having my writing fit in with the writing around it when contributing to an existing document, so these kinds of comments from someone more familiar with the manual are great. Jakob L. Kreuze (4): ssh: Add 'identity' keyword to 'open-ssh-session'. gnu: Add machine type for deployment specifications. Add 'guix deploy'. doc: Add section for 'guix deploy'. Makefile.am | 4 +- doc/guix.texi | 114 +++++++++++++ gnu/local.mk | 5 +- gnu/machine.scm | 107 ++++++++++++ gnu/machine/ssh.scm | 369 ++++++++++++++++++++++++++++++++++++++++ guix/scripts/deploy.scm | 84 +++++++++ guix/ssh.scm | 10 +- po/guix/POTFILES.in | 2 + 8 files changed, 689 insertions(+), 6 deletions(-) create mode 100644 gnu/machine.scm create mode 100644 gnu/machine/ssh.scm create mode 100644 guix/scripts/deploy.scm