Create Dynamic group by Script
Hi Members
I am trying to create 'Device Dynamic Groups' with Python script. but I am failing. Could you pleas me what I am missing:
Conditions of the groups name: If Device display name starts with prod, all device should group.
I have attached the full script too. I am running Python 3.6.5
<span class="com">#!/bin/env python</span><span class="pln">
</span><span class="kwd">import</span><span class="pln"> requests
</span><span class="kwd">import</span><span class="pln"> json
</span><span class="kwd">import</span><span class="pln"> hashlib
</span><span class="kwd">import</span><span class="pln"> base64
</span><span class="kwd">import</span><span class="pln"> time
</span><span class="kwd">import</span><span class="pln"> hmac
</span><span class="com">#Account Info</span><span class="pln">
</span><span>AccessId</span><span class="pln"> </span><span class="pun">=</span><span class="str">'XXXXXX'</span><span class="pln">
</span><span>AccessKey</span><span class="pln"> </span><span class="pun">=</span><span class="str">'XXXXXX'</span><span class="pln">
</span><span>Company</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'contoso'</span><span class="pln">
</span><span class="com">#Request Info</span><span class="pln">
httpVerb </span><span class="pun">=</span><span class="str">'POST'</span><span class="pln">
resourcePath </span><span class="pun">=</span><span class="pln"> </span><span class="str">'/device/groups'</span><span class="pln">
data </span><span class="pun">=</span><span class="pln"> </span><span class="str">'{"name":"test111","parentId":111,"appliesTo":"startsWith("system.displayname","Prod")"}'</span><span class="pln">
</span><span class="com">#Construct URL </span><span class="pln">
url </span><span class="pun">=</span><span class="pln"> </span><span class="str">'https://'</span><span class="pun">+</span><span class="pln"> </span><span>Company</span><span class="pln"> </span><span class="pun">+</span><span class="str">'.logicmonitor.com/santaba/rest'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> resourcePath
</span><span class="com">#Get current time in milliseconds</span><span class="pln">
epoch </span><span class="pun">=</span><span class="pln"> str</span><span class="pun">(</span><span class="pln">int</span><span class="pun">(</span><span class="pln">time</span><span class="pun">.</span><span class="pln">time</span><span class="pun">()</span><span class="pln"> </span><span class="pun">*</span><span class="pln"> </span><span class="lit">1000</span><span class="pun">))</span><span class="pln">
</span><span class="com">#Concatenate Request details</span><span class="pln">
requestVars </span><span class="pun">=</span><span class="pln"> httpVerb </span><span class="pun">+</span><span class="pln"> epoch </span><span class="pun">+</span><span class="pln"> data </span><span class="pun">+</span><span class="pln"> resourcePath
</span><span class="com">#Construct signature</span><span class="pln">
</span><span class="com">#signature = base64.b64encode(hmac.new(AccessKey,msg=requestVars,digestmod=hashlib.sha256).hexdigest())</span><span class="pln">
hmac </span><span class="pun">=</span><span class="pln"> hmac</span><span class="pun">.</span><span class="pln">new</span><span class="pun">(</span><span>AccessKey</span><span class="pun">.</span><span class="pln">encode</span><span class="pun">(),</span><span class="pln">msg</span><span class="pun">=</span><span class="pln">requestVars</span><span class="pun">.</span><span class="pln">encode</span><span class="pun">(),</span><span class="pln">digestmod</span><span class="pun">=</span><span class="pln">hashlib</span><span class="pun">.</span><span class="pln">sha256</span><span class="pun">).</span><span class="pln">hexdigest</span><span class="pun">()</span><span class="pln">
signature </span><span class="pun">=</span><span class="pln"> base64</span><span class="pun">.</span><span class="pln">b64encode</span><span class="pun">(</span><span class="pln">hmac</span><span class="pun">.</span><span class="pln">encode</span><span class="pun">())</span><span class="pln">
</span><span class="com">#Construct headers</span><span class="pln">
</span><span class="com">#auth = 'LMv1 ' + AccessId + ':' + signature + ':' + epoch</span><span class="pln">
</span><span class="com">#headers = {'Content-Type':'application/json','Authorization':auth}</span><span class="pln">
auth </span><span class="pun">=</span><span class="pln"> </span><span class="str">'LMv1 '</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span>AccessId</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">':'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> signature</span><span class="pun">.</span><span class="pln">decode</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">':'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> epoch
headers </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'Content-Type'</span><span class="pun">:</span><span class="str">'application/json'</span><span class="pun">,</span><span class="str">'Authorization'</span><span class="pun">:</span><span class="pln">auth</span><span class="pun">}</span><span class="pln">
</span><span class="com">#Make request</span><span class="pln">
response </span><span class="pun">=</span><span class="pln"> requests</span><span class="pun">.</span><span class="pln">post</span><span class="pun">(</span><span class="pln">url</span><span class="pun">,</span><span class="pln"> data</span><span class="pun">=</span><span class="pln">data</span><span class="pun">,</span><span class="pln"> headers</span><span class="pun">=</span><span class="pln">headers</span><span class="pun">)</span>
Please assist
Thank you.
Tanvir
Posted 8 years ago·Last reply 8 years ago
3 comments
Keimond
·8 years agoJust another random note lol.. I read YAML better so I'm always using https://www.json2yaml.com/
translates to
*shrug* :)/emoticons/smile@2x.png 2x" title=":)" width="20">
Tanvir
OP8 years agoThanks Joe data = '{\"name\":\"test1111\",\"parentId\":111,\"appliesTo\": \"Type==\\\"Test Server\\\"\"}' worked
Joe_Tran
·8 years agoYour payload in the data variable is not valid JSON. So here you'll want to escape certain special/reserved characters which would otherwise render your JSON invalid. In this example, this would include the double-quotes, so it should look like this---
Using a JSON validator like https://jsonformatter.curiousconcept.com/ will probably help.