]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
hostnamectl: deprecate set-* methods and expose getters by only using nouns in commands
authorJakub Warczarek <jakub.warczarek@gmail.com>
Fri, 23 Apr 2021 18:41:45 +0000 (18:41 +0000)
committerLennart Poettering <lennart@poettering.net>
Mon, 3 May 2021 18:19:19 +0000 (20:19 +0200)
man/hostnamectl.xml
shell-completion/bash/hostnamectl
shell-completion/zsh/_hostnamectl
src/hostname/hostnamectl.c

index ed2dabef3b5c8ded572864bfc74ee6c82dbee0f0..51f83d1cd63fd33ad7314dcd039fa8377a2a3218 100644 (file)
       <varlistentry>
         <term><command>status</command></term>
 
-        <listitem><para>Show current system hostname and related information. If no command is specified,
+        <listitem><para>Show system hostname and related information. If no command is specified,
         this is the implied default.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><command>set-hostname <replaceable>NAME</replaceable></command></term>
+        <term><command>hostname</command> [<replaceable>NAME</replaceable>]</term>
 
-        <listitem><para>Set the system hostname to <replaceable>NAME</replaceable>. By default, this will alter the
+        <listitem><para>If no argument is given, print the system hostname. If an
+        optional argument <replaceable>NAME</replaceable> is provided then the command changes the
+        system hostname to <replaceable>NAME</replaceable>. By default, this will alter the
         pretty, the static, and the transient hostname alike; however, if one or more of <option>--static</option>,
         <option>--transient</option>, <option>--pretty</option> are used, only the selected hostnames are changed. If
         the pretty hostname is being set, and static or transient are being set as well, the specified hostname will be
         <para>The static and transient hostnames must each be either a single DNS label (a string composed of
         7-bit ASCII lower-case characters and no spaces or dots, limited to the format allowed for DNS domain
         name labels), or a sequence of such labels separated by single dots that forms a valid DNS FQDN. The
-        hostname must be at most 64 characters, which is a Linux limitation (DNS allows longer names).</para>
-
-        <para>Pass the empty string <literal></literal> as the hostname to reset the selected hostnames to
-        their default (usually <literal>&FALLBACK_HOSTNAME;</literal>).</para></listitem>
+        hostname must be at most 64 characters, which is a Linux limitation (DNS allows longer names).</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><command>set-icon-name <replaceable>NAME</replaceable></command></term>
+        <term><command>icon-name</command> [<replaceable>NAME</replaceable>]</term>
 
-        <listitem><para>Set the system icon name to
-        <replaceable>NAME</replaceable>. The icon name is used by some
+        <listitem><para>If no argument is given, print the icon name of the system. If an
+        optional argument <replaceable>NAME</replaceable> is provided then the command changes the
+        icon name to <replaceable>NAME</replaceable>. The icon name is used by some
         graphical applications to visualize this host. The icon name
         should follow the <ulink
         url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">Icon
-        Naming Specification</ulink>.</para>
-
-        <para>Pass an empty string to reset the icon name to the
-        default value, which is determined from chassis type (see
-        below) and possibly other parameters.</para></listitem>
+        Naming Specification</ulink>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><command>set-chassis <replaceable>TYPE</replaceable></command></term>
+        <term><command>chassis</command> [<replaceable>TYPE</replaceable>]</term>
 
-        <listitem><para>Set the chassis type to
-        <replaceable>TYPE</replaceable>. The chassis type is used by
-        some graphical applications to visualize the host or alter
-        user interaction. Currently, the following chassis types are
-        defined:
+        <listitem><para>If no argument is given, print the chassis type. If an
+        optional argument <replaceable>TYPE</replaceable> is provided then the command changes the
+        chassis type to <replaceable>TYPE</replaceable>. The chassis type is used by
+        some graphical applications to visualize the host or alter user interaction.
+        Currently, the following chassis types are defined:
         <literal>desktop</literal>,
         <literal>laptop</literal>,
         <literal>convertible</literal>,
         <literal>vm</literal> and
         <literal>container</literal> for virtualized systems that lack
         an immediate physical chassis.</para>
