Hello Everyone,
Iam working on an script to disable the pool members but seems we are getting issues, I tried multiple types but still its not working. Could someone review the below and quote me if Iam missing anything?
From Curl:
>curl -sku admin:pass -H “Content-Type: application/json” -X PATCH https://f5lab1.com/mgmt/tm/ltm/pool/pool\_1/members/~Common~10.170.xx.xx:21 -d ‘{“session”:“user-disabled”, “state”:“user-down”}’
Error: {“code”:400,“message”:“Found invalid JSON body in the request.”,“errorStack”:[],“apiError”:1}
# Function to disable a member in the pool ( Function using Py)
def disable_member(pool_name, member_name):
url = f’https://{F5_HOST}/mgmt/tm/ltm/pool/{pool_name}/members/~Common~{member_name}’
auth = (F5_USER, F5_PASSWORD)
data = { “session”: “user-disabled” }
try:
response = requests.patch(url, auth=auth, json=data, verify=False)
return response.status_code == 200
except Exception as e:
print(f"Error disabling member: {e}")
return False
Error: 400 BAD REQUEST
JRahm
February 12, 2024, 10:47pm
2
hi @PowerRangers I’ve had spotty success with PATCH but more consistent success with PUT on pool member state changes. also don’t think it’s the issue but you use the partition on your pool member object but not your pool object. Your json payload looks fine here, but make sure your quotes aren’t smart quotes and I like to see spaces between the key/value pairs.
Thank You for the response,
I tried the same and got Method Not Allowed, something similar. also, fixed the quotes and pairs.
Not sure, If I put the same via PostMan its accepting but not via Py.
JRahm
February 12, 2024, 11:32pm
4
you need to format your python dictionary as json…
json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token string">"session"</span><span class="token punctuation">:</span> <span class="token string">"user-disabled"</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
JRahm
February 12, 2024, 11:39pm
5
also FYI…if you get a working postman sample, you can click the </> icon and find samples in a lot of tools/languages of that specific query.
And the python sample they shared from my working postman PATCH is:
<span class="token keyword">import</span> requests
<span class="token keyword">import</span> json
url <span class="token operator">=</span> <span class="token string">"https://ltm15/mgmt/tm/ltm/pool/~Common~nginx-pool/members/~Common~172.16.102.5:80"</span>
payload <span class="token operator">=</span> json<span class="token punctuation">.</span>dumps<span class="token punctuation">(</span><span class="token punctuation">{</span>
<span class="token string">"session"</span><span class="token punctuation">:</span> <span class="token string">"user-disabled"</span><span class="token punctuation">,</span>
<span class="token string">"state"</span><span class="token punctuation">:</span> <span class="token string">"user-down"</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
headers <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token string">'Content-Type'</span><span class="token punctuation">:</span> <span class="token string">'application/json'</span><span class="token punctuation">,</span>
<span class="token string">'Authorization'</span><span class="token punctuation">:</span> <span class="token string">'Basic notsofastmyfriends'</span><span class="token punctuation">,</span>
<span class="token string">'Cookie'</span><span class="token punctuation">:</span> <span class="token string">'BIGIPAuthCookie=supersecretpassphrasehere; BIGIPAuthUsernameCookie=admin'</span>
<span class="token punctuation">}</span>
response <span class="token operator">=</span> requests<span class="token punctuation">.</span>request<span class="token punctuation">(</span><span class="token string">"PATCH"</span><span class="token punctuation">,</span> url<span class="token punctuation">,</span> headers<span class="token operator">=</span>headers<span class="token punctuation">,</span> data<span class="token operator">=</span>payload<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span>text<span class="token punctuation">)</span>
Make sure you set those headers as mentioned. It gets pissy if you dont give it content-type!
ah, thank you for this, I tried the same and seems working now calling json.dumps. Also, my initial method is PATCH - PATCH, now I changed it to POST - PATCH.
PostMan Payload do work to copy the exact text.
Cheers.!!