[! use strict; use PVE::pvecfg; use PVE::I18N; use PVE::ConfigServer; use PVE::HTMLTable; use PVE::Config; use PVE::Cluster; use PVE::HTMLForm; use PVE::HTMLUtils; !] [- use strict; sub html_table_line { my ($v1, $v2, $v3, $v4) = @_; $v1 = " " if !$v1; $v2 = " " if !$v2; $v3 = " " if !$v3; $v4 = " " if !$v4; my $html = ''; $html .= "$v1$v2"; $html .= "$v3$v4\n"; return $html; } sub create_iflist { my ($ifaces) = @_; my $iflist = ''; foreach my $ifname (sort keys %$ifaces) { $iflist .= ';' if $iflist; $iflist .= "ifname=$ifname"; $iflist .= ",bridge=$ifaces->{$ifname}->{bridge}" if $ifaces->{$ifname}->{bridge}; $iflist .= ",mac=$ifaces->{$ifname}->{mac}" if $ifaces->{$ifname}->{mac}; $iflist .= ",host_ifname=$ifaces->{$ifname}->{host_ifname}" if $ifaces->{$ifname}->{host_ifname}; $iflist .= ",host_mac=$ifaces->{$ifname}->{host_mac}" if $ifaces->{$ifname}->{host_mac}; } return $iflist; } my $form = PVE::HTMLForm->new (\%fdat); my $ipform = PVE::HTMLForm->new (\%fdat, 'ipform'); my $brform = PVE::HTMLForm->new (\%fdat, 'brform'); my $cinfo = $fdat{__cinfo}; my $veid = $fdat{veid}; my $cid = $fdat{cid}; my $vzinfo = PVE::Cluster::load_vmconfig ($cinfo, $cid, $veid, 'openvz'); my $status = $vzinfo->{vzlist}->{"VEID_$veid"}->{status}; my $veconf = $vzinfo->{config}; my $ni = $vzinfo->{ni}; my $dns1 = '0.0.0.0'; my $dns2 = '0.0.0.0'; if ($veconf->{nameserver} && $veconf->{nameserver}->{value}) { my @ns = split (/\s+/, $veconf->{nameserver}->{value}); $dns1 = $ns[0] if $ns[0]; $dns2 = $ns[1] if $ns[1]; } my $dnsdomain = ''; if ($veconf->{searchdomain} && $veconf->{searchdomain}->{value}) { $dnsdomain = $veconf->{searchdomain}->{value}; } my $hostname = ''; if ($veconf->{hostname} && $veconf->{hostname}->{value}) { $hostname = $veconf->{hostname}->{value}; } my $iplist = ''; if (defined ($veconf->{ip_address}) && $veconf->{ip_address}->{value}) { foreach my $ip (split (/\s+/, $veconf->{ip_address}->{value})) { $iplist .= $iplist ? ", $ip" : $ip; } } my $bridges = PVE::Utils::get_bridges (); my $ifaces = {}; if (defined ($veconf->{netif}) && $veconf->{netif}->{value}) { $ifaces = PVE::Config::parse_netif ($veconf->{netif}->{value}); } if ($brform->action eq 'save') { my $conn = PVE::ConfigClient::connect (); eval { check_write_mode ($udat{AM}); my $iflist; if ($fdat{eth0bridge} eq 'disabled') { if (defined ($ifaces->{'eth0'})) { delete $ifaces->{'eth0'}; $iflist = create_iflist ($ifaces); } } elsif ($fdat{eth0bridge}) { $ifaces->{'eth0'}->{create} = 1; $ifaces->{'eth0'}->{bridge} = $fdat{eth0bridge}; $iflist = create_iflist ($ifaces); } if (defined ($iflist)) { my $settings = { netif => $iflist }; $conn->vmconfig_set ($udat{auth_username}, $cid, $veid, 'openvz', $settings)->result; } }; $udat{popup_error} = $@ if $@; } if ($ipform->action eq 'save') { my $conn = PVE::ConfigClient::connect (); eval { check_write_mode ($udat{AM}); my $newlist = ''; foreach my $ip (split (/\s*[,;\s]\s*/, $fdat{iplist})) { next if !$ip; if ($ip !~ m/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) { die sprintf (__("Invalid IP address '%s'") . "\n", $ip); } $newlist .= $newlist ? ", $ip" : $ip; } $iplist = $fdat{iplist} = $newlist; my $settings = { ipset => $fdat{iplist} }; $conn->vmconfig_set ($udat{auth_username}, $cid, $veid, 'openvz', $settings)->result; }; $udat{popup_error} = $@ if $@; } if ($form->action eq 'save') { my $conn = PVE::ConfigClient::connect (); eval { check_write_mode ($udat{AM}); check_field (__("Hostname"), $fdat{hostname}, 'NOTEMPTY', 'NOWHITESPACES'); check_field (__("DNS Domain"), $fdat{dnsdomain}, 'NOTEMPTY', 'NOWHITESPACES'); my $settings = {}; my $ns; push @$ns, $fdat{dnsserver1} if $fdat{dnsserver1} && ($fdat{dnsserver1} ne '0.0.0.0'); push @$ns, $fdat{dnsserver2} if $fdat{dnsserver2} && ($fdat{dnsserver2} ne '0.0.0.0'); die __("Please specify at least one DNS server.") . "\n" if !$ns; $settings->{nameserver} = $ns; if ($dnsdomain ne $fdat{dnsdomain}) { $settings->{searchdomain} = $fdat{dnsdomain}; } if ($hostname ne $fdat{hostname}) { # always use fqdn for hostname if (($fdat{hostname} !~ m/\./) && $fdat{dnsdomain}) { $fdat{hostname} = "$fdat{hostname}.$fdat{dnsdomain}"; } $settings->{hostname} = $fdat{hostname}; } if (scalar (keys %$settings) > 0) { $conn->vmconfig_set ($udat{auth_username}, $cid, $veid, 'openvz', $settings)->result; } }; $udat{popup_error} = $@ if $@; } my $out = ''; $out .= $form->create_header(); my $html = ''; $dns1 = $fdat{dnsserver1} if defined ($fdat{dnsserver1}); $dns2 = $fdat{dnsserver2} if defined ($fdat{dnsserver2}); $dnsdomain = $fdat{dnsdomain} if defined ($fdat{dnsdomain}); $hostname = $fdat{hostname} if defined ($fdat{hostname}); $html .= html_table_line (__("Hostname") . ':', $form->create_element ('hostname', 'text', $hostname), __("First DNS Server") . ':', $form->create_element ('dnsserver1', 'ip', $fdat{dnsserver1} || $dns1) ); $html .= html_table_line (__("DNS Domain") . ':', $form->create_element ('dnsdomain', 'text', $fdat{dnsdomain} || $dnsdomain), __("Second DNS Server") . ':', $form->create_element ('dnsserver2', 'ip', $fdat{dnsserver2} || $dns2)); $html .= '
'; $html .= "
"; $html .= $form->create_cmdbutton ('save'); $out .= PVE::HTMLUtils::create_statusframe (undef, __("DNS settings"), undef, $html); $out .= "
"; $out .= $form->create_footer(); if ($iplist || !defined ($ifaces->{'eth0'})) { $out .= $ipform->create_header(); $html = ''; $html .= html_table_line (__("IP Address") . ':', $form->create_element ('iplist', 'text', $fdat{iplist} || $iplist)); $html .= '

'; $html .= $ipform->create_cmdbutton ('save'); $out .= PVE::HTMLUtils::create_statusframe (undef, __("Network Addresses (venet)"), undef, $html, undef, 0); $out .= '
'; $out .= $ipform->create_footer(); } if (!$iplist || defined ($ifaces->{'eth0'})) { $out .= $brform->create_header(); my $eth0bridge = defined ($ifaces->{'eth0'}) ? $ifaces->{'eth0'}->{bridge} || 'vmbr0' : 'disabled'; $html = ''; $html .= html_table_line ( 'eth0:', $brform->create_element ('eth0bridge', 'dropdown', $fdat{eth0bridge} || $eth0bridge, [ 'disabled' , @$bridges ])); $html .= '

'; $html .= $brform->create_cmdbutton ('save'); $out .= PVE::HTMLUtils::create_statusframe (undef, __("Bridged Ethernet Devices"), undef, $html, undef, 0); $out .= $brform->create_footer(); } print OUT $out; -]