-
-        <para>Pass an empty string to reset the chassis type to the
-        default value which is determined from the firmware and
-        possibly other parameters.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><command>set-deployment <replaceable>ENVIRONMENT</replaceable></command></term>
+        <term><command>deployment</command> [<replaceable>ENVIRONMENT</replaceable>]</term>
 
-        <listitem><para>Set the deployment environment description.
-        <replaceable>ENVIRONMENT</replaceable> must be a single word
-        without any control characters. One of the following is
-        suggested:
+        <listitem><para>If no argument is given, print the deployment environment. If an
+        optional argument <replaceable>ENVIRONMENT</replaceable> is provided then the command changes the
+        deployment environment to <replaceable>ENVIRONMENT</replaceable>.
+        Argument <replaceable>ENVIRONMENT</replaceable>
+        must be a single word without any control characters. One of the following is suggested:
         <literal>development</literal>,
         <literal>integration</literal>,
         <literal>staging</literal>,
         <literal>production</literal>.
         </para>
-
-        <para>Pass an empty string to reset to the default empty
-        value.</para>
         </listitem>
       </varlistentry>
 
       <varlistentry>
-        <term><command>set-location <replaceable>LOCATION</replaceable></command></term>
+        <term><command>location</command> [<replaceable>LOCATION</replaceable>]</term>
 
-        <listitem><para>Set the location string for the system, if it
-        is known. <replaceable>LOCATION</replaceable> should be a
+        <listitem><para>If no argument is given, print the location string for the system. If an
+        optional argument <replaceable>LOCATION</replaceable> is provided then the command changes the
+        location string for the system to <replaceable>LOCATION</replaceable>.
+        Argument <replaceable>LOCATION</replaceable> should be a
         human-friendly, free-form string describing the physical
         location of the system, if it is known and applicable. This
         may be as generic as <literal>Berlin, Germany</literal> or as
         specific as <literal>Left Rack, 2nd Shelf</literal>.</para>
-
-        <para>Pass an empty string to reset to the default empty
-        value.</para>
         </listitem>
       </varlistentry>
     </variablelist>
