Forum Discussion

Andy_Herrman_22's avatar
Andy_Herrman_22
Icon for Nimbostratus rankNimbostratus
Jun 29, 2006

iRules modified and saved with iRule editor revert after BIG-IP reboot

This may be related to the error I mentioned in my other post:

 

http://devcentral.f5.com/Default.aspx?tabid=28&forumid=22&postid=8611&view=topic

 

 

I logged into the BIG-IP machine after it had been reboot and the iRules had reverted back to the code they had had before I had started using the iRule editor. I tried this again and verified that it consistently happens. Any changes I make using the iRule editor do not persist between reboots. However, if I go into the web-based controls of BIG-IP and open the rules up there I see the changes I made using the iRule editor, and if I then save it from there it does persist between reboots.

 

 

It looks like the iRule editor is successfully changing the copy that's in memory but isn't saving it to permanent storage. I'm guessing it's related to the exception I get when I try to save:

 

 

 

Exception caught in System::ConfigSync::save_configuration()

 

Exception: Common::OperationFailed

 

 

 

Any ideas what could be causing this?
  • This is exactly the issue. The editor first attempts to save the iRule to the running configuration. If this succeeds then a call to save_configuration() is made which will persist the changes to disk (/config/bigip.conf). If the call to save_configuration() is failing, then the changes won't be saved to disk.

     

     

    Which version of BIG-IP are you running? I'll try to take a look and see if I can reproduce the issue on your platform. Also, what is the level of authorization the user account you are using has?

     

     

    -Joe
  • I'm using the admin account, so I assume it has full authorization.

     

     

    The version is (according to the Web UI): BIG-IP 9.1.2 Build 40.6
  • I've found that if I do
    bigpipe config sync
    on the server it works fine, and that seems to be where the iRule editor is dying (at least from where the exception seems to be coming from in the code in the iRule editor). I'm wondering if maybe there's some weird permissions problem with the file being written to.

     

     

    Anything else I could try on my end to help figure this out?
  • It's not a config sync that is being issued. The iControl call for save_configuration() issues a "bigpipe config save" command. If you can issue this from the console successfully, then there has to be something with the permissions of the admin account you are using.

     

     

    Here is an iControl script that you can copy and run on your BIG-IP that issues the same iControl method call that the editor is using. Copy this to your bigip and issue the following command

     

     

    $ perl saveConfiguration.pl localhost 443 username password

     

     

    You should get the same error message that is displayed within the editor. If you get the message "Configuration successfully saved" then the call worked (which it shouldn't). Just make sure you are using the same account that you are from the iRule Editor.

     

     

    If this command fails, then I'd suggest you try to create a new user account and see if that one works. If you are still having troubles after this, I'd suggest you contact F5 Product Technical support as this is an iControl permissions issue that will have to be addressed with a code fix.

     

     

    -Joe
  • Oops, forget to add the script. Here you go:

     

     

    !/usr/bin/perl
    ----------------------------------------------------------------------------
     The contents of this file are subject to the "END USER LICENSE AGREEMENT FOR F5
     Software Development Kit for iControl"; you may not use this file except in
     compliance with the License. The License is included in the iControl
     Software Development Kit.
     Software distributed under the License is distributed on an "AS IS"
     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
     the License for the specific language governing rights and limitations
     under the License.
     The Original Code is iControl Code and related documentation
     distributed by F5.
     The Initial Developer of the Original Code is F5 Networks,
     Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2004 F5 Networks,
     Inc. All Rights Reserved.  iControl (TM) is a registered trademark of F5 Networks, Inc.
     Alternatively, the contents of this file may be used under the terms
     of the GNU General Public License (the "GPL"), in which case the
     provisions of GPL are applicable instead of those above.  If you wish
     to allow use of your version of this file only under the terms of the
     GPL and not to allow others to use your version of this file under the
     License, indicate your decision by deleting the provisions above and
     replace them with the notice and other provisions required by the GPL.
     If you do not delete the provisions above, a recipient may use your
     version of this file under either the License or the GPL.
    ----------------------------------------------------------------------------
    use SOAP::Lite + trace => qw(method debug);
    use SOAP::Lite;
    use MIME::Base64;
    use Math::BigInt;
    ----------------------------------------------------------------------------
     Validate Arguments
    ----------------------------------------------------------------------------
    my $sHost = $ARGV[0];
    my $sPort = $ARGV[1];
    my $sUID = $ARGV[2];
    my $sPWD = $ARGV[3];
    my $sProtocol = "https";
    if ( ("80" eq $sPort) or ("8080" eq $sPort) )
    {
      $sProtocol = "http";
    }
    if ( ($sHost eq "") or ($sPort eq "") or ($sUID eq "") or ($sPWD eq "") )
    {
      die ("Usage: saveConfiguration.pl host port uid pwd\n");
    }
    ----------------------------------------------------------------------------
     Transport Information
    ----------------------------------------------------------------------------
    sub SOAP::Transport::HTTP::Client::get_basic_credentials
    {
      return "$sUID" => "$sPWD";
    }
    $ConfigSync = SOAP::Lite
      -> uri('urn:iControl:System/ConfigSync')
      -> proxy("$sProtocol://$sHost:$sPort/iControl/iControlPortal.cgi");
    eval { $ConfigSync->transport->http_request->header
    (
      'Authorization' => 
        'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
    ); };
    &saveConfiguration();
    sub saveConfiguration()
    {
      $soapResponse = $ConfigSync->save_configuration
      (
        SOAP::Data->name(filename => ""),
        SOAP::Data->name(save_flag => "SAVE_HIGH_LEVEL_CONFIG")
      );
      &checkResponse($soapResponse);
      print "Configuration successfully saved!\n";
    }
    ----------------------------------------------------------------------------
     checkResponse
    ----------------------------------------------------------------------------
    sub checkResponse()
    {
      my ($soapResponse) = (@_);
      if ( $soapResponse->fault )
      {
        print $soapResponse->faultcode, " ", $soapResponse->faultstring, "\n";
        exit();
      }
    }

     

     

    -Joe
  • Got the same error when running the perl script. I used the web interface to create a new user and tried using that one, but still got the same error.

     

     

    When I contact support, is there anything extra info you can think of that might be useful to tell them other than that I'm getting that error? Thanks!
  • Turns out there is an issue with the default filename parameter in v9.1.2. I'll get an editor update in the next few days that specifies the "/config/bigip.conf" file for the filename param and this should resolve your issue.

     

     

    -Joe
  • An updated version of the editor has been posted that should correct this issue (as well as a few other goodies).

     

     

    Enjoy!

     

     

    -Joe
  • Looks like that fixed it. Just did a quick test and it was able to save without any errors. Thanks!