plugins/modules/ali_market_product_info.py (182 lines of code) (raw):
#!/usr/bin/python
# Copyright (c) 2017-present Alibaba Group Holding Limited. <xiaozhu36>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}
DOCUMENTATION = '''
---
module: ali_market_product_info
short_description: Gather info on Market product of Alibaba Cloud.
description:
- Gather info on Market product of Alibaba Cloud.
options:
name_prefix:
description:
- Use a product name prefix to filter products.
type: str
search_term:
description:
- Search term in this query.
type: str
sort:
description:
- This field determines how to sort the filtered results.
choices: ['user_count-desc', 'created_on-desc', 'price-desc', 'score-desc']
type: str
category_id:
description:
- The Category ID of products. For more information. see more (https://help.aliyun.com/document_detail/89834.htm).
type: str
product_type:
description:
- The type of products.
choices: ["APP", "SERVICE", "MIRROR", "DOWNLOAD", "API_SERVICE"]
type: str
suggested_price:
description:
- The suggested price of the product.
type: float
supplier_id:
description:
- The supplier id of the product.
type: str
supplier_name_keyword:
description:
- The supplier name keyword of the product.
type: str
ids:
description:
- A list of product code.
type: list
elements: str
author:
- "He Guimin (@xiaozhu36)"
requirements:
- "python >= 3.6"
- "footmark >= 1.18.0"
extends_documentation_fragment:
- alibaba.alicloud.alicloud
'''
EXAMPLES = '''
# Note: These examples do not set authentication details, see the Alibaba Cloud Guide for details.
- name: Search products
alibaba.alicloud.ali_market_product_info:
search_term: 'YourSearchTerm'
product_type: MIRROR
category_id: '53616009'
suggested_price: 0
'''
RETURN = '''
products:
description: A list of product.
returned: always
type: complex
contains:
code:
description: The code of the product.
returned: always
type: str
sample: cmjj016644
name:
description: The name of the product.
returned: always
type: str
sample: WordPress博客环境(Centos6.8 64位 )
score:
description: The score of the product.
returned: always
type: float
sample: 4.7
short_description:
description: The short description of the product.
returned: always
type: str
sample: "集成Nginx1.13、PHP5.6、PHPMYADMIN4.6.6、MySQL 5.6.34、WordPress4.7.3"
type:
description: The type of the product.
returned: always
type: str
sample: MIRROR
images:
description: The type of the product.
returned: always
type: list
contains:
- display_name:
description: The display name of image.
returned: always
type: str
sample: 华北 1_V1.1
- type:
description: The type of the image.
returned: always
type: str
sample: single_string
- value:
description: The id of image.
returned: always
type: str
sample: m-2ze0ua7jvif73kxxxxx
'''
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.alicloud_ecs import ecs_argument_spec, market_connect, ecs_connect
HAS_FOOTMARK = False
try:
from footmark.exception import MARKETResponseError
HAS_FOOTMARK = True
except ImportError:
HAS_FOOTMARK = False
def main():
argument_spec = ecs_argument_spec()
argument_spec.update(dict(
name_prefix=dict(typr='str'),
search_term=dict(type='str'),
sort=dict(type='str', choices=['user_count-desc', 'created_on-desc', 'price-desc', 'score-desc']),
category_id=dict(type='str'),
product_type=dict(type='str', choices=["APP", "SERVICE", "MIRROR", "DOWNLOAD", "API_SERVICE"]),
suggested_price=dict(type='float'),
supplier_id=dict(type='str'),
supplier_name_keyword=dict(type='str'),
ids=dict(typr='list', elements='str')
)
)
module = AnsibleModule(argument_spec=argument_spec)
if HAS_FOOTMARK is False:
module.fail_json(msg="Package 'footmark' required for this module.")
Filters = []
if module.params['sort']:
Filters.append({'Key': 'sort', 'Value': module.params['sort']})
if module.params['product_type']:
Filters.append({'Key': 'productType', 'Value': module.params['product_type']})
if module.params['category_id']:
Filters.append({'Key': 'categoryId', 'Value': module.params['category_id']})
if Filters:
module.params['Filters'] = Filters
name_prefix = module.params['name_prefix']
suggested_price = module.params['suggested_price']
supplier_id = module.params['supplier_id']
supplier_name_keyword = module.params['supplier_name_keyword']
ids = module.params['ids']
products = []
region_local_name = ""
for region in ecs_connect(module).describe_regions():
if region.id == module.params['alicloud_region']:
region_local_name = region.name
try:
for product in market_connect(module).describe_products(**module.params):
if name_prefix and not product.name.startswith(name_prefix):
continue
if supplier_id and str(product.supplier_id) != supplier_id:
continue
if supplier_name_keyword and product.supplier_name_keyword.find(supplier_name_keyword) == -1:
continue
if (suggested_price or suggested_price == 0) and not product.suggested_price.startswith(str(suggested_price).replace('.0', '') if str(suggested_price).endswith('.0') else str(suggested_price)):
continue
if ids and product.code not in ids:
continue
products.append(product.get().read_with_region_name(region_local_name))
module.exit_json(changed=False, products=products)
except Exception as e:
module.fail_json(msg=str("Unable to get products, error:{0}".format(e)))
if __name__ == '__main__':
main()