[pve-devel] [PATCH v3 guest-common 04/19] helpers: add method to represent config as a table
Fabian Grünbichler
f.gruenbichler at proxmox.com
Fri Oct 18 07:27:07 CEST 2019
On October 17, 2019 7:48 pm, Thomas Lamprecht wrote:
> On 10/14/19 10:28 AM, Oguz Bektas wrote:
>> in vm_pending API, this method is used to represent the configuration as
>> a table with current, pending and delete columns.
>>
>> by adding it as a guesthelper, we can also use it for container pending
>> changes.
>>
>> Signed-off-by: Oguz Bektas <o.bektas at proxmox.com>
>> ---
>> PVE/GuestHelpers.pm | 35 +++++++++++++++++++++++++++++++++++
>> 1 file changed, 35 insertions(+)
>>
>> diff --git a/PVE/GuestHelpers.pm b/PVE/GuestHelpers.pm
>> index a36b9bc..a1ec76f 100644
>> --- a/PVE/GuestHelpers.pm
>> +++ b/PVE/GuestHelpers.pm
>> @@ -142,4 +142,39 @@ sub format_pending {
>> }
>> }
>>
>> +sub conf_table_with_pending {
>
> nothing to do with table itself, it just returns a array of
> hashes with current and pending value..
>
> I'd rather like to not bind method names to something their caller
> may do with them, but to something they actually do their self.
>
> Albeit a good name is not to easy here... Maybe:
> get_current_config_with_pending
>
it does not really 'get' the config either though ;)
I don't really know how to call
hash1 hash2 => list of items derived from hash1 and hash2
except that it's some kind of 'transformation'. it's not a mapping
operation (it could be seen as sequence of three mappings), it's not a
flattening, it's not folding.
there is in fact no information added to the input, it's just presented
in a different structure.
'transform_to_list_with_pending' was about as far as we got off-list,
and Oguz didn't like that at all :-P
>> + my ($conf, $pending_delete_hash) = @_;
>> +
>> + my $res = [];
>> +
>> + foreach my $opt (keys %$conf) {
>> + next if ref($conf->{$opt});
>> + my $item = { key => $opt };
>> + $item->{value} = $conf->{$opt} if defined($conf->{$opt});
>> + $item->{pending} = $conf->{pending}->{$opt} if defined($conf->{pending}->{$opt});
>> + $item->{delete} = ($pending_delete_hash->{$opt}->{force} ? 2 : 1) if exists $pending_delete_hash->{$opt};
>> +
>> + push @$res, $item;
>> + }
>> +
>> + foreach my $opt (keys %{$conf->{pending}}) {
>> + next if $opt eq 'delete';
>> + next if ref($conf->{pending}->{$opt}); # just to be sure
>> + next if defined($conf->{$opt});
>> + my $item = { key => $opt };
>> + $item->{pending} = $conf->{pending}->{$opt};
>> +
>> + push @$res, $item;
>> + }
>> +
>> + while (my ($opt, $force) = each %$pending_delete_hash) {
>> + next if $conf->{pending}->{$opt}; # just to be sure
>> + next if $conf->{$opt};
>> + my $item = { key => $opt, delete => ($force ? 2 : 1)};
>> + push @$res, $item;
>> + }
>> +
>> + return $res;
>> +}
>> +
>> 1;
>>
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
More information about the pve-devel
mailing list