- Revenera Community
- :
- FlexNet Operations
- :
- FlexNet Operations Forum
- :
- Re: Customer Portal, FNE Cloud license server, process to see available licenses.
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Subscribe
- Mute
- Printer Friendly Page
Having difficulty finding a way to see remaining available licenses.
I can find out (in a long way) by going to:
Devices > Select the device
View > View Served Devices
Click on each Served Device > find out "Count"
accumulate the "Counts" and then check against "Qty mapped" for the Server .
I am assuming there is an easier way to do this. But I am new to Flexera and need help
Also how do you release a license that is checked out but forgotten to be released (by a Customer Portal admin)
Hi @ertugrul ,
You seem close, yet might be missing steps 1 and 2 (detailed below).
Steps:
1. Add a User with Portal Admin User Role permissions to the entitled account with a CLS.
2. Set a Password for CLS by Portal Admin User Role in Customer Portal
3) /authorize REST API
4) /features REST API
++++++++++++++++++++++++++++++++++
More detailed steps:
1. For the entitled account, please add a User with the "Portal Admin User Role" enabled.
2. Now with this User account above, log into the Customer Portal, locate your CLS device and from the "Action" menu, pull down and "Set Password".
From here, you can use the REST APIs.
3. Authorize - https://flexXXXX.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/authorize using a body:
{
"user":"admin",
"password":"PasswordFromStep2Above"
}
where XXXXXXXXXXXX is your unique CLS ID
4. Features - https://flexxxxx.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/features
Hi @ertugrul ,
Apologies for the delayed response due to travel and holiday and travel and did I say travel? 😉
cURL to delete clients looks feasible based upon the documentation. There is one example (not your use case though) in attachments.
The command to delete (spitballing)
curl -X DELETE --url licenseServer_baseURL/clients/{id}
Hello @ertugrul ,
The password you set for the Cloud License Server in the Customer Portal is for the user "admin". Please use "admin" instead of userx@gmail.com to authorize.
Thanks,
Hi @ertugrul ,
Did some more digging into using curl to authorize. This format worked:
"expires" : "2019-09-28T12:24:43.258Z",
"token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlzcyI6IkNVTDY4TUhaWEFVRCIsImlhdCI6MTU2OTU4NzA4MywiZXhwIjoxNTY5NjczNDgzLCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6ImEyNGY3Zjg0LWU3YmEtNDBmZC05ZThiLTQ0YWNlMTY0ZTcxOCJ9.AB1SaFitfnPUwbsKDG8uNXBUGSUtkzcPsyTwNrODDe1BvX3IaKn7gPWIobHCXp_ZBtiqRPek5YuPGA04ERJrNx"
}
Hi @ertugrul ,
Glad to hear you were able to successfully view the features. You definitely need the referenced License Server Producer Guide to get access to the REST API documentation as it has the information you are requesting.
If you look at your response from /features you will see that each licensed feature has an associated id. You can then use that id to see all devices/clients which currently have a license for that feature. To do this send the request to /features/{featureid}/clients. Here's an example request & response for devices which have a license for a feature with id 179837:
curl -k -X GET -H "Content-type:application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlzcyI6IkNVTDY4TUhaWEFVRCIsImlhdCI6MTU2OTU4NzA4MywiZXhwIjoxNTY5NjczNDgzLCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6ImEyNGY3Zjg0LWU3YmEtNDBmZC05ZThiLTQ0YWNlMTY0ZTcxOCJ9.AB1SaFitfnPUwbsKDG8uNXBUGSUtkzcPsyTwNrODDe1BvX3IaKn7gPWIobHCXp_ZBtiqRPek5YuPGA04ERJrNx" https://flexNNNN.compliance.flexnetoperations.com/api/1.0/instances/yourCLSID/features/179837/clients
[ {
"id" : 967863608,
"usageKind" : "CONCURRENT_USAGE",
"client" : {
"id" : 441852507,
"hostid" : {
"hostidValue" : "MyDevice1",
"hostidType" : "STRING"
},
"updateTime" : "2019-09-27T17:31:21.918Z",
"servedStatus" : "NORMAL",
"hostType" : "FLX_CLIENT",
"machineType" : "PHYSICAL",
"trusted" : false,
"correlationId" : "d6e10cea-bacc-4f8d-8ab9-533e6c34d595",
"collectedHostIds" : "STRING MyDevice1",
"requestOperation" : "REQUEST",
"requestHostid" : {
"hostidValue" : "MyDevice1",
"hostidType" : "STRING"
},
"serverHostid" : {
"hostidValue" : "CUL68MHZXAUD",
"hostidType" : "STRING"
},
"expiry" : "2019-10-04T17:31:21.918Z"
},
"useCount" : 1,
"reservedCount" : 0
} ]
The response contains id(s) for all clients with this license feature. To return a license for a given client, you will want to send a DELETE to the /clients/{deviceid} endpoint. Here's an example:
curl -k -X DELETE -H "Content-type:application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlzcyI6IkNVTDY4TUhaWEFVRCIsImlhdCI6MTU2OTU4NzA4MywiZXhwIjoxNTY5NjczNDgzLCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6ImEyNGY3Zjg0LWU3YmEtNDBmZC05ZThiLTQ0YWNlMTY0ZTcxOCJ9.AB1SaFitfnPUwbsKDG8uNXBUGSUtkzcPsyTwNrODDe1BvX3IaKn7gPWIobHCXp_ZBtiqRPek5YuPGA04ERJrNx" https://flexNNNN.compliance.flexnetoperations.com/api/1.0/instances/yourCLSID/clients/441852507
The license for this client is now returned to the server license pool.
Note you have the ability to set a policy on the server to determine how frequently devices can be deleted to prevent "dishonest" users from trying to overuse licenses above their entitled quantity.
Best regards,
Hi @ertugrul,
In the License Server Producer Guide there is a section on "Set Policies". You use a PUT with the /configuration endpoint to set a particular policy parameter.
So, let's say you want to enforce a 1day period between client deletions. Using curl this would look like:
curl -k -X PUT -H "Content-type:application/json" -d "{\"licensing.dropClientEnforcedDelay\":\"1d\"}" -H "Authorization: Bearer producertoken" https://flexNNNN.compliance.flexnetoperations.com/api/1.0/instances/yourCLSID/configuration
Notice you cannot use the token obtain by authenticating with admin credentials as you don't want your end customers to be able to modify this policy. It must be sent with the token obtained from authenticating with producer credentials. As I referenced in my last post in this thread, you will need to submit a support ticket to get the Producer password set for your instance. Once you submit the ticket please post the Case# here and I can try to get it expedited.
Best regards,
Hi @ertugrul ,
There are REST APIs available to query the status of either a Cloud or Local License server. Please refer to the FlexNet Embedded License Server Producer Guide. The /features endpoint will give you a list of all features along with how many are currently in use. The /clients/{id} endpoint can be used to delete a served client. This will free up the license currently in use by the device.
Best regards,
So I see the devices list as https://flexnnn-uat.flexnetoperations.com/flexnet/operations/fne/hosts/list
I tried the /features and /clilents/{id} endpoint but was not successful.
(tried https://flexnnn-uat.flexnetoperations.com/flexnet/operations/fne/features )
Let me know if this is available only at producer portal or if it is available at end user portal as well.
Also if you could send the URL for "FlexNet Embedded License Server Producer Guide” or a pdf it would help. I am searching for it and could not find it.
Cheers
Hi @ertugrul ,
You seem close, yet might be missing steps 1 and 2 (detailed below).
Steps:
1. Add a User with Portal Admin User Role permissions to the entitled account with a CLS.
2. Set a Password for CLS by Portal Admin User Role in Customer Portal
3) /authorize REST API
4) /features REST API
++++++++++++++++++++++++++++++++++
More detailed steps:
1. For the entitled account, please add a User with the "Portal Admin User Role" enabled.
2. Now with this User account above, log into the Customer Portal, locate your CLS device and from the "Action" menu, pull down and "Set Password".
From here, you can use the REST APIs.
3. Authorize - https://flexXXXX.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/authorize using a body:
{
"user":"admin",
"password":"PasswordFromStep2Above"
}
where XXXXXXXXXXXX is your unique CLS ID
4. Features - https://flexxxxx.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/features
I created two users one as admin user at customer portal and second one as regular user. So I guess steps 1 and 2 you recommended is done. Feature
I will try these two suggestions with some quick tools. But these are going to require code changes in the product to make these REST API calls.
So there is no way to do these from the Customer Portal without REST API Calls?
Thanks again this has been really helpful
Hi @ertugrul ,
The REST APIs provide an efficient method to satisfy the use case scenario although requires implementation (via the REST APIs). The OOTB visual method is as you eloquently noted below.
++++++++++++++++++
Devices > Select the device
View > View Served Devices
Click on each Served Device > find out "Count"
accumulate the "Counts" and then check against "Qty mapped" for the Server .
++++++++++++++++++
If you or your integrator need assistance with the REST APIs, let us know. And, if this still hasn't helped with your question, please feel free to update.
Kind Regards,
Eric
preferably from the Customer Portal at FlexNet Operations. (if not from producer portal)
I see the Devices from Devices > View Served Devices
but there there is no way to select a served device and return or remove it.
On View Server page there is "Remove Licenses" or "Return Server" selections under Action. But those return the available license to another server or transfer the license back ( my terminology probably not right) But this operation basically removes a license from the CLS.
My use case is as follows.
User Starts the application and checks out license (in our case they have ability to checkout up to a week) Then if they quit the application their feature license is not returned. If they go to vacation let's say. They have blocked a license from use. I am trying to find a way to return that license to available licenses pool.
Is there a way to do this from FlexNet Operations Portal? Or this also only available from REST API?
Hi @ertugrul ,
Thanks for the reminder on the second part.
Yes, dropping or removing features from a client requires the Producer to manage the desired policy instead of your customer via Customer Portal, which could lead to serious implications of license leakage (intended or unintended overuse).
The 2 API approaches are:
1. API via one of the native (C, .NET or JAVA) SDKs via an API implementation, which is essentially sending an empty capability request (no AddDesiredFeatures) to CLS. This is the equivalent of a return.
2. API via REST. This option is mainly for license administrators. Please see an information snippet about the role, ROLE_DROPCLIENT, which I've attached from the "License Server Administrative Guide".
The REST API is a DELETE operation
https://flexXXXX.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/clients/{Id}
where Id at the end identifies the client from api/1.0/instances/XXXXXXXXXXXX/clients
Hi
By the same token is there a way to get this another way like using "lmutil lmstat [-c] <blah> "
Or maybe do the API calls through curl. If so could you let me know the curl URL.
Cheers,
Hi @ertugrul ,
Apologies for the delayed response due to travel and holiday and travel and did I say travel? 😉
cURL to delete clients looks feasible based upon the documentation. There is one example (not your use case though) in attachments.
The command to delete (spitballing)
curl -X DELETE --url licenseServer_baseURL/clients/{id}
Hmmmm dreaming of Travel and Holidays here 🙂
I tried example "curl -X GET --url https://flex[blah]-uat.compliance.flexnetoperations.com/api/1.0/instances/[blahblah]/version "
and guess what ... voila it worked.. I get a response
(✿◠‿◠) ... ѽ͜ (ᵔ ̮ ᵔ)›
However.. I got more questions now:) on your previous response you said first I need to authorize, and then I can list the features.. I'm stuck on authorizing.. so the url and the endpoint, I got figured.
--
3. Authorize - https://flexXXXX.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/authorize using a body:
{
"user":"admin",
"password":"PasswordFromStep2Above"
}
where XXXXXXXXXXXX is your unique CLS ID
4. Features - https://flexxxxx.compliance.flexnetoperations.com/api/1.0/instances/XXXXXXXXXXXX/features
----
here is what I tried :
curl -X GET --url https://flex[blah]-uat.compliance.flexnetoperations.com/api/1.0/instances/[blahblah]/features
{
"key" : "glsErr.userAccessDenied",
"message" : "Access denied to uri=/GlobalLicensingService/api/1.0/instances/[blahblah]/features for user (unknown)",
"arguments" : [ "uri=/GlobalLicensingService/api/1.0/instances/[blahblah]/features", "(unknown)" ]
}
that's fair! you want to get to know me before you talk to me.. 🙂
---- to authorize I tried :
curl -i -H "Accept: application/json" -H "X-HTTP-Method-Override: PUT" -X PUT -d"user":"usernamex","password":"open sesame " --url https://flex[blah]-uat.compliance.flexnetoperations.com/api/1.0/instances/[blahblah]/authorize
and I get no response.
-- I tried also
curl -i --header "Content-Type: application/json" --request POST --data '{"user":"itsme","password":"opensesame"}' https://flex[blah]-uat.compliance.flexnetoperations.com/api/1.0/instances/[blahblah]/authorize
still no luck , they get no response and if I try ../features I get user access denied. So /authorize did not work.
I am guessing I have not gotten the curl parameters right. If you have any insight please ...
Cheers, and thanks again.
PS. Also could you let me know how I can find the REST API manual. I am searching the documents haven't found it yet.
Looks very close @ertugrul and thank you for the detail.
1. Go into the entitled user of the account and enabled the 'Portal Admin User' role.
2. Log into the Customer Portal using the Portal Admin Role above.
3. Navigate and find the CLS Server ID, and click it.
4. Under the button menu pull-down 'Action', select "Set Password".
5. Set Password - e.g. MyPassword1!
6. Use Password from step 5 above in your cURL authorization.
P.S. And hope your holiday comes soon !
And we are really close..
I am using the password I entered however I get.
{
"key" : "glsErr.userAuthFailed",
"message" : "Authorization attempt at uri=/GlobalLicensingService/api/1.0/instances/[blahblah]/authorize failed for user userx@gmail.com (error BadCredentialsException(Bad credentials))",
"arguments" : [ "uri=/GlobalLicensingService/api/1.0/instances/[blahblah]/authorize", "userx@gmail.com", "BadCredentialsException", "Bad credentials" ] }
so I'm close.. really close
I just set the password, maybe it takes time?
Hello @ertugrul ,
The password you set for the Cloud License Server in the Customer Portal is for the user "admin". Please use "admin" instead of userx@gmail.com to authorize.
Thanks,
Hi @ertugrul ,
Did some more digging into using curl to authorize. This format worked:
"expires" : "2019-09-28T12:24:43.258Z",
"token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlzcyI6IkNVTDY4TUhaWEFVRCIsImlhdCI6MTU2OTU4NzA4MywiZXhwIjoxNTY5NjczNDgzLCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6ImEyNGY3Zjg0LWU3YmEtNDBmZC05ZThiLTQ0YWNlMTY0ZTcxOCJ9.AB1SaFitfnPUwbsKDG8uNXBUGSUtkzcPsyTwNrODDe1BvX3IaKn7gPWIobHCXp_ZBtiqRPek5YuPGA04ERJrNx"
}
Ok that was the trick, you have to use username "admin" no matter what the actually username is.
so I got the bearer token and used it to get the features
-------<<
curl -k -X GET -H "Content-Type:application/json" -H "Authorization: Bearer BIGBEARGOODBEARVTQTJLRiIsImlhdCI6MTU2OTYwMzUzNSwiZXhwIjoxNTY5Njg5OTM1LCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6IjljOGMwNDJjLWNmOWMtNGM1NS1hYTc4LTc5MTIzM2QyNTJmZSJ9.3nmdhS-JXq1OVREcXQuOy-Bg1rF-Ilhcd1ZtjgzVgnwagKrgqMeSCEYl-0bCMnIsDBIGBROWNBEAR" https://flex[blah]-uat.compliance.flexnetoperations.com/api/1.0/instances/[blahblah]/features
[ {
"id" : 656312,
"type" : "CONCURRENT",
"featureName" : "prideauthor",
"featureVersion" : "7.0",
"expiry" : "2019-09-30",
"featureCount" : 2,
"overdraftCount" : 0,
"used" : 0,
"vendorString" : "TRACLabs",
"issuer" : "TRACLabs",
"issued" : "2019-09-12",
"borrowInterval" : 604800,
"renewInterval" : 20,
"featureId" : "21rk-b6ze3",
"starts" : "2019-09-05",
"featureKind" : "NORMAL_FEATURE",
"vendor" : "TRACLABS",
"meteredUndoInterval" : 0,
"meteredReusable" : false,
"receivedTime" : "2019-09-13T00:15:11.000Z",
"concurrent" : true,
"metered" : false,
"uncounted" : false,
"uncappedOverdraft" : false,
"reserved" : 0
}
---->>>>
How do I get the Devices served by this server, (like when you go to > Devices > Device > View >ViewServed Devices ) this will get you all the licenses that are checked out.
What I am trying to do is, find a list of all licenses checked out. Then find active ones (that is count > 0 ) and then force that license to release back to pool.
We are aware (Eric stated that this could lead to leak of authorized licenses.) But as long as we somehow find a way to get a notification when this is done. We are ok.
I am still trying to get the REST API documentation located and downloaded.
Thanks again for all the help! Really appreciate it.
Hi @ertugrul ,
Glad to hear you were able to successfully view the features. You definitely need the referenced License Server Producer Guide to get access to the REST API documentation as it has the information you are requesting.
If you look at your response from /features you will see that each licensed feature has an associated id. You can then use that id to see all devices/clients which currently have a license for that feature. To do this send the request to /features/{featureid}/clients. Here's an example request & response for devices which have a license for a feature with id 179837:
curl -k -X GET -H "Content-type:application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlzcyI6IkNVTDY4TUhaWEFVRCIsImlhdCI6MTU2OTU4NzA4MywiZXhwIjoxNTY5NjczNDgzLCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6ImEyNGY3Zjg0LWU3YmEtNDBmZC05ZThiLTQ0YWNlMTY0ZTcxOCJ9.AB1SaFitfnPUwbsKDG8uNXBUGSUtkzcPsyTwNrODDe1BvX3IaKn7gPWIobHCXp_ZBtiqRPek5YuPGA04ERJrNx" https://flexNNNN.compliance.flexnetoperations.com/api/1.0/instances/yourCLSID/features/179837/clients
[ {
"id" : 967863608,
"usageKind" : "CONCURRENT_USAGE",
"client" : {
"id" : 441852507,
"hostid" : {
"hostidValue" : "MyDevice1",
"hostidType" : "STRING"
},
"updateTime" : "2019-09-27T17:31:21.918Z",
"servedStatus" : "NORMAL",
"hostType" : "FLX_CLIENT",
"machineType" : "PHYSICAL",
"trusted" : false,
"correlationId" : "d6e10cea-bacc-4f8d-8ab9-533e6c34d595",
"collectedHostIds" : "STRING MyDevice1",
"requestOperation" : "REQUEST",
"requestHostid" : {
"hostidValue" : "MyDevice1",
"hostidType" : "STRING"
},
"serverHostid" : {
"hostidValue" : "CUL68MHZXAUD",
"hostidType" : "STRING"
},
"expiry" : "2019-10-04T17:31:21.918Z"
},
"useCount" : 1,
"reservedCount" : 0
} ]
The response contains id(s) for all clients with this license feature. To return a license for a given client, you will want to send a DELETE to the /clients/{deviceid} endpoint. Here's an example:
curl -k -X DELETE -H "Content-type:application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImlzcyI6IkNVTDY4TUhaWEFVRCIsImlhdCI6MTU2OTU4NzA4MywiZXhwIjoxNTY5NjczNDgzLCJyb2xlcyI6IlJPTEVfQURNSU4sUk9MRV9EUk9QQ0xJRU5ULFJPTEVfUkVBRCxST0xFX1JFU0VSVkFUSU9OUyIsInhzcmZUb2tlbiI6ImEyNGY3Zjg0LWU3YmEtNDBmZC05ZThiLTQ0YWNlMTY0ZTcxOCJ9.AB1SaFitfnPUwbsKDG8uNXBUGSUtkzcPsyTwNrODDe1BvX3IaKn7gPWIobHCXp_ZBtiqRPek5YuPGA04ERJrNx" https://flexNNNN.compliance.flexnetoperations.com/api/1.0/instances/yourCLSID/clients/441852507
The license for this client is now returned to the server license pool.
Note you have the ability to set a policy on the server to determine how frequently devices can be deleted to prevent "dishonest" users from trying to overuse licenses above their entitled quantity.
Best regards,
many thanks!
instead of:
[blah]/features/656312/clients/151451699
it was:
[blah]/clients/151451699
it worked!
I thought I tried that as well but I must have had something incorrect.. So I have done everything I wanted!
Now I need to set the policy to get a notification when they do this. If you can point me to the documentation location for this, I would be set 🙂
(。◕‿◕。)
(づ。◕‿‿◕。)づ
Hi @ertugrul,
Please refer to the FNE License Server Administration Guide and search for the licensing.dropClientEnforcedDelay policy setting.
Description:
The delay that is enforced between client deletion requests. This value can be specified with an optional unit-suffix letter—s, m, h, d, or w—indicating seconds, minutes, hours, days, or weeks. If no suffix is used, the server assumes the value is in seconds. This setting can also be used to disallow the deletion of clients; in this case, set the value DROP_CLIENT_DISALLOWED. (Default is 0s, meaning deleting client records is allowed and there is no enforced delay between deletions.)
You can use this to set the policy, however there is no automated notification following the DELETE.
Best regards,
Hello @ertugrul,
One last note, just so you are aware there are also a set of "producer" credentials that can be used to access all your customer CLS instances (instead of using "admin" credentials and individual passwords to each CLS instance). Currently the password for "producer" needs to be configured by Flexera. If you should need to set the password for the "producer" user please submit a ticket. In a future release you will be able to set this password yourself (with System Administrator permissions).
Thanks,
Hi
I located that page but the example is given for local FNE license server.
Is there any documentation that shows how to navigate to it at Cloud License Server (flexnetoperations.com)
I am going through documentation and trying to find it.
Cheers