Improve handling and display of licenses

- displayName added so what admin sees better matches admin console
 - better aliases for each skuId
 - admin can specify exact productId they wanted (would have solved renaming of Enterprise SKU issue)
This commit is contained in:
Jay Lee
2017-02-09 09:35:54 -05:00
parent 4450652c32
commit 35854af1e9
2 changed files with 38 additions and 23 deletions

View File

@@ -4352,7 +4352,7 @@ def getImap(users):
def getProductAndSKU(sku):
product = None
l_sku = sku.lower()
l_sku = sku.lower().replace(u'-', u'').replace(u' ', u'')
for a_sku, sku_values in SKUS.items():
if l_sku == a_sku.lower() or l_sku in sku_values[u'aliases']:
sku = a_sku
@@ -4369,22 +4369,29 @@ def doLicense(users, operation):
lic = buildGAPIObject(u'licensing')
sku = sys.argv[5]
productId, skuId = getProductAndSKU(sku)
i = 6
if len(sys.argv) > 6 and sys.argv[i].lower() in [u'product', u'productid']:
productId = sys.argv[i+1]
i += 2
for user in users:
if user.find(u'@') == -1:
user = u'%s@%s' % (user, GC_Values[GC_DOMAIN])
if operation == u'delete':
print u'Removing license %s from user %s' % (_skuIdToDisplayName(skuId), user)
callGAPI(lic.licenseAssignments(), operation, soft_errors=True, productId=productId, skuId=skuId, userId=user)
elif operation == u'insert':
print u'Adding license %s to user %s' % (_skuIdToDisplayName(skuId), user)
callGAPI(lic.licenseAssignments(), operation, soft_errors=True, productId=productId, skuId=skuId, body={u'userId': user})
elif operation == u'patch':
try:
old_sku = sys.argv[6]
old_sku = sys.argv[i]
if old_sku.lower() == u'from':
old_sku = sys.argv[7]
old_sku = sys.argv[i+1]
except KeyError:
print u'ERROR: You need to specify the user\'s old SKU as the last argument'
sys.exit(2)
_, old_sku = getProductAndSKU(old_sku)
print u'Changing user %s from license %s to %s' % (user, _skuIdToDisplayName(old_sku), _skuIdToDisplayName(skuId))
callGAPI(lic.licenseAssignments(), operation, soft_errors=True, productId=productId, skuId=old_sku, userId=user, body={u'skuId': skuId})
def doPop(users):
@@ -7700,8 +7707,14 @@ def doGetUserInfo(user_email=None):
lbatch.add(lic.licenseAssignments().get(userId=user_email, productId=productId, skuId=skuId, fields=u'skuId'))
lbatch.execute()
for user_license in user_licenses:
print ' %s' % user_license
print ' %s' % _skuIdToDisplayName(user_license)
def _skuIdToDisplayName(skuId):
try:
return SKUS[skuId][u'displayName']
except KeyError:
return skuId
def doGetGroupInfo(group_name=None):
cd = buildGAPIObject(u'directory')
gs = buildGAPIObject(u'groupssettings')
@@ -9471,6 +9484,8 @@ def doPrintLicenses(return_list=False, skus=None):
except googleapiclient.errors.HttpError:
pass
for u_license in licenses:
if u'skuId' in u_license:
u_license[u'skuId'] = _skuIdToDisplayName(u_license[u'skuId'])
a_license = {}
for title in u_license:
if title in [u'kind', u'etags', u'selfLink']:

View File

