22-Apr-2016
13:59
- last edited on
19-Dec-2022
17:43
by
JRahm
Hi there,
Very much hoping there is someone that can help me with this problem. I am trying to gather some information about pool members from the F5 API (still on SOAP for a little while more).
I am using the f5-icontrol Gem described here: http://www.rubydoc.info/gems/f5-icontrol/0.1.5
Specifically, I am trying to call the LocalLB.Pool.get_all_member_statistics method passing in a string of the pool name and receive the following error:
/full/path/ruby-2.1.6/gems/savon-2.11.1/lib/savon/response.rb:85:in `raise_soap_and_http_errors!': (SOAP-ENV:Server) **Could not find element by name: pool_names** (Savon::SOAPFault)
I am able to run a number of other methods and get back data, for example I can run api.LocalLB.Pool.get_list & api.Management.UserManagement.get_my_permission() and data is returned immediately. Also, the string I am passing in to get_all_member_statistics is the exact string returned by api.LocalLB.Pool.get_list.
Note that I tried running as a normal user as well as an F5 admin.
Here is my exact code:
require 'f5-icontrol'
F5::Icontrol.configure do |f|
f.host = "big-ip-url.domain.com"
f.username = "user"
f.password = "pass"
end
api = F5::Icontrol::API.new
get_list runs perfectly and returns all of the pool names in the format of "/Common/full_pool_name" for example
response = api.LocalLB.Pool.get_list
This successfully returns the permissions for the current user
response = api.Management.UserManagement.get_my_permission()
This is NOT working and returns the error above
response = api.LocalLB.Pool.get_all_member_statistics("Common/full_pool_name_exactly_as_it_appears_in_the_UI")
puts response.inspect
22-Apr-2016 15:27
25-Apr-2016
14:24
- last edited on
19-Dec-2022
17:42
by
JRahm
The LocalLB.Pool.get_all_member_statistics looks like this
LocalLB.Pool.MemberStatistics [] get_all_member_statistics(
in String [] pool_names
);
It takes as a parameter, an array of pool names to query and returns an array of MemberStatistics structures for each pool passed in the pool_names parameter.
If you are getting an error that "pool_names" isn't found, odds are that your call isn't passing the value in as an array of size 1 with the first index being the pool you are querying. From the looks of how you coded it, it looks like it's just a string literal getting passed in that parameter.
We designed the APIs this way to make it easier to perform "bulk" operations.
-Joe
23-May-2016 18:51
try this fomat response = api.LocalLB.VirtualServer.get_destination({"virtual_servers"=>{:item=>['/Common/vs-name']}})
26-May-2016
10:06
- last edited on
21-Nov-2022
22:25
by
JimmyPackets
First of all, sorry for the delay. Had a heck of a time getting this running on my mac. Also, I'm a noob with Ruby so I'm trying to figure it out myself.
Regarding the "couldn't find element by name" error, that means that the server didn't see the specific parameter in the request. In your code, you are just passing in a string literal and I think you need to specify the parameter name and encode the value as an array. I tried this out and it seemed to work:
response = api.LocalLB.Pool.get_all_member_statistics(
pool_names: {
item: [
"Common/full_pool_name_exactly_as_it_appears_in_the_UI"
]
}
);
You will likely have to do the same for structures when used as parameters.
Hope this gets you going - finally! Again, sorry for the delay and hope this helps.
-Joe