]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl - change default config file format, use Data::Dumper now
authorEric Bollengier <eric@eb.homelinux.org>
Tue, 22 Aug 2006 20:34:22 +0000 (20:34 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Tue, 22 Aug 2006 20:34:22 +0000 (20:34 +0000)
     - add load_old function to do convert from old_format
     - add add/del/mod autochanger from configuration

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@3334 91ce42f0-d328-0410-95d8-f526ca767f89

gui/bweb/cgi/bweb.pl
gui/bweb/lib/Bweb.pm
gui/bweb/tpl/ach_add.tpl
gui/bweb/tpl/ach_content.tpl
gui/bweb/tpl/config_edit.tpl
gui/bweb/tpl/config_view.tpl

index ed41655b91acd2bd55654d17c7871138618cf3fb..68cc309478b2093e3743c4e09dad795a1335e8bd 100755 (executable)
@@ -59,7 +59,7 @@ my $arg = $bweb->get_form('jobid', 'limit', 'offset', 'age');
 $bweb->display_begin();
 
 # if no configuration, we send edit_conf
-unless ($bweb->{info}->{dbi}) {
+if ($action ne 'apply_conf' and !$bweb->{info}->{dbi}) {
     $action = 'edit_conf';
 }
 
@@ -115,7 +115,7 @@ if ($action eq 'begin') {           # main display
 
 } elsif ($action eq 'eject') {
     my $arg = $bweb->get_form("ach");
-    my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+    my $a = $bweb->ach_get($arg->{ach});
     
     if ($a) {
        $a->status();
@@ -137,18 +137,25 @@ if ($action eq 'begin') {         # main display
 } elsif ($action eq 'clear_io') {
     my $arg = $bweb->get_form('ach');
 
-    my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+    my $a = $bweb->ach_get($arg->{ach});
     if (defined $a) {
        $a->status();
        $a->clear_io();
        $a->display_content();
     }
+
+} elsif ($action eq 'ach_edit') {
+    $bweb->ach_edit();
+
+} elsif ($action eq 'ach_del') {
+    $bweb->ach_del();
+
 } elsif ($action eq 'ach_view') {
     # TODO : get autochanger name and create it
     $bweb->connect_db();
     my $arg = $bweb->get_form('ach');
 
-    my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+    my $a = $bweb->ach_get($arg->{ach});
     if ($a) {
        $a->status();
        $a->display_content();
@@ -160,7 +167,7 @@ if ($action eq 'begin') {           # main display
 } elsif ($action eq 'ach_load') {
     my $arg = $bweb->get_form('ach', 'drive', 'slot');
     
-    my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+    my $a = $bweb->ach_get($arg->{ach});
 
     if (defined $a and defined $arg->{drive} and defined $arg->{slot})
     {
@@ -177,7 +184,7 @@ if ($action eq 'begin') {           # main display
 } elsif ($action eq 'ach_unload') {
     my $arg = $bweb->get_form('drive', 'slot', 'ach');
 
-    my $a = Bweb::Autochanger::get($arg->{ach}, $bweb);
+    my $a = $bweb->ach_get($arg->{ach});
 
     if (defined $a and defined $arg->{drive} and defined $arg->{slot})
     {
index 457f47bca506bc4a6fd92c8daf6ab07f97028c09..794ff245aec3ad7a26aa1a52f26476cda9da71cc 100644 (file)
@@ -203,7 +203,6 @@ our %k_re = ( dbi      => qr/^(dbi:(Pg|mysql):(?:\w+=[\w\d\.-]+;?)+)$/i,
              bconsole    => qr!^(.+)?$!,
              syslog_file => qr!^(.+)?$!,
              log_dir     => qr!^(.+)?$!,
-             ach_list    => qr!^(.+)?$!,
              );
 
 =head1 FUNCTION
@@ -224,12 +223,54 @@ sub load
     {
        return $self->error("$self->{config_file} : $!");
     }
+    my $f=''; my $tmpbuffer;
+    while(read FP,$tmpbuffer,4096)
+    {
+       $f .= $tmpbuffer;
+    }
+    close(FP);
+
+    my $VAR1;
+
+    no strict; # I have no idea of the contents of the file
+    eval "$f" ;
+    use strict;
 
-    while (my $line = <FP>) 
+    if ($f and $@) {
+       $self->load_old();
+       $self->save();
+       return $self->error("If you update from an old bweb install, your must reload this page and if it's fail again, you have to configure bweb again...") ;
+    }
+
+    foreach my $k (keys %$VAR1) {
+       $self->{$k} = $VAR1->{$k};
+    }
+
+    return 1;
+}
+
+=head1 FUNCTION
+
+    load_old - load old configuration format
+
+=cut
+
+sub load_old
+{
+    my ($self) = @_ ;
+
+    unless (open(FP, $self->{config_file}))
+    {
+       return $self->error("$self->{config_file} : $!");
+    }
+
+    while (my $line = <FP>)
     {
        chomp($line);
        my ($k, $v) = split(/\s*=\s*/, $line, 2);
-       $self->{$k} = $v;
+       if ($k_re{$k}) {
+           $self->{$k} = $v;
+       }
     }
 
     close(FP);
@@ -248,15 +289,13 @@ sub save
 
     unless (open(FP, ">$self->{config_file}"))
     {
-       return $self->error("$self->{config_file} : $!");
-    }
-    
-    foreach my $k (keys %$self)
-    {
-       next unless (exists $k_re{$k}) ;
-       print FP "$k = $self->{$k}\n";
+       return $self->error("$self->{config_file} : $!\n" .
+                           "You must add this to your config file\n" 
+                           . Data::Dumper::Dumper($self));
     }
 
+    print FP Data::Dumper::Dumper($self);
+    
     close(FP);       
     return 1;
 }
@@ -277,8 +316,9 @@ sub edit
 sub view
 {
     my ($self) = @_ ;
-
-    $self->display($self, "config_view.tpl");    
+    $self->{achs} = [ map { { name => $_ } } keys %{$self->{ach_list}} ];
+    $self->display($self, "config_view.tpl");
+    delete $self->{achs};
 }
 
 sub modify
@@ -299,7 +339,7 @@ sub modify
        }
     }
 
-    $self->display($self, "config_view.tpl");
+    $self->view();
 
     if ($self->{error}) {      # an error as occured
        $self->display($self, 'error.tpl');
@@ -467,93 +507,6 @@ use base q/Bweb::Gui/;
 
 =cut
 
-# TODO : get autochanger definition from config/dump file
-my $ach_list ;
-
-sub get
-{
-    my ($name, $bweb) = @_;
-    
-    unless ($name) {
-       return $bweb->error("Can't get your autochanger name ach");
-    }
-
-    unless ($ach_list) {
-       unless (get_defined_ach($bweb)) {
-           return undef;
-       }
-    }
-    
-    my $a = $ach_list->{$name};
-
-    unless ($a) {
-       $bweb->error("Can't get your autochanger $name from your ach_list");
-       return undef;
-    }
-
-    $a->{bweb} = $bweb;
-
-    return $a;
-}
-
-sub get_defined_ach
-{
-    my ($bweb) = @_;
-    if (defined $bweb->{info}->{ach_list}) {
-       if (open(FP, "<$bweb->{info}->{ach_list}")) {
-           my $f=''; my $tmpbuffer;
-           while(read FP,$tmpbuffer,4096)
-           {
-               $f .= $tmpbuffer;
-           }
-           close(FP);
-           no strict; # I have no idea of the contents of the file
-           eval '$ach_list = ' . $f ;
-           use strict;
-       } else {
-           return $bweb->error("Can't open $bweb->{info}->{ach_list} $!");
-       }
-    } else {
-       return $bweb->error("Can't find your ach_list file in your configuration");
-    }
-
-    $bweb->debug($ach_list);
-
-    return 1;
-}
-
-sub register
-{
-    my ($ach, $bweb) = @_;
-    my $err;
-
-    if (defined $bweb->{info}->{ach_list})
-    {
-       unless ($ach_list) {
-           get_defined_ach($bweb) ;
-       }
-
-       $ach_list->{$ach->{name}} = $ach;
-
-       if (open(FP, ">$bweb->{info}->{ach_list}")) {
-           print FP Data::Dumper::Dumper($ach_list);
-           close(FP);
-       } else {
-           $err = $!;
-           $err .= "\nCan you put this in $bweb->{info}->{ach_list}\n";
-           $err .= Data::Dumper::Dumper($ach_list);
-       }
-    } else {
-       $err = "ach_list isn't defined";
-    }
-
-    if ($err) {
-       return $bweb->error("Can't find to your ach_list (see bweb configuration) $err");
-    }
-    
-    return 1;
-}
-
 sub new
 {
     my ($class, %arg) = @_;
@@ -2632,7 +2585,7 @@ sub eject_media
        return $self->error("Can't get media selection");
     }
 
-    my $a = Bweb::Autochanger::get($arg->{ach}, $self);
+    my $a = $self->ach_get($arg->{ach});
     unless ($a) {
        return 0;
     }
@@ -2679,6 +2632,87 @@ sub restore
 # TODO : make this internal to not eject tape ?
 use Bconsole;
 
+
+sub ach_get
+{
+    my ($self, $name) = @_;
+    
+    unless ($name) {
+       return $self->error("Can't get your autochanger name ach");
+    }
+
+    unless ($self->{info}->{ach_list}) {
+       return $self->error("Could not find any autochanger");
+    }
+    
+    my $a = $self->{info}->{ach_list}->{$name};
+
+    unless ($a) {
+       $self->error("Can't get your autochanger $name from your ach_list");
+       return undef;
+    }
+
+    $a->{bweb} = $self;
+
+    return $a;
+}
+
+sub ach_register
+{
+    my ($self, $ach) = @_;
+
+    $self->{info}->{ach_list}->{$ach->{name}} = $ach;
+    $self->{info}->save();
+    
+    return 1;
+}
+
+sub ach_edit
+{
+    my ($self) = @_;
+    my $arg = $self->get_form('ach');
+    if (!$arg->{ach} 
+       or !$self->{info}->{ach_list} 
+       or !$self->{info}->{ach_list}->{$arg->{ach}}) 
+    {
+       return $self->error("Can't get autochanger name");
+    }
+
+    my $ach = $self->{info}->{ach_list}->{$arg->{ach}};
+
+    my $i=0;
+    $ach->{drives} = 
+       [ map { { name => $_, index => $i++ } } @{$ach->{drive_name}} ] ;
+
+    my $b = new Bconsole(pref => $self->{info});    
+    my @storages = $b->list_storage() ;
+
+    $ach->{devices} = [ map { { name => $_ } } @storages ];
+    
+    $self->display($ach, "ach_add.tpl");
+    delete $ach->{drives};
+    delete $ach->{devices};
+    return 1;
+}
+
+sub ach_del
+{
+    my ($self) = @_;
+    my $arg = $self->get_form('ach');
+
+    if (!$arg->{ach} 
+       or !$self->{info}->{ach_list} 
+       or !$self->{info}->{ach_list}->{$arg->{ach}}) 
+    {
+       return $self->error("Can't get autochanger name");
+    }
+   
+    delete $self->{info}->{ach_list}->{$arg->{ach}} ;
+   
+    $self->{info}->save();
+    $self->{info}->view();
+}
+
 sub ach_add
 {
     my ($self) = @_;
@@ -2693,7 +2727,7 @@ sub ach_add
     }
 
     my @drives ;
-    foreach my $drive (CGI::param('drive'))
+    foreach my $drive (CGI::param('drives'))
     {
        unless (grep(/^$drive$/,@storages)) {
            return $self->error("Can't find $drive in storage list");
@@ -2717,7 +2751,9 @@ sub ach_add
                                  device => $arg->{device},
                                  mtxcmd => $arg->{mtxcmd});
 
-    return Bweb::Autochanger::register($a, $self) ;
+    $self->ach_register($a) ;
+    
+    $self->{info}->view();
 }
 
 sub delete
@@ -2772,7 +2808,6 @@ SELECT Job.Name as name, Client.Name as clientname
     unless ($row) {
        return $self->error("Can't find $arg->{jobid} in catalog");
     }
-    
 
     $query = "
 SELECT Time AS time, LogText AS log
index 6f11b756205236c6ffe532dde763b16459d5f1ed..3ae6612ed3f10cad5f4bb8e3f4d57ef62d456898 100644 (file)
@@ -3,35 +3,39 @@
   <h1 class='newstitle'> New autochanger </h1>
 </div>
 <div class='bodydiv'>
-   <form action="?" method='get'>
+   <form name='form1' action="?" method='get'>
     <table>
      <tr><td>Name :</td>     
          <td>
-          <select name='ach' class='formulaire'>
+          <select name='ach' class='formulaire' id='ach'>
 <TMPL_LOOP devices><option value='<TMPL_VAR name>'><TMPL_VAR name></option></TMPL_LOOP>
           </select>
          </td>
      </tr>
      <tr><td>Pre-command :</td> 
-         <td> <input class="formulaire" type='text' value='sudo' title='can be "sudo" or "ssh storage@storagehost"...' name='precmd'>
+         <td> <input class="formulaire" type='text' id='precmd' value='sudo'
+           title='can be "sudo" or "ssh storage@storagehost"...' name='precmd'>
          </td>
      </tr>
      <tr><td>mtx command :</td> 
-         <td> <input class="formulaire" type='text' value='/usr/sbin/mtx' name='mtxcmd' size='32'>
+         <td> <input class="formulaire" type='text' name='mtxcmd' size='32'
+               value='/usr/sbin/mtx' id='mtxcmd'>
          </td>
      </tr>
      <tr><td>Device :</td> 
-         <td> <input class="formulaire" type='text' value='/dev/changer' name='device'>
+         <td> <input class="formulaire" type='text' name='device' 
+               value='/dev/changer' id='device'>
          </td>
      </tr>
     <tr><td><b>Drives</b></td><td/></tr>
     <TMPL_LOOP devices>
     <tr>
-     <td><input class='formulaire' type='checkbox' 
-                name='drive' value='<TMPL_VAR name>'><TMPL_VAR name>
+     <td><input class='formulaire' type='checkbox' id='drive_<TMPL_VAR name>'
+                name='drives' value='<TMPL_VAR name>'><TMPL_VAR name>
      </td>
      <td>index <input type='text' title='drive index' class='formulaire'
-                value='' name='index_<TMPL_VAR name>' size='3'>
+               id='index_<TMPL_VAR name>' value='' 
+                name='index_<TMPL_VAR name>' size='3'>
      </td>
     </tr>
     </TMPL_LOOP>
     </button>
    </form>
 </div>
+
+<script language="JavaScript">
+  <TMPL_IF name>
+  for (var i=0; i < document.form1.ach.length; ++i) {
+     if (document.form1.ach[i].value == '<TMPL_VAR name>') {
+        document.form1.ach[i].selected = true;
+     }
+  }
+  </TMPL_IF>
+  <TMPL_IF mtxcmd>
+     document.getElementById('mtxcmd').value='<TMPL_VAR mtxcmd>';
+  </TMPL_IF>
+  <TMPL_IF precmd>
+     document.getElementById('precmd').value='<TMPL_VAR precmd>';
+  </TMPL_IF>
+  <TMPL_IF device>
+     document.getElementById('device').value='<TMPL_VAR device>';
+  </TMPL_IF>
+  <TMPL_IF drives>
+   <TMPL_LOOP drives>
+     document.getElementById('drive_<TMPL_VAR name>').checked=true;
+     document.getElementById('index_<TMPL_VAR name>').value=<TMPL_VAR index>;
+   </TMPL_LOOP>
+  </TMPL_IF>
+</script>
index da667159ef3f73b401c9a9f101c4886ecf4f8261..8a28f05160c77b6e5731ca4621868b180dd2f10f 100644 (file)
@@ -37,11 +37,11 @@ Autochanger : <TMPL_VAR NAME=Name> (<TMPL_VAR NAME=nb_drive> Drives
 </button>
 <br/><br/>
 <button type='submit' name='action' value='ach_load' class='formulaire'
-       title='load drive'>&nbsp;Load&nbsp;<br/>
+       title='mount drive'>Mount<br/>
   <img src='/bweb/load.png'>
 </button>
 <button type='submit' name='action' value='ach_unload' class='formulaire'
-       title='unload drive'>Unload<br/>
+       title='umount drive'>Umount<br/>
   <img src='/bweb/unload.png'>
 </button>
 
index c294659b4e09290b0112e0ff27cc9562f4730ddb..8d2e33bdfccb3d7a02cf53dc41cfaa8d296db905 100644 (file)
@@ -35,9 +35,6 @@
      <tr><td>template_dir :</td> 
          <td> <input class="formulaire" type='text' value='<TMPL_VAR NAME=template_dir>' size='64' name='template_dir'> 
          </td></tr>
-     <tr><td>ach_list :</td> 
-         <td> <input class="formulaire" type='text' value='<TMPL_VAR NAME=ach_list>' size='64' name='ach_list'> 
-         </td></tr>
      <tr><td>bconsole :</td> 
          <td> <input class="formulaire" type='text' value='<TMPL_VAR NAME=bconsole>' size='64' name='bconsole'> 
          </td></tr>
index 695c1a32b2969b6933cb4a8edd5f8381b21c4e61..18dce91530689df9a557c97153be12d06ef26b48 100644 (file)
@@ -5,25 +5,47 @@
 <div class='bodydiv'>
    <table>
     <tr>  <td><b>SQL Connection</b></td>  <td/></tr>
-    <tr><td>DBI :</td>      <td> <TMPL_VAR NAME=dbi>      </td></tr>
-    <tr><td>user :</td>     <td> <TMPL_VAR NAME=user>     </td></tr>
-    <tr><td>password :</td> <td> <TMPL_VAR NAME=password> </td></tr>
+    <tr><td>DBI :</td>      <td> <TMPL_VAR dbi>      </td></tr>
+    <tr><td>user :</td>     <td> <TMPL_VAR user>     </td></tr>
+    <tr><td>password :</td> <td> <TMPL_VAR password> </td></tr>
     <tr>  <td><b>General Options</b></td>  <td/></tr>
-    <tr><td>email_media :</td> <td> <TMPL_VAR NAME=email_media> </td></tr>
+    <tr><td>email_media :</td> <td> <TMPL_VAR email_media> </td></tr>
     <tr>  <td><b>Bweb Configuration</b></td>  <td/></tr>
-    <tr><td>template_dir :</td> <td> <TMPL_VAR NAME=template_dir> </td></tr>
-    <tr><td title="path to Autochanger dat file">ach_list :</td> <td> <TMPL_VAR NAME=ach_list> </td></tr>
-    <tr><td>graph_font :</td> <td> <TMPL_VAR NAME=graph_font> </td></tr>
-    <tr><td>bconsole :</td> <td> <TMPL_VAR NAME=bconsole> </td></tr>
-    <tr><td>debug :</td> <td> <TMPL_VAR NAME=debug> </td></tr>
-   </table>
-
-  info :  <TMPL_VAR NAME=error> </br>
+    <tr><td>template_dir :</td> <td> <TMPL_VAR template_dir> </td></tr>
+    <tr><td>graph_font :</td> <td> <TMPL_VAR graph_font> </td></tr>
+    <tr><td>bconsole :</td> <td> <TMPL_VAR bconsole> </td></tr>
+    <tr><td>debug :</td> <td> <TMPL_VAR debug> </td></tr>
+    <TMPL_IF achs>
+    <tr>  <td><b>Autochanger</b></td>  <td/></tr>
+    <tr>
+     <td>
+     <form action='?' method='GET'>
+     <table border='0'>
+    <TMPL_LOOP achs>
+      <tr> 
+       <td><input type='radio' name='ach' value='<TMPL_VAR name>'><TMPL_VAR name></td>
+      </tr>
+    </TMPL_LOOP>
+    </table>
+   <td>
+    <button class='formulaire' type='submit' name='action' value='ach_edit' title='edit'><img src='/bweb/edit.png'></button>
+    <button class='formulaire' type='submit' name='action' value='ach_del' title='delete'><img src='/bweb/remove.png'></button>
+    <button class='formulaire' type='submit' name='action' value='ach_view' title='view'><img src='/bweb/zoom.png'></button>
+    </form>
+    </td>
+   </tr>
+   </TMPL_IF achs>
+  </table>
 
   <form action='?' method='GET'>
    <button name='action' value='edit_conf' class='formulaire'>
-      <img title='Edit' src='/bweb/edit.png'>
+      Edit<br/><img title='Edit' src='/bweb/edit.png'>
+   </button>
+   <button name='action' value='ach_add' class='formulaire'>
+      Add autochanger<br/><img title='Add an autochanger' src='/bweb/add.png'>
    </button>
   </form>
 
+  info :  <TMPL_VAR error> </br>
+
 </div>