summaryrefslogtreecommitdiff
path: root/scripts/vyatta-activate-config.pl
diff options
context:
space:
mode:
authorAn-Cheng Huang <ancheng@vyatta.com>2010-07-28 14:30:32 -0700
committerAn-Cheng Huang <ancheng@vyatta.com>2010-07-28 14:30:32 -0700
commit639c835bc2730a4fbffd915f5b2028a68375ee7a (patch)
tree203d61e1d5e8ef422d6aba3851d2f83a1f838b6b /scripts/vyatta-activate-config.pl
parent0247864ef578ac05bbac8dc5175e674ce7b82714 (diff)
downloadvyatta-cfg-639c835bc2730a4fbffd915f5b2028a68375ee7a.tar.gz
vyatta-cfg-639c835bc2730a4fbffd915f5b2028a68375ee7a.zip
add new cstore library
Diffstat (limited to 'scripts/vyatta-activate-config.pl')
-rwxr-xr-xscripts/vyatta-activate-config.pl163
1 files changed, 0 insertions, 163 deletions
diff --git a/scripts/vyatta-activate-config.pl b/scripts/vyatta-activate-config.pl
deleted file mode 100755
index 6bf6c3b..0000000
--- a/scripts/vyatta-activate-config.pl
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/perl
-
-# Author: Michael Larson <mike@vyatta.com>
-# Date: 2010
-# Description: Perl script for activating/deactivating portions of the configuration
-
-# **** 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.
-#
-# This code was originally developed by Vyatta, Inc.
-# Portions created by Vyatta are Copyright (C) 2006, 2007, 2008, 2009, 2010 Vyatta, Inc.
-# All Rights Reserved.
-# **** End License ****
-
-use strict;
-use warnings;
-use File::Find;
-use lib "/opt/vyatta/share/perl5";
-
-
-sub wanted {
- return unless ( $_ eq '.disable' );
- print("Cannot deactivate nested elements\n");
- exit 1;
-}
-
-sub wanted_local {
- if ( $_ eq '.disable' ) {
- #we'll supercede this .disable by the parent and remove this.
- my $f = $File::Find::name;
- `rm -f $f`;
- }
-}
-
-sub check_parents {
- my @p = @_;
- my $l_dir = "$ENV{VYATTA_TEMP_CONFIG_DIR}/$ENV{VYATTA_EDIT_LEVEL}";
- my $a_dir = "$ENV{VYATTA_ACTIVE_CONFIGURATION_DIR}/$ENV{VYATTA_EDIT_LEVEL}";
- foreach my $sw (@p) {
- $l_dir .= "/$sw";
- $a_dir .= "/$sw";
-
- if (-e "$l_dir/.disable") {
- return 1;
- }
- if (-e "$a_dir/.disable") {
- return 1;
- }
- }
- return 0;
-}
-
-sub usage() {
- print "Usage: $0 <activate|deactivate> <path>\n";
- exit 0;
-}
-
-my $action = $ARGV[0];
-
-if (!defined $ARGV[1] || $ARGV[1] eq '') {
- print("Cannot activate/deactivate configuration root\n");
- exit 1;
-}
-
-#adjust for leaf node
-my $i = 0;
-my $arg_ct = $#ARGV;
-my @path = @ARGV[1..$arg_ct];
-my @parent_path = @ARGV[1..($arg_ct-1)];
-
-foreach my $elem (@path) {
- $elem =~ s/\//%2F/g;
- $elem =~ s/\s+/\//g;
- $path[$i++] = $elem;
-}
-my $edit_level = "$ENV{VYATTA_EDIT_LEVEL}";
-
-my $path = $edit_level . join '/', @path;
-
-my $full_path = "$ENV{VYATTA_TEMP_CONFIG_DIR}/$path";
-
-if (-e $full_path) {
- my $leaf = "$full_path/node.val";
- if (-e $leaf) {
- #prevent setting on leaf or multi, check for node.val
- if (!defined $ENV{BOOT}) {
- printf("Cannot deactivate end node\n");
- }
- exit 1;
- }
-}
-else {
- #check if this is a leaf node with value
- my $parent_path_leaf = $ENV{VYATTA_TEMP_CONFIG_DIR} . "/" . $edit_level . join('/', @parent_path) . "/node.val";
- if (-e $parent_path_leaf) {
- #prevent setting on leaf or multi, check for node.val
- if (!defined $ENV{BOOT}) {
- printf("Cannot deactivate end node\n");
- }
- exit 1;
- }
- if (!defined $ENV{BOOT}) {
- printf("This configuration element does not exist: " . join(' ', @path) . "\n");
- }
- exit 1;
-}
-
-#######################################################
-#now check for nesting of the activate/deactivate nodes
-#######################################################
-if ($action eq 'deactivate') {
- my $active_dir = "$ENV{VYATTA_ACTIVE_CONFIGURATION_DIR}/$path";
- my $local_dir = $full_path;
- if (-e $active_dir && !(-e "$active_dir/.disable")) { #checks active children
- find( \&wanted, $active_dir );
- }
- if (-e $local_dir) { #checks locally commit children, will remove disabled children
- find( \&wanted_local, $local_dir );
- }
- #final check that walks up tree and checks
- if (!(-e "$active_dir/.disable") && check_parents(@path)) { #checks active and locally committed parents
- if (!defined $ENV{BOOT}) {
- print("Cannot deactivate nested elements\n");
- }
- exit 1;
- }
-}
-
-#######################################################
-#now apply the magic
-#######################################################
-if ($action eq 'activate') {
- $full_path .= "/.disable";
- if (-e $full_path) {
- `rm -f $full_path`;
- }
- else {
- printf("This element has not been deactivated\n");
- exit 1;
- }
-}
-elsif ($action eq 'deactivate') {
- #first let's check and ensure that there is not another child .disable node...
- #also needs to be enforced when committing
- my $active_dir = "$ENV{VYATTA_ACTIVE_CONFIGURATION_DIR}/$path";
- my $local_dir = $full_path;
- `touch $full_path/.disable`;
-}
-else {
- printf("bad argument: " . $action . "\n");
- usage();
-}
-
-`touch $ENV{VYATTA_TEMP_CONFIG_DIR}/.modified`;
-
-exit 0;