This allows the protocol used to replicate data to the DR host to be configured. By default, 'async' is used.
This allows the protocol used to replicate data to the DR host to be configured. By default, 'short-throw' is used.
.br
.br
Modes:
Modes:
.br
.br
async (default)
short-throw (default)
This tells the storage layer to consider the write to be completed once the data is on the active node's network transmit buffer. In this way, the DR host is allowed to fall behind a small amount, but the active nodes will not slow down because of higher network transit times to the DR location.
This tells the storage layer to consider the write to be completed once the data is on the active node's network transmit buffer. In this way, the DR host is allowed to fall behind a small amount, but the active nodes will not slow down because of higher network transit times to the DR location.
.br
.br
@ -85,6 +82,9 @@ long-throw
\fB\-\-remove\fB
\fB\-\-remove\fB
This removes the DR image from the DR host for the server, freeing up space on DR but removing the protection afforded by DR.
This removes the DR image from the DR host for the server, freeing up space on DR but removing the protection afforded by DR.
.TP
.TP
\fB\-\-show\fR
This will show the list of available Anvil! nodes, DR hosts and servers.
.TP
\fB\-\-server\fB <server name or uuid> (required)
\fB\-\-server\fB <server name or uuid> (required)
This is the name or UUID of the server being worked on.
This is the name or UUID of the server being worked on.
@ -24,14 +24,28 @@ Set the log level to 1, 2 or 3 respectively. Be aware that level 3 generates a s
.SS"Commands:"
.SS"Commands:"
.TP
.TP
\fB\-\-boot\-menu\fR <yes,no>
\fB\-\-boot\-menu\fR <yes,no>
.TP
When called without a value, it shows if the boot menu is enabled or not. If called with 'yes', it enables the boot menu. If called with 'no', the boot meny is disabled.
When called without a value, it shows if the boot menu is enabled or not. If called with 'yes', it enables the boot menu. If called with 'no', the boot meny is disabled.
.TP
.TP
\fB\-\-boot\-order\fR <dev1,dev2,...,devN>
When called without a value, it shows if the current order of boot devices. To set a new boot device order, use a comma-separated list of boot devices. Note that any boot devices that are not specified will be moved in their original order to boot after the specified devices are moved up. For this reason, you can just specify the device you want to boot, and it will be moved to the front of the list.
.TP
\fB\-\-cpu\fR <cores or sockets,cores or sockets,cores,threads>
If called without a value, the current CPU core allocation is shown. To change it, you can specify simply a core count, which will appear as a single socket CPU with the specified number of cores. The maximum total number of cores is two-less than the total cores on the host Anvil! node.
.TP
.BR
Alternatively, you can specify '--cput x,y', where 'x' will be the number of sockets to emulate, and 'y' will be the number of cores per socket. Example; '--cpu 2,4' would give 8 total cores, emulates as 2 sockets, each with a 4-core CPU.
.TP
.BR
Lastly, you can specify '--cput x,y,z', where the 'z' adds how many threads to use. Example; '--cpu 1,2,2' would give 8 total cores, emulates as 1 socket, each with a 2-core CPU, and each core being 2 threads.
.TP
\fB\-\-job\-uuid\fR
\fB\-\-job\-uuid\fR
This is the jobs -> job_uuid to execute. Generally this is only used by other programs.
This is the jobs -> job_uuid to execute. Generally this is only used by other programs.
.TP
.TP
\fB\-\-\fR
\fB\-\-ram\fR <size>
If this is called without a value, the current RAM allocated to the server is displayed. If it is passed with a size, and if that size is available, the amount of RAM allocated to the server will be updated.
.TP
.BR
The size can be in bytes, or a human-readible size, using base-2 notation. Ie: '8GiB' (no space) and '8589934592' are the same.
.IP
.IP
.SHAUTHOR
.SHAUTHOR
Written by Madison Kelly, Alteeve staff and the Anvil! project contributors.
Written by Madison Kelly, Alteeve staff and the Anvil! project contributors.
@ -736,6 +736,20 @@ The XML that failed sanity check was:
<keyname="error_0465"><![CDATA[The file: [#!variable!file!#] doesn't exist on the target: [#!variable!target!#].]]></key>
<keyname="error_0465"><![CDATA[The file: [#!variable!file!#] doesn't exist on the target: [#!variable!target!#].]]></key>
<keyname="error_0466"><![CDATA[The Anvil! string (name or UUID): [#!variable!string!#] didn't match any known Anvil! in the database.]]></key>
<keyname="error_0466"><![CDATA[The Anvil! string (name or UUID): [#!variable!string!#] didn't match any known Anvil! in the database.]]></key>
<keyname="error_0467"><![CDATA[[ Error ] - The repartition attemp failed! Reloading the partition table now!]]]></key>
<keyname="error_0467"><![CDATA[[ Error ] - The repartition attemp failed! Reloading the partition table now!]]]></key>
<keyname="error_0468">We need: [#!variable!space_needed!# (#!variable!space_needed_bytes!# Bytes)] from the storage group: [#!variable!storage_group!#], but the requested DR host does not appear to have a volume group in this storage group. Hint, please use 'anvil-manage-storage-groups' to resolve. Unable to proceed.</key>
<keyname="error_0469">[ Error ] - The device: [#!variable!device_target!#] was not found, exiting.</key>
<keyname="error_0470">[ Error ] - The new definition is bad:
========
#!variable!new_server_definition!#
========
[ Error ] - The new definition, shown above failed its test parsing, aborting.</key>
<keyname="error_0471">[ Error ] - There was a problem trying to save the new definition. Details should be in the logs. It's possible the update partially applied.</key>
<keyname="error_0472">[ Error ] - The RAM being recorded for the server: [#!variable!server_name!#] is too low, and likely a program error. The minimum RAM that can be allocated to a server is 640 KiB (655,360 bytes), but this server tried to record allocated: [#!variable!allocated_ram!#] and in-use: [#!variable!ram_in_use!#] RAM.</key>
<keyname="error_0473">[ Error ] - The requested size: [#!variable!requested_ram!#] is not a valid size. Please specify the size in bytes, or specify the size with a base-2 suffix, like '8GiB'.</key>
<keyname="error_0474">[ Error ] - The requested size: [#!variable!requested_ram!#] is greater than the maximum RAM: [#!variable!max_ram!#].</key>
<keyname="error_0475">[ Error ] - The requested size: [#!variable!requested_ram!#] is less than 640 KiB, this must be a mistake.</key>
<keyname="error_0476">[ Error ] - The requested CPU: [#!variable!requested_cpu!#] is not valid. Valid options are '--cpu X', '--cpu Y,X' or '--cpu 'Y,X,Z' where 'X' is the number of cores per socket, 'Y' is the number of sockets and 'Z' is the number of threads per core.</key>
<keyname="error_0477">[ Error ] - The requested number of cores: [#!variable!requested_cores!#] (sockets: [#!variable!new_sockets!], cores per socket: [#!variable!new_cores!#], threads per core: [#!variable!new_threads!#]).</key>
<!-- Files templates -->
<!-- Files templates -->
<!-- NOTE: Translating these files requires an understanding of which lines are translatable -->
<!-- NOTE: Translating these files requires an understanding of which lines are translatable -->
@ -1705,6 +1719,9 @@ Note: This is a permanent action! If you protect this server again later, a full
<keyname="job_0475">The subnode: [#!variable!subnode!#] is not ready. Configured: [#!variable!configured!#], maintenance mode: [#!variable!maintenance_mode!#], job_running: [#!variable!job_running!#].</key>
<keyname="job_0475">The subnode: [#!variable!subnode!#] is not ready. Configured: [#!variable!configured!#], maintenance mode: [#!variable!maintenance_mode!#], job_running: [#!variable!job_running!#].</key>
<keyname="job_0476">Waiting for a bit, then will check again.</key>
<keyname="job_0476">Waiting for a bit, then will check again.</key>
<keyname="job_0477">Waiting for both subnodes to be configured and out of maintenance mode.</key>
<keyname="job_0477">Waiting for both subnodes to be configured and out of maintenance mode.</key>
<keyname="job_0478">Preparing the new definition file</key>
<keyname="job_0479">The new definition is ready, saving it.</key>
<keyname="job_0480">Running as a job, not prompting the user to confirm.</key>
print "Added the volume group: [".$lvm_vg_name."] on the host: [".$short_host_name."] to the storage group: [".$storage_group_name."]. The new member UUID is: [".$storage_group_member_uuid."].\n";
print "Added the volume group: [".$lvm_vg_name."] on the host: [".$short_host_name."] to the storage group: [".$storage_group_name."]. The new member UUID is: [".$storage_group_member_uuid."].\n";
$anvil->nice_exit({exit_code => 0});
}
}
else
else
{
{
@ -404,6 +405,7 @@ sub manage_group_member
storage_group_member_note => "DELETED",
storage_group_member_note => "DELETED",
});
});
print "Added the volume group: [".$lvm_vg_name."] on the host: [".$short_host_name."] has been removed from storage group: [".$storage_group_name."].\n";
print "Added the volume group: [".$lvm_vg_name."] on the host: [".$short_host_name."] has been removed from storage group: [".$storage_group_name."].\n";
foreach my $storage_group_name (sort {$a cmp $b} keys %{$anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_name}})
foreach my $storage_group_name (sort {$a cmp $b} keys %{$anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_name}})
@ -452,7 +454,7 @@ sub show_data
my $storage_group_member_uuid = $anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_uuid}{$storage_group_uuid}{host_uuid}{$member_host_uuid}{storage_group_member_uuid};
my $storage_group_member_uuid = $anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_uuid}{$storage_group_uuid}{host_uuid}{$member_host_uuid}{storage_group_member_uuid};
my $vg_internal_uuid = $anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_uuid}{$storage_group_uuid}{host_uuid}{$member_host_uuid}{vg_internal_uuid};
my $vg_internal_uuid = $anvil->data->{storage_groups}{anvil_uuid}{$anvil_uuid}{storage_group_uuid}{$storage_group_uuid}{host_uuid}{$member_host_uuid}{vg_internal_uuid};
my $vg_name = $anvil->data->{vgs}{host_uuid}{$member_host_uuid}{scan_lvm_vg_internal_uuid}{$vg_internal_uuid}{scan_lvm_vg_name};
my $vg_name = $anvil->data->{vgs}{host_uuid}{$member_host_uuid}{scan_lvm_vg_internal_uuid}{$vg_internal_uuid}{scan_lvm_vg_name};