Forum Discussion

Alex_Sinclair_1's avatar
Alex_Sinclair_1
Icon for Nimbostratus rankNimbostratus
Jun 15, 2005

Accessing pool members by IP/PORT in v9x?

I have an ASP.NET application I wrote with Big-IP/iControl 4.5/4.6 that makes a lot of use of the old ITCMLocalLB.Node.get_state, ITCMLocalLB.Node.set_state, ITCMLocalLB.Monitor2.get_instance_state and ITCMLocalLB.Monitor2.set_instance_state

 

 

It worked well before because I didn't have to know pool names and could deal with pool member status directly. Since I don't manage the Big-IPs, but instead, am an application support person, I have little control over pool configurations, or access any configuration information on the load balancers, for that matter.

 

 

Our network guys just upgraded the Big-IPs to 6800s running 9.1 and now I can't seem to find equivalent methods to make my app work with the new version of iControl. Anyone see something I don't? Is my only option to switch to using names to access pool members? Oh yeah, I have 2 days to get the app back up and functioning as before. 'Lil help?
  • The underlying architecture in 9.x changed to not include Node Servers (addr:port) as independent objects. They now only exist within the context of the pool that they are defined. So, now if you disable a node server it can still be enabled in another pool.

    We now have only Node Addresses (addr) (accessible via the LocalLB::NodeAddress interface) at the top level. So, you can enable/disable an entire address at a global level, just not a address:port combination.

    With that being said, there are several things you can do. You can query all the pools with LocalLB::Pool::get_list() and pass that into LocalLB::Pool::get_member() to return you all the members defined on the system. Then you can use the LocalLB::PoolMember interface to query or set the status of the members.

    In 9.x the methods for controlling the state have changed a bit as well. They are:

     SessionStatus[] get/set_session_status( 
         in String[] node_addresses 
     ); 
      
     and 
      
     MonitorStatus[] get/set_monitor_status( 
         in String[] node_addresses 
     );

    get/set_session_status() will query or set whether or not new sessions are allowed on the address. get/set_monitor_state() will query or set whether or not any traffic is allowed on the address.

    Alternately, maybe just the address is all you care about as you are only running a single service on each backend node or you care if any of the running services is down. If that is the case, then you can use the LocalLB::NodeAddress to do what you were doing before.

    Hopefully this helps. If not, post your application logic and I'll see what I can do to help out further.

    -Joe
  • Joe,

     

     

    Thanks for the info. I was afraid you'd say something like that. For the time being, I have thrown together a really quick and dirty app to allow my team to work with the node addresses until I can re-architect the bigger prettier one.

     

     

    Thanks for the prompt response!