5
0
mirror of git://git.proxmox.com/git/pve-guest-common.git synced 2024-12-24 21:34:13 +03:00
Commit Graph

136 Commits

Author SHA1 Message Date
Thomas Lamprecht
daf8fca57a refactor config_with_pending_array
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-05-20 17:08:09 +02:00
Thomas Lamprecht
43c899e407 fix config_with_pending_array for falsy current values
one could have a config with:
> acpi: 0

and a pending deletion for that to restore the default 1 value.

The config_with_pending_array method then pushed the key twice, one
in the loop iterating the config itself correctly and once in the
pending delete hash, which is normally only for those options not yet
referenced in the config at all. Here the check was on "truthiness"
not definedness, fix that.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-05-20 17:04:40 +02:00
Fabian Grünbichler
9cdd44001a lock_config: rename lock_config_mode -> lock_config_shared
and pull the actual lock_file_full handling into a helper, to make the
public interface clearer:

lock_config -> standard exclusive lock with 10s timeout
lock_config_full -> exclusive lock with configurable timeout
lock_config_shared -> shared lock with configurable timeout

the latter only has a single user (qemu-server's clone API call)
currently.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Tested-by: Fabian Ebner <f.ebner@proxmox.com>
2020-05-05 11:11:57 +02:00
Fabian Grünbichler
990d9675c5 snapshot_delete: check for concurrent modifications at each step
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Tested-by: Fabian Ebner <f.ebner@proxmox.com>
2020-05-05 11:11:57 +02:00
Fabian Ebner
c261973c52 snapshot_rollback: make sure newer replication snapshots are deleted
Commit a1dfeff3a8 changed the behavior
for Replication::prepare with last_sync=0, so use last_sync=1 instead.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-05-05 11:11:37 +02:00
Fabian Grünbichler
82a0485717 snapshot_rollback: flock earlier
to protect checks against concurrent modifications

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Tested-by: Fabian Ebner <f.ebner@proxmox.com>
2020-05-05 11:11:29 +02:00
Fabian Ebner
97b9ccec08 fix 2682: make sure configuration file is up-to-date for lock_config-variants
See [0] for the details. The call tree for the variants is
lock_config -> lock_config_full -> lock_config_mode
so it is sufficient to adapt lock_config_mode.

[0]: https://bugzilla.proxmox.com/show_bug.cgi?id=2682

Suggested-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-05-05 11:11:29 +02:00
Fabian Ebner
093c4c6e09 Avoid duplication by using lock_config_mode
No functional change is intended.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-05-05 11:11:19 +02:00
Alwin Antreich
e8ca21371f Fix: #2124 add zstd support
Signed-off-by: Alwin Antreich <a.antreich@proxmox.com>
2020-05-04 14:08:16 +02:00
Fabian Ebner
95a9508eba Add update_volume_ids
This function is intened to be used after doing a migration where some
of the volume IDs changed.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-04-09 09:39:42 +02:00
Fabian Ebner
36cff88657 Use new storage_migrate interface
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-04-09 09:39:31 +02:00
Thomas Lamprecht
e90f586aab replicaiton: log rate and transport type
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-04-08 13:27:34 +02:00
Thomas Lamprecht
45b4c97f0f replication: dont declare variable in post-if scope
If a variable is defined and assigned in a conditional statement, it
is not defined behavior in Perl.

For more information about this behaviour see
https://perldoc.perl.org/perlsyn.html#Statement-Modifiers

> NOTE: The behaviour of a my, state, or our modified with a
> statement modifier conditional or loop construct (for example,
> `my $x if ...`) is undefined.
> The value of the my variable may be undef, any previously assigned
> value, or possibly anything else.
> Don't rely on it. Future versions of perl might do something
> different from the version of perl you try it out on. Here be
> dragons."

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-04-08 13:20:07 +02:00
Fabian Ebner
261d47a451 foreach_volume(_full): generalize and implement function
Introduce a parameter $opts to allow for better control of which
keys/volumes to use for the iteration and ability to reverse the order.
Also, allow extra parameters for the function.

Removes the '__snapshot'-prefix for future use from outside the module.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-03-27 14:15:22 +01:00
Fabian Ebner
8db0144048 Add foreach_unused_volume
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-03-27 14:10:02 +01:00
Fabian Ebner
4e6382ab58 Add interfaces for volume-related helpers
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
2020-03-27 14:10:02 +01:00
Dominik Csapak
b2b16cee39 make GuestHelpers a subclass of Exporter
or else the Exports will not work

found by hotplugging nics with current master from qemu-server
which resulted in a
'undefined subroutine &PVE::QemuServer::safe_string_ne'

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2020-03-12 11:09:00 +01:00
Thomas Lamprecht
1245ad854c get_backup_volumes: clarifcation and indentation improvements to comment
Aaron clarified that one documented element actually slipped through
and won't be returned.

Also firx the mixed tab/space indentation, for such comments we can
be pretty liberal and I just went with the two spaces per level, as
some part already had that.

Clarify that both array and hash are refs.

[0]: https://pve.proxmox.com/pipermail/pve-devel/2020-March/042070.html

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-03-10 12:17:03 +01:00
Aaron Lauterer
b2a2affa3f abstractconfig: add prototype for get_backup_volumes
Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
2020-03-10 12:13:07 +01:00
Thomas Lamprecht
67b3581e64 config: add missing use GuestHelpers module
import the typesafe_ne method when we're at it
2020-03-10 09:48:22 +01:00
Thomas Lamprecht
47d7954c59 config: return early if $opt is not partial fast pluggable
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-03-10 09:43:56 +01:00
Oguz Bektas
866f5834fd abstractconfig: add partial_fast_plug
allows partial fast plugging of functions as defined in the
$partial_fast_plug_option in qemuserver (and possibly lxc later on)

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
2020-03-10 09:00:05 +01:00
Oguz Bektas
24d90d8d10 guesthelpers: move/add safe comparison functions from lxc and qemu
move the safe_string_ne and safe_num_ne functions to guesthelpers to
remove duplicate code.

add the new safe_boolean_ne and typesafe_ne helper functions

also add them in @EXPORT_OK

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
2020-03-10 09:00:05 +01:00
Thomas Lamprecht
ab44df53f7 fix some typos
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-02-08 16:03:49 +01:00
Thomas Lamprecht
9420142c33 trivial whitespace fix
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-02-07 16:22:47 +01:00
Thomas Lamprecht
fde98d5e11 config trait: allow to pass lock to create_and_lock_config
allows us to reuse this for clone, where we want to create a "clone"
locked config for the target guest.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-01-23 11:01:56 +01:00
Thomas Lamprecht
fb73d112aa grammar fix: s/does not exists/does not exist/g
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-12-13 12:08:06 +01:00
Wolfgang Bumiller
727080edd9 avoid cyclic reference in closure
otherwise this leaks memory

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-11-19 09:46:46 +01:00
Fabian Grünbichler
0c85474f68 use PVE::SSHInfo
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2019-11-18 12:01:39 +01:00
Fabian Grünbichler
96c08a9dcd use PVE::DataCenterConfig
to make sure that the corresponding cfs_read_file works() works.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
2019-11-18 12:01:39 +01:00
Thomas Lamprecht
c24919a9d7 cleanup_pending: refactor and fix $force
pull out $conf->{pending} in a intermediate variable.

While for now only a force key could be in a pending delete value it
still is completely wrong to say the whole hash value is thus $force.

Fix that by omitting that intermediate variable completely and copy
over directly from the source hash.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 20:32:30 +02:00
Thomas Lamprecht
464a42c487 refactor/cleanup remove_from_pending_delete sligthly
return $conf for tests, use intermediate variable for
$conf->{pending}, which besides shorter lines avoids also the
autovification of $config stuff.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 19:44:42 +02:00
Thomas Lamprecht
51e827b8e3 refactor/cleanup add_to_pending_delete sligthly
no need to delete, then re-fill by autovification; just explicitly
overwrite with new value.

Also explicitly populate pending hash if not defined, avoids
auto-vivification which is a bit intransparent.

explicitly return $conf for tests

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 19:35:06 +02:00
Thomas Lamprecht
6a6ad855b2 print_pending_delete: make deterministical
for tests and UX

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 18:04:07 +02:00
Thomas Lamprecht
51088c75f2 refactor print_pending_delete slightly
while this was much better than the old mess from
parse_pending_delete it still was a bit much nested into one line.

split that up a bit, add a render_key helper which does the clunky
"add !" check and just call that one in the map {}

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 17:48:03 +02:00
Thomas Lamprecht
7b9d1adeb2 refactor parse_pending_delete to sane implemenation
this was quite the mess, a perl greedy match over non-whitespace
character is equivalent to a split on whitespace on, but the latter
is much easier to grasp when looking at this the first time.

Do a real for loop with real variable names and less nest everything
into one line.

the test added in the previous commit should give use the safety net
for that cleanup.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 17:48:03 +02:00
Thomas Lamprecht
550010301d helpers: s/conf_table_with_pending/config_with_pending_array/ and comment
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 17:48:03 +02:00
Oguz Bektas
151444810f helpers: add method to represent config as a table
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@proxmox.com>
2019-10-18 17:48:03 +02:00
Oguz Bektas
bd240228e0 helpers: add pending-aware guest config printer from qemu-server
Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
2019-10-18 17:46:59 +02:00
Oguz Bektas
61264e82be abstractconfig: add load_current_config and load_snapshot_config
this code is already used by qemu-server's GET config API call. it is
however better to split this into to methods and decide what to run in
the API call.

this general implementation uses some $class helpers which allow to abstract
away the difference in the child classes. this will be used for
containers once they can do pending changes.

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
2019-10-18 09:28:34 +02:00
Oguz Bektas
810ee08809 abstractconfig: add pending changes related helpers
use a better naming scheme for methods from qemuserver:

split_flagged_list -> parse_pending_delete
join_flagged_list -> print_pending_delete
vmconfig_delete_pending_option -> add_to_pending_delete
vmconfig_undelete_pending_option -> remove_from_pending_delete
vmconfig_cleanup_pending -> cleanup_pending

parse_pending_delete now has a better representation of the force value,
which is encoded in a perl hash i.e. $conf->{$opt}->{force} = 1 or 0
depending on if the string in config has '!' or not.

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
2019-10-18 09:28:34 +02:00
Thomas Lamprecht
1aa76f2f0b base guest config: add common destroy_config implementation
copied over from pve-containers implementation with the same name.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-18 08:47:33 +02:00
Christian Ebner
8c3af92574 fix #1291: implement remove_vmid_from_backup_jobs
remove_vmid_from_backup_jobs updates the vzdump.cron backup jobs,
excluding the given vmid.

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-10-18 07:47:23 +02:00
Christian Ebner
e2a0a93be0 vzdump: move registration of vzdump.cron from manager to guest-common to avoid cyclic dependency
The registration of the vzdump.cron file was handled in pve-manager.
By moving the relevant code to pve-guest-common, cyclic dependencies
for cfs registration are avoided.
This makes this patch of guest-common a build dependency for the other
packages touched in this patch series.

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-10-18 07:47:23 +02:00
Thomas Lamprecht
5ee5f8873e followup: rename to print_snapshot_tree, add comment and rename $res param
This was taken from a CLI helper, there $res is a common parameter
name which denotes that it's the res from the API call the CLI
command bases on. But here that makes no sense and is not really
telling about what the value(s) of $res could be. Further explain
that with a comment.

As this also prints uncoditionally to STDOUT let's say so through the
method name.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-10-01 17:20:27 +02:00
Oguz Bektas
725dcadba3 reformat code for snapshot tree into GuestHelpers
qm/pct listsnapshot lack feature parity w.r.t. showing snapshots in a
tree ordered by the date. by moving this code into GuestHelpers, it can
be shared.

Signed-off-by: Oguz Bektas <o.bektas@proxmox.com>
2019-10-01 17:15:04 +02:00
Christian Ebner
1daaf2ea3f implement remove_vmid_jobs for ReplicationConfig
Allows to remove replication jobs from the config based on the vmid.

Preparations for #1291 fix

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
2019-09-04 16:36:34 +02:00
Wolfgang Link
3cdcfff633 increase max reading replication state file size.
In this file, the error of a failed job will also be stored.
The default 32768 bytes are not very much.

This file is on the local filesystem so there is no filesystem
size restrictions like in /etc/pve.
2019-04-17 07:26:53 +00:00
Thomas Lamprecht
1c9da8ac5b follouwp: saner exception handling
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2019-02-01 10:10:48 +01:00
Dominik Csapak
3acb4e7463 add check/exec_hookscript to GuestHelpers
check_hookscript will be used for the container/vm api to check if the
hookscript volume id is correct

exec_hookscript can be called to execute a hookscript

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2019-02-01 10:10:48 +01:00