diff options
author | Stig Thormodsrud <stig@vyatta.com> | 2010-10-26 16:58:08 -0700 |
---|---|---|
committer | Stig Thormodsrud <stig@vyatta.com> | 2010-10-26 16:58:08 -0700 |
commit | de8b643eb1ff7c056f4e5e9c920387ed2d2d2a11 (patch) | |
tree | 333c2e0b2f020ed6469c3076d43050de08cfcb4a /scripts | |
download | vyatta-config-mgmt-de8b643eb1ff7c056f4e5e9c920387ed2d2d2a11.tar.gz vyatta-config-mgmt-de8b643eb1ff7c056f4e5e9c920387ed2d2d2a11.zip |
Create vyatta-config-mgmt repo.debian/0.1
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/vyatta-commit-push.pl | 83 | ||||
-rwxr-xr-x | scripts/vyatta-commit-revs.pl | 59 | ||||
-rwxr-xr-x | scripts/vyatta-config-mgmt.pl | 165 |
3 files changed, 307 insertions, 0 deletions
diff --git a/scripts/vyatta-commit-push.pl b/scripts/vyatta-commit-push.pl new file mode 100755 index 0000000..ab63509 --- /dev/null +++ b/scripts/vyatta-commit-push.pl @@ -0,0 +1,83 @@ +#!/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/vyatta-commit-revs.pl b/scripts/vyatta-commit-revs.pl new file mode 100755 index 0000000..7ae34ad --- /dev/null +++ b/scripts/vyatta-commit-revs.pl @@ -0,0 +1,59 @@ +#!/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 create config.boot revision backups. +# +# **** End License **** +# + +use strict; +use warnings; +use lib '/opt/vyatta/share/perl5/'; + +use Vyatta::Config; +use Vyatta::ConfigMgmt; + +# +# main +# + +my $archive_dir = cm_get_archive_dir(); +my $lr_state_file = cm_get_lr_state_file(); +my $lr_conf_file = cm_get_lr_conf_file(); + +if (! -d $archive_dir) { + system("sudo mkdir $archive_dir"); +} + +my $tmp_config_file = "/tmp/config.boot.$$"; +system("/opt/vyatta/sbin/vyatta-save-config.pl $tmp_config_file > /dev/null"); +system("sudo mv $tmp_config_file $archive_dir/config.boot"); +system("sudo logrotate -f -s $lr_state_file $lr_conf_file"); +my ($user) = getpwuid($<); +cm_commit_add_log($user, 'cli', $ARGV[0]); + +exit 0; + +# end of file diff --git a/scripts/vyatta-config-mgmt.pl b/scripts/vyatta-config-mgmt.pl new file mode 100755 index 0000000..e3f01ec --- /dev/null +++ b/scripts/vyatta-config-mgmt.pl @@ -0,0 +1,165 @@ +#!/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 for config management features. +# +# **** End License **** +# + +use strict; +use warnings; +use lib '/opt/vyatta/share/perl5/'; + +use Vyatta::Config; +use Vyatta::ConfigMgmt; +use Getopt::Long; +use File::Basename; +use URI; + +my $commit_uri_script = '/opt/vyatta/sbin/vyatta-commit-push.pl'; +my $commit_revs_script = '/opt/vyatta/sbin/vyatta-commit-revs.pl'; + +my $commit_hook_dir = cm_get_commit_hook_dir(); +my $archive_dir = cm_get_archive_dir(); +my $config_file = "$archive_dir/config.boot"; +my $lr_conf_file = cm_get_lr_conf_file(); + +my $debug = 0; + +sub get_link { + my ($path) = @_; + + my $link = $commit_hook_dir . basename($path); + return $link; +} + + +# +# main +# +my ($action, $uri, $revs, $revnum); + +GetOptions("action=s" => \$action, + "uri=s" => \$uri, + "revs=i" => \$revs, + "revnum=i" => \$revnum, +); + +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'); + my $link = get_link($commit_uri_script); + if (scalar(@uris) >= 1 and ! -e $link) { + print "add link [$link]\n" if $debug; + $rc = system("ln -s $commit_uri_script $link"); + 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) { + my $link = get_link($commit_uri_script); + print "remove link [$link]\n" if $debug; + $rc = system("rm -f $link"); + 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') { + } else { + print "Unsupported URI scheme\n"; + exit 1; + } + exit 0; +} + +if ($action eq 'update-revs') { + die "Error: no revs" if ! defined $revs; + print "update-revs [$revs]\n" if $debug; + my $link = get_link($commit_revs_script); + if ($revs == 0) { + print "remove link [$link]\n" if $debug; + $rc = system("rm -f $link"); + } else { + if (! -e $link) { + print "add link [$link]\n" if $debug; + $rc = system("ln -s $commit_revs_script $link"); + } + if (! -e $archive_dir) { + system("sudo mkdir $archive_dir"); + } + my $lr_conf = "$config_file {\n"; + $lr_conf .= "\t rotate $revs\n"; + $lr_conf .= "\t compress \n"; + $lr_conf .= "}\n"; + cm_write_file($lr_conf_file, $lr_conf); + exit 0; + } + exit 0; +} + +if ($action eq 'show-commit-log') { + print "show-commit-log\n" if $debug; + my @log = cm_commit_get_log(); + foreach my $line (@log) { + print $line; + } + exit 0; +} + +if ($action eq 'show-commit-file') { + die "Error: no revnum" if ! defined $revnum; + print "show-commit-file [$revnum]\n" if $debug; + my $file = cm_commit_get_file($revnum); + print $file; +} + +exit $rc; + +# end of file |