From 32244caf1c30819c38ca977e67557558a976a9d9 Mon Sep 17 00:00:00 2001 From: Stig Thormodsrud Date: Fri, 22 Oct 2010 17:38:15 -0700 Subject: Fist pass at adding archive to uri on commit. --- Makefile.am | 2 + scripts/config-mgmt/vyatta-commit-push.pl | 85 ++++++++++++++++++ scripts/config-mgmt/vyatta-config-mgmt.pl | 106 +++++++++++++++++++++++ templates/system/config-mgmt/commit-uri/node.def | 24 +++++ templates/system/config-mgmt/node.def | 1 + 5 files changed, 218 insertions(+) create mode 100755 scripts/config-mgmt/vyatta-commit-push.pl create mode 100755 scripts/config-mgmt/vyatta-config-mgmt.pl create mode 100644 templates/system/config-mgmt/commit-uri/node.def create mode 100644 templates/system/config-mgmt/node.def diff --git a/Makefile.am b/Makefile.am index b4cfbe92..4a050270 100644 --- a/Makefile.am +++ b/Makefile.am @@ -57,6 +57,8 @@ sbin_SCRIPTS += scripts/install/install-image sbin_SCRIPTS += scripts/vyatta-bridgegroup-depedency.pl sbin_SCRIPTS += scripts/vyatta-dhcpv6-client.pl sbin_SCRIPTS += scripts/vyatta-update-grub.pl +sbin_SCRIPTS += scripts/config-mgmt/vyatta-commit-push.pl +sbin_SCRIPTS += scripts/config-mgmt/vyatta-config-mgmt.pl share_perl5_DATA = lib/Vyatta/Login/User.pm share_perl5_DATA += lib/Vyatta/Login/RadiusServer.pm diff --git a/scripts/config-mgmt/vyatta-commit-push.pl b/scripts/config-mgmt/vyatta-commit-push.pl new file mode 100755 index 00000000..1e16b811 --- /dev/null +++ b/scripts/config-mgmt/vyatta-commit-push.pl @@ -0,0 +1,85 @@ +#!/usr/bin/perl +# +# **** License **** +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# A copy of the GNU General Public License is available as +# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution +# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'. +# You can also obtain it by writing to the Free Software Foundation, +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Stig Thormodsrud +# Date: October 2010 +# Description: Script to push cofig.boot to one or more URIs +# +# **** End License **** +# + +use strict; +use warnings; +use lib '/opt/vyatta/share/perl5/'; + +use Vyatta::Config; +use POSIX; +use File::Basename; +use URI; + + +my $debug = 0; + +my $config = new Vyatta::Config; + +$config->setLevel('system config-mgmt'); + +my @uris = $config->returnOrigValues('commit-uri'); + +if (scalar(@uris) < 1) { + print "No URI's configured\n"; + exit 0; +} + +my $upload_file = '/opt/vyatta/etc/config/config.boot'; + +my $timestamp = strftime("_%Y%m%d_%H%M%S", localtime); +my $same_file = basename($upload_file) . $timestamp; + +print "Archiving config...\n"; +foreach my $uri (@uris) { + my $u = URI->new($uri); + my $scheme = $u->scheme(); + my $auth = $u->authority(); + my $path = $u->path(); + my ($host, $remote) = ('', ''); + if (defined $auth and $auth =~ /.*\@(.*)/) { + $host = $1; + } else { + $host = $auth if defined $auth; + } + $remote .= "$scheme://$host"; + $remote .= "$path" if defined $path; + + print " $remote "; + my $cmd = "curl -s -T $upload_file $uri/$same_file"; + print "cmd [$cmd]\n" if $debug; + my $rc = system($cmd); + if ($rc eq 0) { + print " OK\n"; + } else { + print " failed\n"; + } +} + +exit 0; diff --git a/scripts/config-mgmt/vyatta-config-mgmt.pl b/scripts/config-mgmt/vyatta-config-mgmt.pl new file mode 100755 index 00000000..cf8bcf52 --- /dev/null +++ b/scripts/config-mgmt/vyatta-config-mgmt.pl @@ -0,0 +1,106 @@ +#!/usr/bin/perl +# +# **** License **** +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# A copy of the GNU General Public License is available as +# `/usr/share/common-licenses/GPL' in the Debian GNU/Linux distribution +# or on the World Wide Web at `http://www.gnu.org/copyleft/gpl.html'. +# You can also obtain it by writing to the Free Software Foundation, +# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +# MA 02110-1301, USA. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Stig Thormodsrud +# Date: October 2010 +# Description: Script to push cofig.boot to one or more URIs +# +# **** End License **** +# + +use strict; +use warnings; +use lib '/opt/vyatta/share/perl5/'; + +use Vyatta::Config; +use Getopt::Long; +use URI; + +my $commit_uri_script = '/opt/vyatta/sbin/vyatta-commit-push.pl'; +my $link_name = '/etc/commit/vyatta-commit-push.pl'; + +my $debug = 0; + +# +# main +# +my ($action, $uri); + +GetOptions("action=s" => \$action, + "uri=s" => \$uri, +); + +die "Error: no action" if ! defined $action; + +my ($cmd, $rc) = ('', 1); + +if ($action eq 'add-uri') { + print "add-uri\n" if $debug; + my $config = new Vyatta::Config; + $config->setLevel('system config-mgmt'); + my @uris = $config->returnValues('commit-uri'); + if (scalar(@uris) > 1 and ! -e $link_name) { + print "add link\n" if $debug; + $rc = system("ln -s $commit_uri_script $link_name"); + exit $rc; + } + exit 0; +} + +if ($action eq 'del-uri') { + print "del-uri\n" if $debug; + my $config = new Vyatta::Config; + $config->setLevel('system config-mgmt'); + my @uris = $config->returnValues('commit-uri'); + if (scalar(@uris) <= 0) { + print "remove link\n" if $debug; + $rc = system("rm -f $link_name"); + exit $rc; + } + exit 0; +} + +if ($action eq 'valid-uri') { + die "Error: no uri" if ! defined $uri; + print "valid-uri [$uri]\n" if $debug; + my $u = URI->new($uri); + exit 1 if ! defined $u; + my $scheme = $u->scheme(); + my $auth = $u->authority(); + my $path = $u->path(); + + exit 1 if ! defined $scheme or ! defined $path; + if ($scheme eq 'tftp') { + } elsif ($scheme eq 'ftp') { + } elsif ($scheme eq 'scp') { + } elsif ($scheme eq 'file') { + } else { + print "Unsupported URI scheme\n"; + exit 1; + } + exit 0; +} + +exit $rc; + +# end of file diff --git a/templates/system/config-mgmt/commit-uri/node.def b/templates/system/config-mgmt/commit-uri/node.def new file mode 100644 index 00000000..7b483f9f --- /dev/null +++ b/templates/system/config-mgmt/commit-uri/node.def @@ -0,0 +1,24 @@ +multi: +priority: 400 +type: txt +help: Commit URI + +syntax:expression: exec "/opt/vyatta/sbin/vyatta-config-mgmt.pl \ + --action=valid-uri \ + --uri=\"$VAR(@)\" "; "Invalid URI" + +create: if [ "$COMMIT_SIBLING_POSITION" = "LAST" ] || \ + [ "$COMMIT_SIBLING_POSITION" = "FIRSTLAST" ] ; then + sudo ${vyatta_sbindir}/vyatta-config-mgmt.pl --action=add-uri + fi; + +delete: if [ "$COMMIT_SIBLING_POSITION" = "LAST" ] || \ + [ "$COMMIT_SIBLING_POSITION" = "FIRSTLAST" ] ; then + sudo ${vyatta_sbindir}/vyatta-config-mgmt.pl --action=del-uri + fi; + +val_help: ; Uniform Resource Identifier +comp_help: + "scp://:@/" + "ftp://:@/" + "tftp:///" \ No newline at end of file diff --git a/templates/system/config-mgmt/node.def b/templates/system/config-mgmt/node.def new file mode 100644 index 00000000..03a4d65a --- /dev/null +++ b/templates/system/config-mgmt/node.def @@ -0,0 +1 @@ +help: Configuration management settings \ No newline at end of file -- cgit v1.2.3