all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: "Christoph Heiss" <c.heiss@proxmox.com>
To: "Florian Paul Azim Hoberg" <florian.hoberg@credativ.de>
Cc: pve-devel@lists.proxmox.com
Subject: Re: [pve-devel] [PATCH installer 1/1] fix #2164: add option to define a vlan tag within the installer
Date: Tue, 23 Sep 2025 14:07:54 +0200	[thread overview]
Message-ID: <DD061RFR6VQY.2MLYEFYZ3GH2C@proxmox.com> (raw)
In-Reply-To: <3978889E-73FA-4473-A70B-2C660662CC3D@credativ.de>

The subject should be rephrased to e.g. "partially fix #2164", as the
Bugzilla entry also mentions setting up bonds.

Didn't do any testing yet, but some comments inline:

On Mon Sep 22, 2025 at 2:30 PM CEST, Florian Paul Azim Hoberg wrote:
> To ensure a Promox node can access a desired network
> resource which requires a given vlan tag, this feature
> adds the possibility to optionally define a vlan tag
> within the auto installer, tui and gui.

s/this feature adds/add/g

Also could mention that it only applies to the selected management
interface/bridge.

>
> Signed-off-by: Florian Paul Azim Hoberg @gyptazy <florian.hoberg@credativ.de>
> ---
>
>  initial commit:
>  * Add possibility to optionally add vlan tag in:
>    - auto installer
>    - tui
>    - gui
>  * Tagged interface will be generated as:
>    $interface.$tag in /etc/network/interfaces
>  * Simple validation of given vlan tag:
>    - Must be digit
>    - Must be smaller than int(4094)

That can all be part of the commit message, as that is useful
information.

[..]
> diff --git a/html/ack_template.htm b/html/ack_template.htm
> index 48d7213..4404321 100644
> --- a/html/ack_template.htm
> +++ b/html/ack_template.htm
> @@ -54,6 +54,8 @@
>
>        <tr><td>Management Interface:</td> <td>__interface__</td></tr>
>
> +      <tr><td>Management Interface vlan tag:</td> <td>__vlan__</td></tr>

VLAN should be consistently spelled uppercase everywhere user-visible.

Also; wondering if we maybe should just hide this if no VLAN tag is set,
no not clutter the summary page unnecessarily?

