diff options
39 files changed, 370 insertions, 146 deletions
diff --git a/scripts/keepalived/vyatta-clear-vrrp.pl b/scripts/keepalived/vyatta-clear-vrrp.pl index 17dedc59..ba5d569b 100644 --- a/scripts/keepalived/vyatta-clear-vrrp.pl +++ b/scripts/keepalived/vyatta-clear-vrrp.pl @@ -109,47 +109,50 @@ sub get_vrrp_intf_group { # return an array of hashes that contains all the intf/group pairs # - my $config = new Vyatta::Config; - $config->setLevel('interfaces ethernet'); - my @eths = $config->listOrigNodes(); - foreach my $eth (@eths) { - my $path = "interfaces ethernet $eth"; - $config->setLevel($path); - if ($config->existsOrig("vrrp")) { - $path = "$path vrrp vrrp-group"; + foreach my $type (("ethernet", "bonding")) { + + my $config = new Vyatta::Config; + $config->setLevel("interfaces $type"); + my @eths = $config->listOrigNodes(); + foreach my $eth (@eths) { + my $path = "interfaces $type $eth"; $config->setLevel($path); - my @groups = $config->listOrigNodes(); - foreach my $group (@groups) { - my %hash; - $hash{'intf'} = $eth; - $hash{'group'} = $group; - $hash{'path'} = "$path $group"; - push @array, {%hash}; + if ($config->existsOrig("vrrp")) { + $path = "$path vrrp vrrp-group"; + $config->setLevel($path); + my @groups = $config->listOrigNodes(); + foreach my $group (@groups) { + my %hash; + $hash{'intf'} = $eth; + $hash{'group'} = $group; + $hash{'path'} = "$path $group"; + push @array, {%hash}; + } } - } - $path = "interfaces ethernet $eth"; - $config->setLevel($path); - if ($config->existsOrig('vif')) { - my $path = "$path vif"; + $path = "interfaces $type $eth"; $config->setLevel($path); - my @vifs = $config->listOrigNodes(); - foreach my $vif (@vifs) { - my $vif_intf = $eth . '.' . $vif; - my $vif_path = "$path $vif"; - $config->setLevel($vif_path); - if ($config->existsOrig('vrrp')) { - $vif_path = "$vif_path vrrp vrrp-group"; + if ($config->existsOrig('vif')) { + my $path = "$path vif"; + $config->setLevel($path); + my @vifs = $config->listOrigNodes(); + foreach my $vif (@vifs) { + my $vif_intf = $eth . '.' . $vif; + my $vif_path = "$path $vif"; $config->setLevel($vif_path); - my @groups = $config->listOrigNodes(); - foreach my $group (@groups) { - my %hash; - $hash{'intf'} = $vif_intf; - $hash{'group'} = $group; - $hash{'path'} = "$path $group"; - push @array, {%hash}; - } - } + if ($config->existsOrig('vrrp')) { + $vif_path = "$vif_path vrrp vrrp-group"; + $config->setLevel($vif_path); + my @groups = $config->listOrigNodes(); + foreach my $group (@groups) { + my %hash; + $hash{'intf'} = $vif_intf; + $hash{'group'} = $group; + $hash{'path'} = "$path $group"; + push @array, {%hash}; + } + } + } } } } diff --git a/scripts/keepalived/vyatta-keepalived.pl b/scripts/keepalived/vyatta-keepalived.pl index f7d3a652..842f8bc3 100755 --- a/scripts/keepalived/vyatta-keepalived.pl +++ b/scripts/keepalived/vyatta-keepalived.pl @@ -235,61 +235,64 @@ sub vrrp_find_changes { my $config = new Vyatta::Config; my $vrrp_instances = 0; - $config->setLevel("interfaces ethernet"); - my @eths = $config->listNodes(); - foreach my $eth (@eths) { - my $path = "interfaces ethernet $eth"; - $config->setLevel($path); - if ($config->exists("vrrp")) { - my %vrrp_status_hash = $config->listNodeStatus("vrrp"); - my ($vrrp, $vrrp_status) = each(%vrrp_status_hash); - if ($vrrp_status ne "static") { - push @list, $eth; - vrrp_log("$vrrp_status found $eth"); - } - } - if ($config->exists("vif")) { - my $path = "interfaces ethernet $eth vif"; + foreach my $type (("ethernet", "bonding")) { + + $config->setLevel("interfaces $type"); + my @eths = $config->listNodes(); + foreach my $eth (@eths) { + my $path = "interfaces $type $eth"; $config->setLevel($path); - my @vifs = $config->listNodes(); - foreach my $vif (@vifs) { - my $vif_intf = $eth . "." . $vif; - my $vif_path = "$path $vif"; - $config->setLevel($vif_path); - if ($config->exists("vrrp")) { - my %vrrp_status_hash = $config->listNodeStatus("vrrp"); - my ($vrrp, $vrrp_status) = each(%vrrp_status_hash); - if ($vrrp_status ne "static") { - push @list, "$eth.$vif"; - vrrp_log("$vrrp_status found $eth.$vif"); + if ($config->exists("vrrp")) { + my %vrrp_status_hash = $config->listNodeStatus("vrrp"); + my ($vrrp, $vrrp_status) = each(%vrrp_status_hash); + if ($vrrp_status ne "static") { + push @list, $eth; + vrrp_log("$vrrp_status found $eth"); + } + } + if ($config->exists("vif")) { + my $path = "interfaces $type $eth vif"; + $config->setLevel($path); + my @vifs = $config->listNodes(); + foreach my $vif (@vifs) { + my $vif_intf = $eth . "." . $vif; + my $vif_path = "$path $vif"; + $config->setLevel($vif_path); + if ($config->exists("vrrp")) { + my %vrrp_status_hash = $config->listNodeStatus("vrrp"); + my ($vrrp, $vrrp_status) = each(%vrrp_status_hash); + if ($vrrp_status ne "static") { + push @list, "$eth.$vif"; + vrrp_log("$vrrp_status found $eth.$vif"); + } } } } } - } - # - # Now look for deleted from the origin tree - # - $config->setLevel("interfaces ethernet"); - @eths = $config->listOrigNodes(); - foreach my $eth (@eths) { - my $path = "interfaces ethernet $eth"; - $config->setLevel($path); - if ($config->isDeleted("vrrp")) { + # + # Now look for deleted from the origin tree + # + $config->setLevel("interfaces $type"); + @eths = $config->listOrigNodes(); + foreach my $eth (@eths) { + my $path = "interfaces $type $eth"; + $config->setLevel($path); + if ($config->isDeleted("vrrp")) { push @list, $eth; vrrp_log("Delete found $eth"); - } - $config->setLevel("$path vif"); - my @vifs = $config->listOrigNodes(); - foreach my $vif (@vifs) { - my $vif_intf = $eth . "." . $vif; - my $vif_path = "$path vif $vif"; - $config->setLevel($vif_path); - if ($config->isDeleted("vrrp")) { - push @list, "$eth.$vif"; - vrrp_log("Delete found $eth.$vif"); - } + } + $config->setLevel("$path vif"); + my @vifs = $config->listOrigNodes(); + foreach my $vif (@vifs) { + my $vif_intf = $eth . "." . $vif; + my $vif_path = "$path vif $vif"; + $config->setLevel($vif_path); + if ($config->isDeleted("vrrp")) { + push @list, "$eth.$vif"; + vrrp_log("Delete found $eth.$vif"); + } + } } } @@ -339,47 +342,51 @@ sub vrrp_update_config { my $output = "#\n# autogenerated by $0 on $date\n#\n\n"; my $config = new Vyatta::Config; - - $config->setLevel("interfaces ethernet"); - my @eths = $config->listNodes(); my $vrrp_instances = 0; - foreach my $eth (@eths) { - my $path = "interfaces ethernet $eth"; - $config->setLevel($path); - if ($config->exists("vrrp")) { - my ($inst_output, @inst_errs) = keepalived_get_values($eth, $path); - if (scalar(@inst_errs)) { - push @errs, @inst_errs; - } else { - $output .= $inst_output; - $vrrp_instances++; - } - } - if ($config->exists("vif")) { - my $path = "interfaces ethernet $eth vif"; + + for my $type (("ethernet", "bonding")) { + + $config->setLevel("interfaces $type"); + my @eths = $config->listNodes(); + foreach my $eth (@eths) { + my $path = "interfaces $type $eth"; $config->setLevel($path); - my @vifs = $config->listNodes(); - foreach my $vif (@vifs) { - my $vif_path = "$path $vif"; - $config->setLevel($vif_path); - if ($config->exists("vrrp")) { - # - # keepalived gets real grumpy with interfaces that don't - # exist, so skip vlans that haven't been instantiated - # yet (typically occurs at boot up). - # - my $vif_intf = $eth . "." . $vif; - if (!(-d "/sys/class/net/$vif_intf")) { - push @errs, "vlan doesn't exist $vif_intf"; - next; - } - my ($inst_output, @inst_errs) = - keepalived_get_values($vif_intf, $vif_path); - if (scalar(@inst_errs)) { - push @errs, @inst_errs; - } else { - $output .= $inst_output; - $vrrp_instances++; + if ($config->exists("vrrp")) { + my ($inst_output, @inst_errs) = + keepalived_get_values($eth, $path); + if (scalar(@inst_errs)) { + push @errs, @inst_errs; + } else { + $output .= $inst_output; + $vrrp_instances++; + } + } + if ($config->exists("vif")) { + my $path = "interfaces $type $eth vif"; + $config->setLevel($path); + my @vifs = $config->listNodes(); + foreach my $vif (@vifs) { + my $vif_path = "$path $vif"; + $config->setLevel($vif_path); + if ($config->exists("vrrp")) { + # + # keepalived gets real grumpy with interfaces that + # don't exist, so skip vlans that haven't been + # instantiated yet (typically occurs at boot up). + # + my $vif_intf = $eth . "." . $vif; + if (!(-d "/sys/class/net/$vif_intf")) { + push @errs, "vlan doesn't exist $vif_intf"; + next; + } + my ($inst_output, @inst_errs) = + keepalived_get_values($vif_intf, $vif_path); + if (scalar(@inst_errs)) { + push @errs, @inst_errs; + } else { + $output .= $inst_output; + $vrrp_instances++; + } } } } @@ -408,21 +415,24 @@ sub list_vrrp_intf { my $config = new Vyatta::Config; my @intfs = (); - $config->setLevel("interfaces ethernet"); - my @eths = $config->listOrigNodes(); - foreach my $eth (@eths) { - my $path = "interfaces ethernet $eth"; - $config->setLevel($path); - push @intfs, $eth if $config->existsOrig("vrrp"); - if ($config->existsOrig("vif")) { - my $path = "interfaces ethernet $eth vif"; + foreach my $type (("ethernet", "bonding")) { + + $config->setLevel("interfaces $type"); + my @eths = $config->listOrigNodes(); + foreach my $eth (@eths) { + my $path = "interfaces $type $eth"; $config->setLevel($path); - my @vifs = $config->listOrigNodes(); - foreach my $vif (@vifs) { - my $vif_intf = $eth . "." . $vif; - my $vif_path = "$path $vif"; - $config->setLevel($vif_path); - push @intfs, $vif_intf if $config->existsOrig("vrrp"); + push @intfs, $eth if $config->existsOrig("vrrp"); + if ($config->existsOrig("vif")) { + my $path = "interfaces $type $eth vif"; + $config->setLevel($path); + my @vifs = $config->listOrigNodes(); + foreach my $vif (@vifs) { + my $vif_intf = $eth . "." . $vif; + my $vif_path = "$path $vif"; + $config->setLevel($vif_path); + push @intfs, $vif_intf if $config->existsOrig("vrrp"); + } } } } @@ -431,11 +441,18 @@ sub list_vrrp_intf { sub list_vrrp_group { my ($name) = @_; - my $config = new Vyatta::Config; - my $path = "interfaces ethernet $name"; - if ($name =~ /(eth\d+)\.(\d+)/) { - $path = "interfaces ethernet $1 vif $2"; + my $path; + if ($name =~ /bond/) { + $path = "interfaces bonding $name"; + if ($name =~ /(bond\d+)\.(\d+)/) { + $path = "interfaces bonding $1 vif $2"; + } + } else { + $path = "interfaces ethernet $name"; + if ($name =~ /(eth\d+)\.(\d+)/) { + $path = "interfaces ethernet $1 vif $2"; + } } $path .= " vrrp vrrp-group"; $config->setLevel($path); diff --git a/scripts/keepalived/vyatta-show-vrrp.pl b/scripts/keepalived/vyatta-show-vrrp.pl index 3015bc92..5ec2e8ad 100755 --- a/scripts/keepalived/vyatta-show-vrrp.pl +++ b/scripts/keepalived/vyatta-show-vrrp.pl @@ -129,7 +129,7 @@ sub get_master_info { my $source_ip = (vrrp_get_config($intf, $group))[0]; # arping doesn't seem to work for vlans - if ($intf =~ /(eth\d+).\d+/) { + if ($intf =~ /(eth\d+|bond\d+).\d+/) { $intf = $1; } system("/usr/bin/arping -c1 -f -I $intf -s $source_ip $vip > $arp_file"); @@ -251,7 +251,7 @@ sub vrrp_show { # # main # -my $intf = "eth"; +my @intfs = ("eth", "bond"); my $group = "all"; my $showsummary = 0; @@ -259,7 +259,7 @@ if ($#ARGV >= 0) { if ($ARGV[0] eq "summary") { $showsummary = 1; } else { - $intf = $ARGV[0]; + @intfs = ($ARGV[0]); } } @@ -284,9 +284,11 @@ if ($showsummary == 1) { $display_func = \&vrrp_show; } -my @state_files = Vyatta::Keepalived::get_state_files($intf, $group); -foreach my $state_file (@state_files) { - &$display_func($state_file); +foreach my $intf (@intfs) { + my @state_files = Vyatta::Keepalived::get_state_files($intf, $group); + foreach my $state_file (@state_files) { + &$display_func($state_file); + } } exit 0; diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/node.def new file mode 100644 index 00000000..f90c20db --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/node.def @@ -0,0 +1,3 @@ +help: Configure Virtual Router Redundancy Protocol (VRRP) parameters + +end:expression: "sudo /opt/vyatta/sbin/vyatta-keepalived.pl --vrrp-action update --intf $VAR(../../@).$VAR(../@) " diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.def new file mode 100644 index 00000000..d87ad6b7 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.def @@ -0,0 +1,8 @@ +tag: +type: u32 +syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 255; "VRRP group must be between 1-255" +commit:expression: $VAR(virtual-address/) != ""; "Must define the virtual-address for vrrp-group $VAR(@)" +help: Set VRRP group number +delete:expression: "sudo /opt/vyatta/sbin/vyatta-keepalived.pl --vrrp-action delete --intf $VAR(../../../@).$VAR(../../@) --group $VAR(@) " +comp_help: possible completions + <1-255> VRRP group number diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/advertise-interval/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/advertise-interval/node.def new file mode 100644 index 00000000..59f2b451 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/advertise-interval/node.def @@ -0,0 +1,6 @@ +type: u32 +default: 1 +help: Set advertise interval +syntax:expression: $VAR(@) >= 1 && $VAR(@) <=255; "Advertise interval must be between 1-255" +comp_help: possible completions + <1-255> Set advertise interval (default 1) diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/node.def new file mode 100644 index 00000000..adf78b3f --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/node.def @@ -0,0 +1,3 @@ +help: Set authentication +commit:expression: $VAR(./type/@) != ""; "You must set a authentication type" +commit:expression: $VAR(./password/@) != ""; "You must set a authentication password" diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/password/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/password/node.def new file mode 100644 index 00000000..9bd2e98d --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/password/node.def @@ -0,0 +1,9 @@ +type: txt +help: Set password +syntax:expression: exec " \ + if [ `echo -n $VAR(@) | wc -c` -gt 8 ]; then \ + echo Password must be 8 characters or less ; \ + exit 1 ; \ + fi ; " +comp_help: possible completions: + <text> Password (8 characters or less) diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/type/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/type/node.def new file mode 100644 index 00000000..7155495d --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/authentication/type/node.def @@ -0,0 +1,7 @@ +type: txt +help: Set authentication type +syntax:expression: $VAR(@) in "plaintext-password", "ah"; \ + "authentication must be plaintext-password or ah" +comp_help: possible completions: + plaintext-password Set plain text password mode + ah Set IP Authentication Header mode diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/description/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/description/node.def new file mode 100644 index 00000000..aeb40f0b --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/description/node.def @@ -0,0 +1,2 @@ +type: txt +help: Set description for this interface diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/disable/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/disable/node.def new file mode 100644 index 00000000..916e313b --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/disable/node.def @@ -0,0 +1 @@ +help: Set VRRP group disabled diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/hello-source-address/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/hello-source-address/node.def new file mode 100644 index 00000000..edb0d58a --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/hello-source-address/node.def @@ -0,0 +1,6 @@ +type: ipv4 + +help: Set hello-source-address + +comp_help: possible completions: + <x.x.x.x> Set source address for vrrp hello packets (optional) diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/preempt-delay/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/preempt-delay/node.def new file mode 100644 index 00000000..1638624e --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/preempt-delay/node.def @@ -0,0 +1,6 @@ +type: u32 +syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 1000; \ + "preempt-delay must be between 0-1000" +help: Set preempt-delay +comp_help: possible completions: + <0-1000> Set Preempt Delay in seconds diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/preempt/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/preempt/node.def new file mode 100644 index 00000000..7b3b9cbd --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/preempt/node.def @@ -0,0 +1,7 @@ +type: txt +help: Set preempt mode (default: true) +default: "true" +syntax:expression: $VAR(@) in "true", "false"; "preempt must be true or false" +comp_help: possible completions: + true (default) + false diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/priority/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/priority/node.def new file mode 100644 index 00000000..54de02c7 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/priority/node.def @@ -0,0 +1,5 @@ +type: u32 +syntax:expression: $VAR(@) >= 0 &&$VAR(@) <= 255; "priority must be between 1-255" +help: Set priority +comp_help: possible completions: + <1-255> Set Priority diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/backup/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/backup/node.def new file mode 100644 index 00000000..44be2a7f --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/backup/node.def @@ -0,0 +1,4 @@ +help: Set an executable script to run on VRRP state-transition to backup +type: txt +syntax:expression: exec "[ -x $VAR(@) ] || exit 1"; "Backup Script should be an existing executable" + diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/fault/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/fault/node.def new file mode 100644 index 00000000..9f2557b3 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/fault/node.def @@ -0,0 +1,4 @@ +help: Set an executable script to run on VRRP state-transition to fault +type: txt +syntax:expression: exec "[ -x $VAR(@) ] || exit 1"; "Fault Script should be an existing executable" + diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/master/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/master/node.def new file mode 100644 index 00000000..7f7d8895 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/master/node.def @@ -0,0 +1,4 @@ +help: Set an executable script to run on VRRP state-transition to master +type: txt +syntax:expression: exec "[ -x $VAR(@) ] || exit 1"; "Master Script should be an existing executable" + diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/node.def new file mode 100644 index 00000000..ed959156 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/node.def @@ -0,0 +1,2 @@ +help: Set scripts to run on VRRP state-transitions + diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/sync-group/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/sync-group/node.def new file mode 100644 index 00000000..9602a842 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/sync-group/node.def @@ -0,0 +1,2 @@ +type: txt +help: Set to add this vrrp group to a sync group diff --git a/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/virtual-address/node.def b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/virtual-address/node.def new file mode 100644 index 00000000..176287aa --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vif/node.tag/vrrp/vrrp-group/node.tag/virtual-address/node.def @@ -0,0 +1,22 @@ +multi: +type: txt +help: Set virtual address + +syntax:expression: exec "/opt/vyatta/sbin/vyatta-keepalived.pl \ + --vrrp-action='check-vip' --vip='$VAR(@)' "\ + ; "Invalid virtual-address [$VAR(@)] for vrrp-group $VAR(../@)" + +syntax:expression: exec " + if echo '$VAR(@)' | grep -q '/' ; then + if /opt/vyatta/sbin/vyatta-interfaces.pl \ + --valid-addr $VAR(@) --dev $VAR(../../../@) ; then + exit 0 + else + echo Invalid vrrp virtual-address [$VAR(@)] for vrrp-group $VAR(../@) + exit 1 + fi + fi" + +comp_help: possible completions: + <x.x.x.x> Virtual IP address (up to 20 per group) + <x.x.x.x/x> Virtual IP address with prefix (up to 20 per group) diff --git a/templates/interfaces/bonding/node.tag/vrrp/node.def b/templates/interfaces/bonding/node.tag/vrrp/node.def new file mode 100644 index 00000000..fc9bd82e --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/node.def @@ -0,0 +1,3 @@ +help: Configure Virtual Router Redundancy Protocol (VRRP) + +end:expression: "sudo /opt/vyatta/sbin/vyatta-keepalived.pl --vrrp-action update --intf $VAR(../@) " diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.def new file mode 100644 index 00000000..a3ce1395 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.def @@ -0,0 +1,8 @@ +tag: +type: u32 +syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 255; "VRRP group must be between 1-255" +commit:expression: $VAR(virtual-address/) != ""; "Must define the virtual-address for vrrp-group $VAR(@)" +help: Set VRRP group number +delete:expression: "sudo /opt/vyatta/sbin/vyatta-keepalived.pl --vrrp-action delete --intf $VAR(../../@) --group $VAR(@) " +comp_help: possible completions + <1-255> VRRP group number diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/advertise-interval/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/advertise-interval/node.def new file mode 100644 index 00000000..59f2b451 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/advertise-interval/node.def @@ -0,0 +1,6 @@ +type: u32 +default: 1 +help: Set advertise interval +syntax:expression: $VAR(@) >= 1 && $VAR(@) <=255; "Advertise interval must be between 1-255" +comp_help: possible completions + <1-255> Set advertise interval (default 1) diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/node.def new file mode 100644 index 00000000..adf78b3f --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/node.def @@ -0,0 +1,3 @@ +help: Set authentication +commit:expression: $VAR(./type/@) != ""; "You must set a authentication type" +commit:expression: $VAR(./password/@) != ""; "You must set a authentication password" diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/password/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/password/node.def new file mode 100644 index 00000000..9bd2e98d --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/password/node.def @@ -0,0 +1,9 @@ +type: txt +help: Set password +syntax:expression: exec " \ + if [ `echo -n $VAR(@) | wc -c` -gt 8 ]; then \ + echo Password must be 8 characters or less ; \ + exit 1 ; \ + fi ; " +comp_help: possible completions: + <text> Password (8 characters or less) diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/type/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/type/node.def new file mode 100644 index 00000000..687c6af6 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/authentication/type/node.def @@ -0,0 +1,7 @@ +type: txt +help: Set authentication type +syntax:expression: $VAR(@) in "plaintext-password", "ah"; \ + "authentication must be plaintext-password or ah" +comp_help: possible completions: + plaintext-password Set plain text password mode + ah Set IP Authentication Header mode diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/description/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/description/node.def new file mode 100644 index 00000000..aeb40f0b --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/description/node.def @@ -0,0 +1,2 @@ +type: txt +help: Set description for this interface diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/disable/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/disable/node.def new file mode 100644 index 00000000..916e313b --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/disable/node.def @@ -0,0 +1 @@ +help: Set VRRP group disabled diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/hello-source-address/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/hello-source-address/node.def new file mode 100644 index 00000000..edb0d58a --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/hello-source-address/node.def @@ -0,0 +1,6 @@ +type: ipv4 + +help: Set hello-source-address + +comp_help: possible completions: + <x.x.x.x> Set source address for vrrp hello packets (optional) diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/preempt-delay/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/preempt-delay/node.def new file mode 100644 index 00000000..1638624e --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/preempt-delay/node.def @@ -0,0 +1,6 @@ +type: u32 +syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 1000; \ + "preempt-delay must be between 0-1000" +help: Set preempt-delay +comp_help: possible completions: + <0-1000> Set Preempt Delay in seconds diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/preempt/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/preempt/node.def new file mode 100644 index 00000000..4ed282ed --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/preempt/node.def @@ -0,0 +1,7 @@ +type: txt +help: Set preempt mode +default: "true" +syntax:expression: $VAR(@) in "true", "false"; "preempt must be true or false" +comp_help: possible completions: + true (default) + false diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/priority/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/priority/node.def new file mode 100644 index 00000000..54de02c7 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/priority/node.def @@ -0,0 +1,5 @@ +type: u32 +syntax:expression: $VAR(@) >= 0 &&$VAR(@) <= 255; "priority must be between 1-255" +help: Set priority +comp_help: possible completions: + <1-255> Set Priority diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/backup/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/backup/node.def new file mode 100644 index 00000000..44be2a7f --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/backup/node.def @@ -0,0 +1,4 @@ +help: Set an executable script to run on VRRP state-transition to backup +type: txt +syntax:expression: exec "[ -x $VAR(@) ] || exit 1"; "Backup Script should be an existing executable" + diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/fault/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/fault/node.def new file mode 100644 index 00000000..9f2557b3 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/fault/node.def @@ -0,0 +1,4 @@ +help: Set an executable script to run on VRRP state-transition to fault +type: txt +syntax:expression: exec "[ -x $VAR(@) ] || exit 1"; "Fault Script should be an existing executable" + diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/master/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/master/node.def new file mode 100644 index 00000000..7f7d8895 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/master/node.def @@ -0,0 +1,4 @@ +help: Set an executable script to run on VRRP state-transition to master +type: txt +syntax:expression: exec "[ -x $VAR(@) ] || exit 1"; "Master Script should be an existing executable" + diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/node.def new file mode 100644 index 00000000..3abc1696 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/run-transition-scripts/node.def @@ -0,0 +1,2 @@ +help: Set scripts for VRRP state-transitions + diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/sync-group/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/sync-group/node.def new file mode 100644 index 00000000..9602a842 --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/sync-group/node.def @@ -0,0 +1,2 @@ +type: txt +help: Set to add this vrrp group to a sync group diff --git a/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/virtual-address/node.def b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/virtual-address/node.def new file mode 100644 index 00000000..176287aa --- /dev/null +++ b/templates/interfaces/bonding/node.tag/vrrp/vrrp-group/node.tag/virtual-address/node.def @@ -0,0 +1,22 @@ +multi: +type: txt +help: Set virtual address + +syntax:expression: exec "/opt/vyatta/sbin/vyatta-keepalived.pl \ + --vrrp-action='check-vip' --vip='$VAR(@)' "\ + ; "Invalid virtual-address [$VAR(@)] for vrrp-group $VAR(../@)" + +syntax:expression: exec " + if echo '$VAR(@)' | grep -q '/' ; then + if /opt/vyatta/sbin/vyatta-interfaces.pl \ + --valid-addr $VAR(@) --dev $VAR(../../../@) ; then + exit 0 + else + echo Invalid vrrp virtual-address [$VAR(@)] for vrrp-group $VAR(../@) + exit 1 + fi + fi" + +comp_help: possible completions: + <x.x.x.x> Virtual IP address (up to 20 per group) + <x.x.x.x/x> Virtual IP address with prefix (up to 20 per group) |