@@ -42,43 +42,43 @@ FN_OAUTH2_TXT = u'oauth2.txt'
MY_CUSTOMER = u'my_customer'
SKUS = {
u'Google-Apps-For-Business': {
u'product': u'Google-Apps', u'aliases': [u'gafb', u'gafw', u'basic', u'gsuite-basic']},
u'product': u'Google-Apps', u'aliases': [u'gafb', u'gafw', u'basic', u'gsuitebasic'], u'displayName': u'G Suite Basic'},
u'Google-Apps-For-Government': {
u'product': u'Google-Apps', u'aliases': [u'gafg', u'gsuite-government']},
u'product': u'Google-Apps', u'aliases': [u'gafg', u'gsuitegovernment', u'gsuitegov'], u'displayName': u'G Suite Government'},
u'Google-Apps-For-Postini': {
u'product': u'Google-Apps', u'aliases': [u'gams', u'postini', u'gsuite-gams']},
u'product': u'Google-Apps', u'aliases': [u'gams', u'postini', u'gsuitegams', u'gsuitepostini', u'gsuitemessagesecurity'], u'displayName': u'G Suite Message Security'},
u'Google-Apps-Lite': {
u'product': u'Google-Apps', u'aliases': [u'gal', u'lite', u'gsuite-lite']},
u'product': u'Google-Apps', u'aliases': [u'gal', u'lite', u'gsuitelite'], u'displayName': u'G Suite Lite'},
u'Google-Apps-Unlimited': {
u'product': u'Google-Apps', u'aliases': [u'gau', u'unlimited', u'gsuite-business']},
u'product': u'Google-Apps', u'aliases': [u'gau', u'unlimited', u'gsuitebusiness'], u'displayName': u'G Suite Business'},
u'1010020020': {
u'product': u'Google-Apps', u'aliases': [u'gae', u'enterprise', u'gsuite-enterprise']},
u'product': u'Google-Apps', u'aliases': [u'gae', u'enterprise', u'gsuiteenterprise'], u'displayName': u'G Suite Enterprise'},
u'Google-Drive-storage-20GB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-20gb', u'drive20gb', u'20gb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive20gb', u'20gb', u'googledrivestorage20gb'], u'displayName': u'Google Drive Storage 20GB'},
u'Google-Drive-storage-50GB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-50gb', u'drive50gb', u'50gb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive50gb', u'50gb', u'googledrivestorage50gb'], u'displayName': u'Google Drive Storage 50GB'},
u'Google-Drive-storage-200GB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-200gb', u'drive200gb', u'200gb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive200gb', u'200gb', u'googledrivestorage200gb'], u'displayName': u'Google Drive Storage 200GB'},
u'Google-Drive-storage-400GB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-400gb', u'drive400gb', u'400gb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive400gb', u'400gb', u'googledrivestorage400gb'], u'displayName': u'Google Drive Storage 400GB'},
u'Google-Drive-storage-1TB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-1tb', u'drive1tb', u'1tb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive1tb', u'1tb', u'googledrivestorage1tb'], u'displayName': u'Google Drive Storage 1TB'},
u'Google-Drive-storage-2TB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-2tb', u'drive2tb', u'2tb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive2tb', u'2tb', u'googledrivestorage2tb'], u'displayName': u'Google Drive Storage 2TB'},
u'Google-Drive-storage-4TB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-4tb', u'drive4tb', u'4tb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive4tb', u'4tb', u'googledrivestorage4tb'], u'displayName': u'Google Drive Storage 4TB'},
u'Google-Drive-storage-8TB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-8tb', u'drive8tb', u'8tb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive8tb', u'8tb', u'googledrivestorage8tb'], u'displayName': u'Google Drive Storage 8TB'},
u'Google-Drive-storage-16TB': {
u'product': u'Google-Drive-storage', u'aliases': [u'drive-16tb', u'drive16tb', u'16tb']},
u'product': u'Google-Drive-storage', u'aliases': [u'drive16tb', u'16tb', u'googledrivestorage16tb'], u'displayName': u'Google Drive Storage 16TB'},
u'Google-Vault': {
u'product': u'Google-Vault', u'aliases': [u'vault']},
u'product': u'Google-Vault', u'aliases': [u'vault', u'googlevault'], u'displayName': u'Google Vault'},
u'Google-Vault-Former-Employee': {
u'product': u'Google-Vault', u'aliases': [u'vfe']},
u'product': u'Google-Vault', u'aliases': [u'vfe', u'googlevaultformeremployee'], u'displayName': u'Google Vault Former Employee'},
u'Google-Coordinate': {
u'product': u'Google-Coordinate', u'aliases': [u'coordinate']},
u'product': u'Google-Coordinate', u'aliases': [u'coordinate', u'googlecoordinate'], u'displayName': u'Google Coordinate'},
u'Google-Chrome-Device-Management': {
u'product': u'Google-Chrome-Device-Management', u'aliases': [u'chrome', u'cdm']}
u'product': u'Google-Chrome-Device-Management', u'aliases': [u'chrome', u'cdm', u'googlechromedevicemanagement'], u'displayName': u'Google Chrome Device Management'}
}
API_VER_MAPPING = {