That would be correct that you can't access the file system directly with iRules. One way would be to write up something using iControl or possibly using an indirect method with iRules
For example you would create an external class data group called downtimepool
that contains "UP" or "DOWN"
Then you can use a common irule
when CLIENT_ACCEPTED {
if { (![IP::address [IP::client_address]/24 eq "192.168.1.0") and ($::downtimepool eq "DOWN" } {
pool pool_downtime
}
}
Where 192.168.1.0 is your internal IP block
The only catch is that the application people would have to log into the BIGIP and go to the external file and change the language to "UP" and perform a b load.
Another alternative is to give them access to the BIGIP GUI and let them change a parameter in the irule that is common to all your VS
when CLIENT_ACCEPTED {
set downtimepool "UP"
if { (![IP::address [IP::client_address]/24 eq "192.168.1.0") and ($:downtimepool eq "DOWN" } {
pool pool_downtime
}
}
Another way is seting up a pool called dummy_pool containing a single pool member where it is doing a standard TCP port check, where the the application users would normally disable the service that the standard TCP port is being checked on so that the pool is always down under normal conditions.
Then use you can write up an irule similiar to this
when CLIENT_ACCEPTED {
if { (![IP::address [IP::client_address]/24 eq "192.168.1.0") and (![active_members dummy_pool] < 1) } {
pool pool_downtime
}
}
When they want external users to go to the downtime pool they simply turn up the service on the single pool member and thus the monitor will pass and mark up the pool which will trigger the irule to process.
Of course this all untested but hopefully this helps
CB