> +
>        <tr><td>Hostname:</td> <td>__hostname__</td></tr>
>
>        <tr><td>IP CIDR:</td> <td>__cidr__</td></tr>
> diff --git a/proxinstall b/proxinstall
> index 5ba65fa..13ece1d 100755
> --- a/proxinstall
> +++ b/proxinstall
> @@ -472,6 +472,14 @@ sub create_ipconf_view {
>      $grid->attach($dns_label, 0, 4, 1, 1);
>      $grid->attach($ipconf_entry_dns, 1, 4, 1, 1);
>
> +    my $cfg_vlan = Proxmox::Install::Config::get_vlan();
> +    my $vlan = defined($cfg_vlan) ? $cfg_vlan : '';

Can be simplified to

  my $cfg_vlan = Proxmox::Install::Config::get_vlan() // '';

> +
> +    my ($vlan_label, $ipconf_entry_vlan) = create_text_input($vlan, 'VLAN Tag (Optional)');
> +
> +    $grid->attach($vlan_label, 0, 5, 1, 1);
> +    $grid->attach($ipconf_entry_vlan, 1, 5, 1, 1);
> +
>      $gtk_state->{inbox}->show_all;
>      set_next(
>          undef,
> @@ -538,7 +546,19 @@ sub create_ipconf_view {
>              }
>              Proxmox::Install::Config::set_dns($dns_ip);
>
> -            #print STDERR "TEST $ipaddress/$netmask $gateway_ip $dns_ip\n";
> +            my $vlan = $ipconf_entry_vlan->get_text();
> +            if ($vlan !~ /^\d*$/) {
> +                Proxmox::UI::message("VLAN must contain only digits.");
> +                $ipconf_entry_vlan->grab_focus();
> +                return;
> +            }
> +            if ($vlan ne '' && $vlan >= 4094) {
> +                Proxmox::UI::message("VLAN must be smaller than 4094.");
> +                $ipconf_entry_vlan->grab_focus();
> +                return;
> +            }

Should also check for 0, as that is also a reserved value.

> +            $vlan = undef if $vlan eq '';
> +            Proxmox::Install::Config::set_vlan($vlan);
>
>              $step_number++;
>              create_ack_view();
> @@ -585,6 +605,7 @@ sub create_ack_view {
>          __cidr__ => Proxmox::Install::Config::get_cidr(),
>          __gateway__ => Proxmox::Install::Config::get_gateway(),
>          __dnsserver__ => Proxmox::Install::Config::get_dns(),
> +        __vlan__ => Proxmox::Install::Config::get_vlan(),

Depending on above, whether to hide it if unset or not, in the latter
case this should at least default to 'None' as in the TUI.

>      );
>
>      while (my ($k, $v) = each %config_values) {
> diff --git a/proxmox-auto-installer/src/answer.rs b/proxmox-auto-installer/src/answer.rs
> index 88f4c87..cea5cb1 100644
> --- a/proxmox-auto-installer/src/answer.rs
> +++ b/proxmox-auto-installer/src/answer.rs
> @@ -186,6 +186,7 @@ struct NetworkInAnswer {
>      pub cidr: Option<CidrAddress>,
>      pub dns: Option<IpAddr>,
>      pub gateway: Option<IpAddr>,
> +    pub vlan: Option<u16>,
>      #[serde(default)]
>      pub filter: BTreeMap<String, String>,
>  }
> @@ -219,6 +220,7 @@ impl TryFrom<NetworkInAnswer> for Network {
>                      cidr: network.cidr.unwrap(),
>                      dns: network.dns.unwrap(),
>                      gateway: network.gateway.unwrap(),
> +                    vlan: network.vlan,

Before setting this, the same check as for the GUI/TUI can be
implemented above.

And it's missing the check that `vlan` is unset as with the other
properties below in the DHCP case.

>                      filter: network.filter,
>                  }),
>              })
> @@ -254,6 +256,7 @@ pub struct NetworkManual {
>      pub cidr: CidrAddress,
>      pub dns: IpAddr,
>      pub gateway: IpAddr,
> +    pub vlan: Option<u16>,
>      pub filter: BTreeMap<String, String>,
>  }
>
> diff --git a/proxmox-auto-installer/src/utils.rs b/proxmox-auto-installer/src/utils.rs
> index 7d42f2c..2fdb6df 100644
> --- a/proxmox-auto-installer/src/utils.rs
> +++ b/proxmox-auto-installer/src/utils.rs
> @@ -66,6 +66,7 @@ fn get_network_settings(
>          network_options.address = settings.cidr.clone();
>          network_options.dns_server = settings.dns;
>          network_options.gateway = settings.gateway;
> +        network_options.vlan = settings.vlan;
>          network_options.ifname = get_single_udev_index(&settings.filter, &udev_info.nics)?;
>      }
>      info!("Network interface used is '{}'", &network_options.ifname);
> @@ -494,6 +495,7 @@ pub fn parse_answer(
>          domain: network_settings.fqdn.domain(),
>          cidr: network_settings.address,
>          gateway: network_settings.gateway,
> +        vlan: network_settings.vlan,
>          dns: network_settings.dns_server,
>
>          first_boot: InstallFirstBootSetup::default(),
[..]
> diff --git a/proxmox-auto-installer/tests/resources/parse_answer/network_vlan.toml b/proxmox-auto-installer/tests/resources/parse_answer/network_vlan.toml
> new file mode 100644
> index 0000000..fad56c6
> --- /dev/null
> +++ b/proxmox-auto-installer/tests/resources/parse_answer/network_vlan.toml
> @@ -0,0 +1,19 @@
> +[global]
> +keyboard = "de"
> +country = "at"
> +fqdn = "pveauto.testinstall"
> +mailto = "mail@no.invalid"
> +timezone = "Europe/Vienna"
> +root-password = "12345678"
> +
> +[network]
> +source = "from-answer"
> +cidr = "10.10.10.10/24"
> +dns = "10.10.10.1"
> +vlan = 123
> +gateway = "10.10.10.1"
> +filter.ID_NET_NAME = "enp129s0f1np1"
> +
> +[disk-setup]
> +filesystem = "ext4"
> +disk-list = ["sda"]
[..]
> diff --git a/proxmox-auto-installer/tests/resources/parse_answer/nic_matching.toml b/proxmox-auto-installer/tests/resources/parse_answer/nic_matching.toml
> index 901f894..723dfc8 100644
> --- a/proxmox-auto-installer/tests/resources/parse_answer/nic_matching.toml
> +++ b/proxmox-auto-installer/tests/resources/parse_answer/nic_matching.toml
> @@ -10,6 +10,7 @@ root-password = "12345678"
>  source = "from-answer"
>  cidr = "10.10.10.10/24"
>  dns = "10.10.10.1"
> +vlan = 123

Any reason for adding it to this test too, as the `network_vlan` test
above seems to be the exact same?

>  gateway = "10.10.10.1"
>  filter.ID_NET_NAME_MAC = "*a0369f0ab382"
>
[..]
> diff --git a/proxmox-installer-common/src/setup.rs b/proxmox-installer-common/src/setup.rs
> index 66cea72..23e43d2 100644
> --- a/proxmox-installer-common/src/setup.rs
> +++ b/proxmox-installer-common/src/setup.rs
> @@ -580,6 +580,7 @@ pub struct InstallConfig {
>      #[serde(serialize_with = "serialize_as_display")]
>      pub cidr: CidrAddress,
>      pub gateway: IpAddr,
> +    pub vlan: Option<u16>,

Should be annotated with

    #[serde(skip_serializing_if = "Option::is_none")]

to avoid serializing it as `null` if unset.

>      pub dns: IpAddr,
>
>      pub first_boot: InstallFirstBootSetup,
> diff --git a/proxmox-tui-installer/src/main.rs b/proxmox-tui-installer/src/main.rs
> index 15ee5d3..21ef16f 100644
> --- a/proxmox-tui-installer/src/main.rs
> +++ b/proxmox-tui-installer/src/main.rs
[..]
> @@ -552,6 +560,23 @@ fn network_dialog(siv: &mut Cursive) -> InstallerView {
>                      .parse::<IpAddr>()
>                      .map_err(|err| err.to_string())?;
>
> +                let vlan_str = view
> +                    .get_value::<EditView, _>(5)
> +                    .ok_or("failed to retrieve VLAN")?;
> +
> +                let vlan = if vlan_str.trim().is_empty() {
> +                    None
> +                } else {
> +                    let parsed_vlan = vlan_str.trim().parse::<u16>()
> +                        .map_err(|e| format!("Invalid VLAN: {e}"))?;
> +
> +                    if parsed_vlan >= 4094 {
> +                        return Err(format!("VLAN must be smaller than 4094."));
> +                    }

Same tag 0 check as for the GUI.

[..]
> diff --git a/proxmox-tui-installer/src/options.rs b/proxmox-tui-installer/src/options.rs
> index c80877f..c59712e 100644
> --- a/proxmox-tui-installer/src/options.rs
> +++ b/proxmox-tui-installer/src/options.rs
> @@ -72,6 +72,7 @@ impl InstallerOptions {
>              SummaryOption::new("Keyboard layout", kb_layout),
>              SummaryOption::new("Administrator email", &self.password.email),
>              SummaryOption::new("Management interface", &self.network.ifname),
> +            SummaryOption::new("Management interface vlan tag", &self.network.vlan.map(|v| v.to_string()).unwrap_or("None".to_string())),

Uppercase spelling as in the GUI.


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


       reply	other threads:[~2025-09-23 12:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <3978889E-73FA-4473-A70B-2C660662CC3D@credativ.de>
2025-09-23 12:07 ` Christoph Heiss [this message]
2025-09-22 12:30 Florian Paul Azim Hoberg via pve-devel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DD061RFR6VQY.2MLYEFYZ3GH2C@proxmox.com \
    --to=c.heiss@proxmox.com \
    --cc=florian.hoberg@credativ.de \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal