diff --git a/Anvil/Tools.pm b/Anvil/Tools.pm
index 3e39c7e7..dd3aacb0 100644
--- a/Anvil/Tools.pm
+++ b/Anvil/Tools.pm
@@ -1189,6 +1189,7 @@ sub _set_paths
stonith_admin => "/usr/sbin/stonith_admin",
storcli64 => "/opt/MegaRAID/storcli/storcli64",
strings => "/usr/bin/strings",
+ 'striker-auto-initialize-all' => "/usr/sbin/striker-auto-initialize-all",
'striker-get-peer-data' => "/usr/sbin/striker-get-peer-data",
'striker-initialize-host' => "/usr/sbin/striker-initialize-host",
'striker-manage-install-target' => "/usr/sbin/striker-manage-install-target",
diff --git a/Anvil/Tools/Database.pm b/Anvil/Tools/Database.pm
index 1d9bc06b..96e9d6ee 100644
--- a/Anvil/Tools/Database.pm
+++ b/Anvil/Tools/Database.pm
@@ -3208,33 +3208,33 @@ WHERE
my $job_status = $results->[0]->[10];
my $modified_date = $results->[0]->[11];
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => {
- job_host_uuid => $job_host_uuid,
- job_command => $job_command,
- job_data => $job_data,
- job_picked_up_by => $job_picked_up_by,
- job_picked_up_at => $job_picked_up_at,
- job_updated => $job_updated,
- job_name => $job_name,
- job_progress => $job_progress,
- job_title => $job_title,
- job_description => $job_description,
- job_status => $job_status,
- modified_date => $modified_date,
+ job_host_uuid => $job_host_uuid,
+ job_command => $job_command,
+ job_data => $job_data,
+ job_picked_up_by => $job_picked_up_by,
+ job_picked_up_at => $job_picked_up_at,
+ job_updated => $job_updated,
+ job_name => $job_name,
+ job_progress => $job_progress,
+ job_title => $job_title,
+ job_description => $job_description,
+ job_status => $job_status,
+ modified_date => $modified_date,
}});
$return = {
- job_host_uuid => $job_host_uuid,
- job_command => $job_command,
- job_data => $job_data,
- job_picked_up_by => $job_picked_up_by,
- job_picked_up_at => $job_picked_up_at,
- job_updated => $job_updated,
- job_name => $job_name,
- job_progress => $job_progress,
- job_title => $job_title,
- job_description => $job_description,
- job_status => $job_status,
- modified_date => $modified_date,
+ job_host_uuid => $job_host_uuid,
+ job_command => $job_command,
+ job_data => $job_data,
+ job_picked_up_by => $job_picked_up_by,
+ job_picked_up_at => $job_picked_up_at,
+ job_updated => $job_updated,
+ job_name => $job_name,
+ job_progress => $job_progress,
+ job_title => $job_title,
+ job_description => $job_description,
+ job_status => $job_status,
+ modified_date => $modified_date,
};
return($return);
@@ -3343,18 +3343,18 @@ WHERE
}
push @{$return}, {
- job_uuid => $job_uuid,
- job_command => $job_command,
- job_data => $job_data,
- job_picked_up_by => $job_picked_up_by,
- job_picked_up_at => $job_picked_up_at,
- job_updated => $job_updated,
- job_name => $job_name,
- job_progress => $job_progress,
- job_title => $job_title,
- job_description => $job_description,
- job_status => $job_status,
- modified_date => $modified_date,
+ job_uuid => $job_uuid,
+ job_command => $job_command,
+ job_data => $job_data,
+ job_picked_up_by => $job_picked_up_by,
+ job_picked_up_at => $job_picked_up_at,
+ job_updated => $job_updated,
+ job_name => $job_name,
+ job_progress => $job_progress,
+ job_title => $job_title,
+ job_description => $job_description,
+ job_status => $job_status,
+ modified_date => $modified_date,
};
}
@@ -7481,6 +7481,8 @@ Variables can not be passed to this title key.
* This is not required when C<< update_progress_only >> is set
+B<< Note >>: This can be set to the special C<< scancore_startup >>. When the job status is set to this value, the job will only run when ScanCore next starts up (generally after a reboot).
+
=head3 job_uuid (optional)
This is the C<< job_uuid >> to update. If it is not specified but the C<< job_name >> is, a check will be made to see if an entry already exists. If so, that row will be UPDATEd. If not, a random UUID will be generated and a new entry will be INSERTed.
diff --git a/Anvil/Tools/Job.pm b/Anvil/Tools/Job.pm
index 3c1bfa62..2ce7438a 100644
--- a/Anvil/Tools/Job.pm
+++ b/Anvil/Tools/Job.pm
@@ -332,7 +332,7 @@ sub get_job_uuid
my $anvil = $self->parent;
my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3;
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0125", variables => { method => "Job->get_job_uuid()" }});
-
+
my $job_uuid = "";
my $host_uuid = defined $parameter->{host_uuid} ? $parameter->{host_uuid} : $anvil->Get->host_uuid;
my $program = defined $parameter->{program} ? $parameter->{program} : "";
diff --git a/Anvil/Tools/Remote.pm b/Anvil/Tools/Remote.pm
index bdebd2cd..da6ca4ba 100644
--- a/Anvil/Tools/Remote.pm
+++ b/Anvil/Tools/Remote.pm
@@ -172,10 +172,16 @@ sub add_target_to_known_hosts
{
# Failed to add. :(
+ my $say_user = $user;
+ if (($say_user =~ /^\d+$/) && (getpwuid($user)))
+ {
+ $say_user = getpwuid($user);
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { say_user => $say_user }});
+ }
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "error_0009", variables => {
target => $target,
port => $port,
- user => getpwuid($user) ? getpwuid($user) : $user,
+ user => $say_user,
}});
return(1);
}
@@ -1020,10 +1026,16 @@ sub _call_ssh_keyscan
}});
# Log what we're doing
+ my $say_user = $user;
+ if (($say_user =~ /^\d+$/) && (getpwuid($user)))
+ {
+ $say_user = getpwuid($user);
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { say_user => $say_user }});
+ }
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, priority => "alert", key => "log_0159", variables => {
target => $target,
port => $port,
- user => getpwuid($user) ? getpwuid($user) : $user,
+ user => $say_user,
}});
# Redirect STDERR to STDOUT and grep off the comments.
diff --git a/share/words.xml b/share/words.xml
index f185d9e3..04643a31 100644
--- a/share/words.xml
+++ b/share/words.xml
@@ -681,6 +681,12 @@ It should be provisioned in the next minute or two.
Preparing to delete the server: [#!variable!server_name!#].
Using virsh to destroy (force off) the server: [#!variable!server_name!#], if it is still running.
Enabled the HA repository for CentOS Stream.
+ Initialize Stage-1 installed systems into a full Anvil!.
+ This program is designed the automation of turning a set of stage-1 (bare OS + anvil-repo) systems and turn them into a fully functioning Anvil! system.
+ We need to setup pairing with Striker: [#!variable!number!#]. We will wait for it to come up. Be sure that you're run 'striker-auto-initialize-all' on it.
+ Successfully connected to Striker: [#!variable!number!#] using the IP: [#!variable!ip!#]!
+ No connection to Striker: [#!variable!number!#] via the IP: [#!variable!ip!#].
+ Failed to connect Striker: [#!variable!number!#] over any IPs. Sleeping a bit and then trying again.
Starting: [#!variable!program!#].
@@ -1367,6 +1373,7 @@ The file: [#!variable!file!#] needs to be updated. The difference is:
Wiping the metadata from the DRBD resource: [#!variable!resource!#].
Wiping any file system signatures and then deleting the logical volume: [#!variable!device_path!#].
The resource name: [#!variable!resource_name!#] was found, returning the first TCP port and minor number.
+ The job: [#!variable!command!#] with UUID: [#!variable!job_uuid!#] is a start-time job, not running it now.
The host name: [#!variable!target!#] does not resolve to an IP address.
diff --git a/tools/anvil-daemon b/tools/anvil-daemon
index c3682e56..c00dc9f3 100755
--- a/tools/anvil-daemon
+++ b/tools/anvil-daemon
@@ -717,9 +717,9 @@ FROM
WHERE
variable_source_table = 'hosts'
AND
- variable_source_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)."
+ variable_source_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)."
AND
- variable_name = 'reboot::needed'
+ variable_name = 'reboot::needed'
;";
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, key => "log_0124", variables => { query => $query }});
my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__});
@@ -774,6 +774,9 @@ AND
}
}
+ # Now look for jobs that have a job status of 'scancore_startup'
+ run_jobs($anvil, 1);
+
# Check the firewall needs to be updated.
check_firewall($anvil);
@@ -856,7 +859,7 @@ sub keep_running
}
# Run any pending jobs by calling 'anvil-jobs' with the 'job_uuid' as a background process.
- run_jobs($anvil) if not $anvil->data->{sys}{mapping_network};
+ run_jobs($anvil, 0) if not $anvil->data->{sys}{mapping_network};
return(0);
}
@@ -866,7 +869,8 @@ sub keep_running
# invoked to handle it.
sub run_jobs
{
- my ($anvil) = @_;
+ my ($anvil, $startup) = @_;
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { startup => $startup }});
# This will be set to 1 if any jobs are not complete, preventing a restart of the daemon if it's
# changed on disk.
@@ -876,11 +880,13 @@ sub run_jobs
my $jobs_file = "{\"jobs\":[\n";
# Get a list of pending or incomplete jobs.
- my $return = $anvil->Database->get_jobs({debug => 3, ended_within => 300});
- my $count = @{$return};
+ my $ended_within = $startup ? 1 : 300;
+ my $return = $anvil->Database->get_jobs({debug => 3, ended_within => $ended_within});
+ my $count = @{$return};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => {
- 'return' => $return,
- count => $count,
+ ended_within => $ended_within,
+ 'return' => $return,
+ count => $count,
}});
foreach my $hash_ref (@{$return})
{
@@ -1023,6 +1029,17 @@ sub run_jobs
# If the job is done, move on.
next if $job_progress eq "100";
+ # If 'startup' is set, we only care if 'job_status' is 'scancore_startup'
+ if ((not $startup) && ($say_status eq "scancore_startup"))
+ {
+ # Skip this, it will run next time anvil-daemon restarts.
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0593", variables => {
+ command => $job_command,
+ job_uuid => $job_uuid,
+ }});
+ next;
+ }
+
# If the job is not running, start it.
if ((not $job_picked_up_by) && ($job_progress ne "100") && (not $anvil->data->{switches}{'no-start'}))
{
diff --git a/tools/striker-auto-initialize-all b/tools/striker-auto-initialize-all
index 66787af8..42c11c17 100755
--- a/tools/striker-auto-initialize-all
+++ b/tools/striker-auto-initialize-all
@@ -23,12 +23,6 @@ if (($running_directory =~ /^\./) && ($ENV{PWD}))
=cut
Striker initialization;
-anvil=# SELECT * FROM jobs WHERE job_uuid = '158e8384-eac7-4289-8f70-bc43eaf8b017';
- job_uuid | job_host_uuid | job_command | job_data | job_picked_up_by | job_picked_up_at | job_updated | job_name | job_progress | job_title | job_description | job_status | modified_date
---------------------------------------+--------------------------------------+--------------------------------+--------------------+------------------+------------------+-------------+--------------------+--------------+-----------+-----------------+------------+-------------------------------
- 158e8384-eac7-4289-8f70-bc43eaf8b017 | a64c477b-b0a1-4985-9968-f4b46d75fb0c | /usr/sbin/anvil-configure-host | form::config_step2 | 0 | 0 | 1613525509 | configure::network | 0 | job_0001 | job_0002 | | 2021-02-16 20:31:49.108908-05
-
-
# At this point, the Striker should be coming up at the IP. Once both/all Strikers are up, update their anvil.conf to add each other's UUID database entry.
# FROM ONE STRIKER;
job_uuid | job_host_uuid | job_command | job_data | job_picked_up_by | job_picked_up_at | job_updated | job_name | job_progress | job_title | job_description | job_status | modified_date
@@ -77,6 +71,8 @@ if (not $anvil->data->{sys}{database}{connections})
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, priority => "err", key => "error_0003"});
$anvil->nice_exit({exit_code => 1});
}
+$anvil->data->{switches}{config} = "";
+$anvil->data->{switches}{'job-uuid'} = "";
$anvil->Get->switches;
# Read in the config file
@@ -99,26 +95,26 @@ if ((not exists $anvil->data->{base}{prefix}) or ($anvil->data->{base}{prefix} e
# Find myself
find_myself($anvil);
-if (not $anvil->data->{striker}{i_am})
+if (not $anvil->data->{i_am}{striker})
{
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 0, key => "error_0242", variables => { file => $anvil->data->{switches}{config} }});
$anvil->nice_exit({exit_code => 1});
}
# If I am not configured, configure myself now.
-#my $configured = $anvil->System->check_if_configured;
-my $configured = 0;
+my $configured = $anvil->System->check_if_configured;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { configured => $configured }});
if ($configured)
{
# If I am not Striker 1, I am done.
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "striker::i_am" => $anvil->data->{striker}{i_am} }});
- if ($anvil->data->{striker}{i_am} ne "1")
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "i_am::striker" => $anvil->data->{i_am}{striker} }});
+ if ($anvil->data->{i_am}{striker} ne "1")
{
# We're done.
- $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 0, key => "message_0221", variables => { striker => $anvil->data->{striker}{i_am} }});
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 0, key => "message_0221", variables => { striker => $anvil->data->{i_am}{striker} }});
$anvil->nice_exit({exit_code => 0});
}
+ striker_stage2($anvil);
}
else
{
@@ -138,6 +134,127 @@ $anvil->nice_exit({exit_code => 0});
# Functions #
#############################################################################################################
+# This does the rest of the setup.
+sub striker_stage2
+{
+ my ($anvil) = @_;
+
+ # Merge my peer Striker.
+ merge_peer_striker($anvil);
+
+ return(0);
+}
+
+# Merge my peer Striker.
+sub merge_peer_striker
+{
+ my ($anvil) = @_;
+
+ # For each peer, see if we're already connected to it.
+ foreach my $striker_number (sort {$a cmp $b} keys %{$anvil->data->{striker}})
+ {
+ next if $striker_number !~ /^\d+$/;
+ next if $striker_number == $anvil->data->{i_am}{striker};
+ next if not exists $anvil->data->{striker}{$striker_number}{network};
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { striker_number => $striker_number }});
+
+ # Use the MAC address(es) to look for a host UUID. If we don't find one, we need to peer it.
+ my $peer_host_uuid = 0;
+ my $peer_ips = [];
+ foreach my $network (sort {$a cmp $b} keys %{$anvil->data->{striker}{$striker_number}{network}})
+ {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { network => $network }});
+ foreach my $network_number (sort {$a cmp $b} keys %{$anvil->data->{striker}{$striker_number}{network}{$network}})
+ {
+ my $ip = $anvil->data->{striker}{$striker_number}{network}{$network}{$network_number}{ip};
+ push @{$peer_ips}, $ip;
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ network_number => $network_number,
+ ip => $ip,
+ }});
+ foreach my $link_number (sort {$a cmp $b} keys %{$anvil->data->{striker}{$striker_number}{network}{$network}{$network_number}{'link'}})
+ {
+ next if $peer_host_uuid;
+ my $mac_address = lc($anvil->data->{striker}{$striker_number}{network}{$network}{$network_number}{'link'}{$link_number}{mac});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ link_number => $link_number,
+ mac_address => $mac_address,
+ }});
+ my $query = "
+SELECT
+ network_interface_host_uuid
+FROM
+ network_interfaces
+WHERE
+ network_interface_operational != 'DELETED'
+AND
+ network_interface_mac_address = ".$anvil->Database->quote($mac_address)."
+;";
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { query => $query }});
+
+ my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__});
+ my $count = @{$results};
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
+ results => $results,
+ count => $count,
+ }});
+ if ($count)
+ {
+ $peer_host_uuid = $results->[0]->[0];
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { peer_host_uuid => $peer_host_uuid }});
+ }
+ }
+ }
+ }
+
+ if (not $peer_host_uuid)
+ {
+ ### Add the peer.
+ # First, wait for access.
+ my $waiting = 1;
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0227", variables => { number => $striker_number }});
+
+ while ($waiting)
+ {
+ foreach my $ip (@{$peer_ips})
+ {
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { ip => $ip }});
+ my $access = $anvil->Remote->test_access({
+ target => $ip,
+ password => $anvil->data->{base}{password}{desired},
+ });
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { access => $access }});
+ if ($access)
+ {
+ # Success!
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0228", variables => {
+ number => $striker_number,
+ ip => $ip,
+ }});
+ exit(0);
+ }
+ else
+ {
+ # No access
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0229", variables => {
+ number => $striker_number,
+ ip => $ip,
+ }});
+ }
+ }
+ if ($waiting)
+ {
+ # Wait 30 seconds and try again
+ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "job_0230", variables => { number => $striker_number }});
+ sleep 30;
+ }
+ }
+ }
+ }
+
+ return(0);
+}
+
# This preps and requests the initial configuration job.
sub striker_stage1
{
@@ -205,7 +322,7 @@ sub striker_stage1
}
}
- my $striker_number = $anvil->data->{striker}{i_am};
+ my $striker_number = $anvil->data->{i_am}{striker};
my $organization_name = $anvil->data->{base}{organization_name};
my $prefix = $anvil->data->{base}{prefix};
my $domain = $anvil->data->{base}{domain};
@@ -379,6 +496,36 @@ sub striker_stage1
}
+ # Call anvil-configure-host now.
+ my ($job_uuid) = $anvil->Database->insert_or_update_jobs({
+ debug => 2,
+ job_host_uuid => $anvil->data->{cgi}{host_uuid}{value},
+ job_command => $anvil->data->{path}{exe}{'anvil-configure-host'},
+ job_data => "form::config_step2",
+ job_name => "configure::network",
+ job_title => "job_0001",
+ job_description => "job_0071",
+ job_progress => 0,
+ });
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { job_uuid => $job_uuid }});
+
+ # If we're striker 1, add a job to restart ourselves when ScanCore starts (after the reboot)
+ if ($striker_number eq "1")
+ {
+ my ($job_uuid) = $anvil->Database->insert_or_update_jobs({
+ debug => 2,
+ job_host_uuid => $anvil->data->{cgi}{host_uuid}{value},
+ job_command => $anvil->data->{path}{exe}{'striker-auto-initialize-all'}." --config ".$anvil->data->{switches}{config},
+ job_data => "",
+ job_name => "configure::auto_initialize",
+ job_title => "job_0225",
+ job_description => "job_0226",
+ job_status => "scancore_startup",
+ job_progress => 0,
+ });
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { job_uuid => $job_uuid }});
+ }
+
return(0);
}
@@ -393,14 +540,7 @@ sub find_myself
$anvil->Network->get_ips({debug => 3});
-# print Dumper $anvil->data->{network}{$short_host_name}{interface};
-# foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{network}{$short_host_name}{interface}})
-# {
-# print "Interface: [".$interface."]\n";
-# }
-# die;
-
- $anvil->data->{striker}{i_am} = 0;
+ $anvil->data->{i_am}{striker} = 0;
foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{network}{$short_host_name}{interface}})
{
my $ip_address = $anvil->data->{network}{$short_host_name}{interface}{$interface}{ip};
@@ -423,6 +563,7 @@ sub find_myself
foreach my $striker_number (sort {$a cmp $b} keys %{$anvil->data->{striker}})
{
+ next if $striker_number !~ /^\d+$/;
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { striker_number => $striker_number }});
foreach my $network (sort {$a cmp $b} keys %{$anvil->data->{striker}{$striker_number}{network}})
{
@@ -439,12 +580,12 @@ sub find_myself
mac_address => $mac_address,
this_mac_address => $this_mac_address,
}});
- if ((not $anvil->data->{striker}{i_am}) && ($this_mac_address eq $mac_address))
+ if ((not $anvil->data->{i_am}{striker}) && ($this_mac_address eq $mac_address))
{
# This is us.
- $anvil->data->{striker}{i_am} = $striker_number;
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "striker::i_am" => $anvil->data->{striker}{i_am} }});
- return($anvil->data->{striker}{i_am});
+ $anvil->data->{i_am}{striker} = $striker_number;
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "i_am::striker" => $anvil->data->{i_am}{striker} }});
+ return($anvil->data->{i_am}{striker});
}
}
}
@@ -452,7 +593,28 @@ sub find_myself
}
}
- $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { i_am_striker => $anvil->data->{striker}{i_am} }});
- return($anvil->data->{striker}{i_am});
+ $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { i_am_striker => $anvil->data->{i_am}{striker} }});
+ return($anvil->data->{i_am}{striker});
}
+
+# If this is being called as a job, this will allow the progress to be updated.
+sub update_progress
+{
+ my ($anvil, $progress, $message) = @_;
+
+ $progress = 95 if $progress > 100;
+ if (not $anvil->data->{switches}{'job-uuid'})
+ {
+ return(0);
+ }
+
+ $anvil->Job->update_progress({
+ debug => 3,
+ progress => $progress,
+ message => $message,
+ job_uuid => $anvil->data->{switches}{'job-uuid'},
+ });
+
+ return(0);
+}
diff --git a/tools/striker-auto-initialize-all.example b/tools/striker-auto-initialize-all.example
index 1eee2994..ddefe3f5 100644
--- a/tools/striker-auto-initialize-all.example
+++ b/tools/striker-auto-initialize-all.example
@@ -32,20 +32,24 @@ base::password::desired = super secret password
#############################################################################################################
# Striker configurations #
#############################################################################################################
-# Startup IP is used for peers to find us
-striker::1::startup_ip = 192.168.122.145
-striker::1::network::ifn::1::ip = 192.168.122.11
+
+### NOTE: 'striker::1::' is the Striker that will merge the dashboards, initialize nodes / DR, create the
+### install manifest (and fence devices / upses), and assemble the nodes. As such, 'striker::1::' is
+### required!
+striker::1::network::ifn::1::ip = 192.168.122.251
striker::1::network::ifn::1::subnet_mask = 255.255.255.0
-striker::1::network::ifn::1::link::1::mac = 52:54:00:ac:50:e4
+striker::1::network::ifn::1::link::1::mac = 52:54:00:df:03:e
+striker::1::network::ifn::1::link::2::mac = 52:54:00:45:6e:5d
striker::1::network::bcn::1::ip = 10.201.4.1
striker::1::network::bcn::1::subnet_mask = 255.255.0.0
-striker::1::network::bcn::1::link::1::mac = 52:54:00:68:be:2e
+striker::1::network::bcn::1::link::1::mac = 52:54:00:d9:24:52
+striker::1::network::bcn::1::link::2::mac = 52:54:00:aa:4d:e0
-striker::2::startup_ip = 192.168.122.146
-striker::2::network::ifn::1::ip = 192.168.122.12
+striker::2::network::ifn::1::ip = 192.168.122.252
striker::2::network::ifn::1::subnet_mask = 255.255.255.0
-striker::2::network::ifn::1::link::1::mac = 52:54:00:c0:f2:7c
-striker::2::network::bcn::1::ip = 192.168.122.12
+striker::2::network::ifn::1::link::1::mac = 52:54:00:41:1f:7d
+striker::2::network::ifn::1::link::2::mac = 52:54:00:33:f7:de
+striker::2::network::bcn::1::ip = 192.168.122.252
striker::2::network::bcn::1::subnet_mask = 255.255.255.0
-striker::2::network::bcn::1::link::1::mac = 52:54:00:8b:d6:82
-
+striker::2::network::bcn::1::link::1::mac = 52:54:00:b8:34:a7
+striker::2::network::bcn::1::link::2::mac = 52:54:00:30:f9:db