index e3765c315cbf0785af137ae8981c3c0532ec7678..5c8d3975d77fd8bce2e67e8e6502a4ea1e3030ce 100644 (file)
@@ -38,9 +38,9 @@ _hostnamectl() {
 
     local -A VERBS=(
         [STANDALONE]='status'
-        [ICONS]='set-icon-name'
-        [NAME]='set-hostname set-deployment set-location'
-        [CHASSIS]='set-chassis'
+        [ICONS]='icon-name'
+        [NAME]='hostname deployment location'
+        [CHASSIS]='chassis'
     )
 
     for ((i=0; i < COMP_CWORD; i++)); do
index d05c46bd43645e8338bdbe99e5047c2eb17eed2d..2a6bf4d125c4f0c9b4c70696498112e7c55b6e44 100644 (file)
@@ -1,8 +1,8 @@
 #compdef hostnamectl                    -*- shell-script -*-
 # SPDX-License-Identifier: LGPL-2.1-or-later
 
-(( $+functions[_hostnamectl_set-hostname] )) ||
-_hostnamectl_set-hostname() {
+(( $+functions[_hostnamectl_hostname] )) ||
+_hostnamectl_hostname() {
     if (( CURRENT <= 3 )); then
         _message "new hostname"
     else
@@ -10,8 +10,8 @@ _hostnamectl_set-hostname() {
     fi
 }
 
-(( $+functions[_hostnamectl_set-icon-name] )) ||
-_hostnamectl_set-icon-name() {
+(( $+functions[_hostnamectl_icon-name] )) ||
+_hostnamectl_icon-name() {
     if (( CURRENT <= 3 )); then
         _message "new icon name"
     else
@@ -19,8 +19,8 @@ _hostnamectl_set-icon-name() {
     fi
 }
 
-(( $+functions[_hostnamectl_set-chassis] )) ||
-_hostnamectl_set-chassis() {
+(( $+functions[_hostnamectl_chassis] )) ||
+_hostnamectl_chassis() {
     if (( CURRENT <= 3 )); then
         _chassis=( desktop laptop convertible server tablet handset watch embedded vm container )
         _describe chassis _chassis
@@ -29,8 +29,8 @@ _hostnamectl_set-chassis() {
     fi
 }
 
-(( $+functions[_hostnamectl_set-deployment] )) ||
-_hostnamectl_set-deployment() {
+(( $+functions[_hostnamectl_deployment] )) ||
+_hostnamectl_deployment() {
     if (( CURRENT <= 3 )); then
         _message "new environment"
     else
@@ -38,8 +38,8 @@ _hostnamectl_set-deployment() {
     fi
 }
 
-(( $+functions[_hostnamectl_set-location] )) ||
-_hostnamectl_set-location() {
+(( $+functions[_hostnamectl_location] )) ||
+_hostnamectl_location() {
     if (( CURRENT <= 3 )); then
         _message "new location"
     else
@@ -52,11 +52,11 @@ _hostnamectl_commands() {
     local -a _hostnamectl_cmds
     _hostnamectl_cmds=(
         "status:Show current hostname settings"
-        "set-hostname:Set system hostname"
-        "set-icon-name:Set icon name for host"
-        "set-chassis:Set chassis type for host"
-        "set-deployment:Set deployment environment for host"
-        "set-location:Set location for host"
+        "hostname:Get/set system hostname"
+        "icon-name:Get/set icon name for host"
+        "chassis:Get/set chassis type for host"
+        "deployment:Get/set deployment environment for host"
+        "location:Get/set location for host"
     )
     if (( CURRENT == 1 )); then
         _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@"
index 19c04869dddf6a3d8d555f737759ebc4f2d8dba0..852da6bb8e2d764b7b4e30145f371c0e868e2f18 100644 (file)
@@ -318,6 +318,19 @@ static int show_all_names(sd_bus *bus) {
         return print_status_info(&info);
 }
 
+static int get_hostname_based_on_flag(sd_bus *bus) {
+        const char *attr;
+
+        if (!!arg_static + !!arg_pretty + !!arg_transient > 1)
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                       "Cannot query more than one name type at a time");
+
+        attr = arg_pretty ? "PrettyHostname" :
+                arg_static ? "StaticHostname" : "Hostname";
+
+        return get_one_name(bus, attr, NULL);
+}
+
 static int show_status(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
         int r;
@@ -352,22 +365,13 @@ static int show_status(int argc, char **argv, void *userdata) {
                 return 0;
         }
 
-        if (arg_pretty || arg_static || arg_transient) {
-                const char *attr;
-
-                if (!!arg_static + !!arg_pretty + !!arg_transient > 1)
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                               "Cannot query more than one name type at a time");
-
-                attr = arg_pretty ? "PrettyHostname" :
-                        arg_static ? "StaticHostname" : "Hostname";
-
-                return get_one_name(bus, attr, NULL);
-        }
+        if (arg_pretty || arg_static || arg_transient)
+                return get_hostname_based_on_flag(bus);
 
         return show_all_names(bus);
 }
 
+
 static int set_simple_string_internal(sd_bus *bus, sd_bus_error *error, const char *target, const char *method, const char *value) {
         _cleanup_(sd_bus_error_free) sd_bus_error e = SD_BUS_ERROR_NULL;
         int r;
@@ -481,20 +485,29 @@ static int set_hostname(int argc, char **argv, void *userdata) {
         return ret;
 }
 
-static int set_icon_name(int argc, char **argv, void *userdata) {
-        return set_simple_string(userdata, "icon", "SetIconName", argv[1]);
+static int get_or_set_hostname(int argc, char **argv, void *userdata) {
+        return argc == 1 ? get_hostname_based_on_flag(userdata) :
+                           set_hostname(argc, argv, userdata);
+}
+
+static int get_or_set_icon_name(int argc, char **argv, void *userdata) {
+        return argc == 1 ? get_one_name(userdata, "IconName", NULL) :
+                           set_simple_string(userdata, "icon", "SetIconName", argv[1]);
 }
 
-static int set_chassis(int argc, char **argv, void *userdata) {
-        return set_simple_string(userdata, "chassis", "SetChassis", argv[1]);
+static int get_or_set_chassis(int argc, char **argv, void *userdata) {
+        return argc == 1 ? get_one_name(userdata, "Chassis", NULL) :
+                           set_simple_string(userdata, "chassis", "SetChassis", argv[1]);
 }
 
-static int set_deployment(int argc, char **argv, void *userdata) {
-        return set_simple_string(userdata, "deployment", "SetDeployment", argv[1]);
+static int get_or_set_deployment(int argc, char **argv, void *userdata) {
+        return argc == 1 ? get_one_name(userdata, "Deployment", NULL) :
+                           set_simple_string(userdata, "deployment", "SetDeployment", argv[1]);
 }
 
-static int set_location(int argc, char **argv, void *userdata) {
-        return set_simple_string(userdata, "location", "SetLocation", argv[1]);
+static int get_or_set_location(int argc, char **argv, void *userdata) {
+        return argc == 1 ? get_one_name(userdata, "Location", NULL) :
+                           set_simple_string(userdata, "location", "SetLocation", argv[1]);
 }
 
 static int help(void) {
@@ -509,11 +522,11 @@ static int help(void) {
                "%sQuery or change system hostname.%s\n"
                "\nCommands:\n"
                "  status                 Show current hostname settings\n"
-               "  set-hostname NAME      Set system hostname\n"
-               "  set-icon-name NAME     Set icon name for host\n"
-               "  set-chassis NAME       Set chassis type for host\n"
-               "  set-deployment NAME    Set deployment environment for host\n"
-               "  set-location NAME      Set location for host\n"
+               "  hostname [NAME]        Get/set system hostname\n"
+               "  icon-name [NAME]       Get/set icon name for host\n"
+               "  chassis [NAME]         Get/set chassis type for host\n"
+               "  deployment [NAME]      Get/set deployment environment for host\n"
+               "  location [NAME]        Get/set location for host\n"
                "\nOptions:\n"
                "  -h --help              Show this help\n"
                "     --version           Show package version\n"
@@ -623,13 +636,18 @@ static int parse_argv(int argc, char *argv[]) {
 static int hostnamectl_main(sd_bus *bus, int argc, char *argv[]) {
 
         static const Verb verbs[] = {
-                { "status",         VERB_ANY, 1,        VERB_DEFAULT, show_status    },
-                { "set-hostname",   2,        2,        0,            set_hostname   },
-                { "set-icon-name",  2,        2,        0,            set_icon_name  },
-                { "set-chassis",    2,        2,        0,            set_chassis    },
-                { "set-deployment", 2,        2,        0,            set_deployment },
-                { "set-location",   2,        2,        0,            set_location   },
-                { "help",           VERB_ANY, VERB_ANY, 0,            verb_help      }, /* Not documented, but supported since it is created. */
+                { "status",         VERB_ANY, 1,        VERB_DEFAULT, show_status           },
+                { "hostname",       VERB_ANY, 2,        0,            get_or_set_hostname   },
+                { "set-hostname",   2,        2,        0,            get_or_set_hostname   }, /* obsolete */
+                { "icon-name",      VERB_ANY, 2,        0,            get_or_set_icon_name  },
+                { "set-icon-name",  2,        2,        0,            get_or_set_icon_name  }, /* obsolete */
+                { "chassis",        VERB_ANY, 2,        0,            get_or_set_chassis    },
+                { "set-chassis",    2,        2,        0,            get_or_set_chassis    }, /* obsolete */
+                { "deployment",     VERB_ANY, 2,        0,            get_or_set_deployment },
+                { "set-deployment", 2,        2,        0,            get_or_set_deployment }, /* obsolete */
+                { "location",       VERB_ANY, 2,        0,            get_or_set_location   },
+                { "set-location",   2,        2,        0,            get_or_set_location   }, /* obsolete */
+                { "help",           VERB_ANY, VERB_ANY, 0,            verb_help             }, /* Not documented, but supported since it is created. */
                 {}
         };