Forum Discussion

Archie_128388's avatar
Archie_128388
Icon for Nimbostratus rankNimbostratus
Jul 25, 2016

iApp works in production, but fails sys load verify.

Hi Everyone,

I have an iApp that I wrote on our F5 (Viprion) and it's doing everything I wanted, without issue. I want to upgrade to 12.1 (currently on v12) and when I do a tmsh load sys config verify to be sure of a smooth upgrade the iApp fails to verify:

 

Syntax Error:(/config/bigip_script.conf at line: 27) "
set POOLNODE " unknown property

 

I've read a few articles that suggest I need to escape the } with a \ however if I do this, the issues simply moves and then iapp::template start becomes an unknown property.

I can't work out why the GUI editor thinks the code is fine, but it fails a verify on load? I wrote the iApp in TMSH V12.0

Offending line(s) below:

 

        set POOLMONITOR " session user-enabled state user-up } } min-active-members 1 monitor tcp_80}"
        set POOLNODE " wcf-tunnel-node-"
        set LBRACE " { " 

 

I tried to add more info, but the F5 submit complained about the length of my post... 😕

  • Archie- Tcl processes quoted strings, allowing for variable substitution. The Tcl validator is attempting to interpret the unpaired brace as a boundary character. A simplified reproduction of the error is this:

     

        sys application template x {
        actions {
            definition {
                implementation {
                    set x "{"
                }
                presentation {
                }
            }
        }
    

     

    root@(big82)(cfg-sync Standalone)(ModuleNotLicensed:Active)(/Common)(tmos) load sys config verify... Syntax Error:(/config/bigip_script.conf at line: 63644) incomplete command

    Escaping should work. Did you escape all of the quoted braces? I tried building an iapp with all of the statements above, and could not get it to fail.

  • I tried to add more info, but the F5 submit complained about the length of my post... :/

     

  • Fred_Slater_856's avatar
    Fred_Slater_856
    Historic F5 Account

    Archie- Tcl processes quoted strings, allowing for variable substitution. The Tcl validator is attempting to interpret the unpaired brace as a boundary character. A simplified reproduction of the error is this:

     

        sys application template x {
        actions {
            definition {
                implementation {
                    set x "{"
                }
                presentation {
                }
            }
        }
    

     

    root@(big82)(cfg-sync Standalone)(ModuleNotLicensed:Active)(/Common)(tmos) load sys config verify... Syntax Error:(/config/bigip_script.conf at line: 63644) incomplete command

    Escaping should work. Did you escape all of the quoted braces? I tried building an iapp with all of the statements above, and could not get it to fail.

    • Archie_128388's avatar
      Archie_128388
      Icon for Nimbostratus rankNimbostratus

      Thanks Fred - I'm pretty sure I did escape them all out, but I'll go back over everything and re-check. Least I know I'm on the right track..

       

    • Archie_128388's avatar
      Archie_128388
      Icon for Nimbostratus rankNimbostratus

      Actually, I have a statement like this:

      set DUMMY "/ltm data-group internal /Common/zscaler-wcf-source-to-tunnel-map { records add { 1.1.1.1/32 { data /Common/$tmsh::app_name.app/wcf-tunnel-pool-"

      Should the / also be escaped with a \ or is it purely { or }

    • Fred_Slater_856's avatar
      Fred_Slater_856
      Historic F5 Account

      No, that looks OK. To force a literal within quotes, escape { } because they represent Tcl lists, [ ] because they represent code to be executed and result substituted, and $ because it represents variable substitution. Within braces, you do not have to substitute [ ] or $. You can read more about all that at http://tmml.sourceforge.net/doc/tcl/Tcl.html