[pve-devel] [PATCH v2 storage 2/3] rbd: use pve-storage-portal-dns-list for monhost

Wolfgang Bumiller w.bumiller at proxmox.com
Thu Jul 7 11:20:57 CEST 2016


Forgot the changelog (this is the only changed patch):

* Changed from address-list to pve-storage-portal-dns-list since
  address-list doesn't allow specifying ports.
* With the above change support for ipv6-dot-port notation is added as
  well.

On Thu, Jul 07, 2016 at 11:18:15AM +0200, Wolfgang Bumiller wrote:
> This way we get parameter verification on monitor addresses
> as well as the ability to pass multiple `--monhost`
> arguments to `pvesm add`.
> 
> Since our '-list' schemas default to using commas we now
> need to properly support these, so all uses of the monhost
> property now replace all of semicolon, space or comma into
> the currently required character.
> This should fix the issues reported by Alwin Antreich on the
> pve-user list.
> 
> Since this schema supports both ipv6+port notations we need
> to make sure we convert to the bracket enclosed variant.
> Added a helper for this.
> ---
>  PVE/Storage/RBDPlugin.pm | 22 ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm
> index ced9af0..ca3c284 100644
> --- a/PVE/Storage/RBDPlugin.pm
> +++ b/PVE/Storage/RBDPlugin.pm
> @@ -3,6 +3,7 @@ package PVE::Storage::RBDPlugin;
>  use strict;
>  use warnings;
>  use IO::File;
> +use Net::IP;
>  use PVE::Tools qw(run_command trim);
>  use PVE::Storage::Plugin;
>  use PVE::JSONSchema qw(get_standard_option);
> @@ -25,11 +26,21 @@ my $add_pool_to_disk = sub {
>      return "$pool/$disk";
>  };
>  
> +my $hostlist = sub {
> +    my ($list_text, $separator) = @_;
> +    my @monhostlist = PVE::Tools::split_list($list_text);
> +    return join($separator, map {
> +	my ($host, $port) = PVE::Tools::parse_host_and_port($_);
> +	$port = defined($port) ? ":$port" : '';
> +	$host = "[$host]" if Net::IP::ip_is_ipv6($host);
> +	"${host}${port}"
> +    } @monhostlist);
> +};
> +
>  my $rbd_cmd = sub {
>      my ($scfg, $storeid, $op, @options) = @_;
>  
> -    my $monhost = $scfg->{monhost};
> -    $monhost =~ s/;/,/g;
> +    my $monhost = $hostlist->($scfg->{monhost}, ',');
>  
>      my $keyring = "/etc/pve/priv/ceph/${storeid}.keyring";
>      my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
> @@ -55,8 +66,7 @@ my $rbd_cmd = sub {
>  my $rados_cmd = sub {
>      my ($scfg, $storeid, $op, @options) = @_;
>  
> -    my $monhost = $scfg->{monhost};
> -    $monhost =~ s/;/,/g;
> +    my $monhost = $hostlist->($scfg->{monhost}, ',');
>  
>      my $keyring = "/etc/pve/priv/ceph/${storeid}.keyring";
>      my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
> @@ -248,7 +258,7 @@ sub properties {
>      return {
>  	monhost => {
>  	    description => "Monitors daemon ips.",
> -	    type => 'string',
> +	    type => 'string', format => 'pve-storage-portal-dns-list',
>  	},
>  	pool => {
>  	    description => "Pool.",
> @@ -302,7 +312,7 @@ sub path {
>      my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>      return ("/dev/rbd/$pool/$name", $vmid, $vtype) if $scfg->{krbd};
>  
> -    my $monhost = $scfg->{monhost};
> +    my $monhost = $hostlist->($scfg->{monhost}, ';');
>      $monhost =~ s/:/\\:/g;
>  
>      my $username =  $scfg->{username} ? $scfg->{username} : 'admin';
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 




More information about the pve-devel mailing list