ansible-collections-openstack/plugins/modules/compute_flavor_info.py
Jakob Meng 1b38b7c500 Properly documented openstacksdk version requirements
With "extends_documentation_fragment: ['openstack.cloud.openstack']"
it is not necessary to list required Python libraries in section
'requirements' of DOCUMENTATION docstring in modules. Ansible will
merge requirements from doc fragments and DOCUMENTATION docstring
which previously resulted in duplicates such as in server module [0]:

* openstacksdk
* openstacksdk >= 0.36, < 0.99.0
* python >= 3.6

When removing the 'requirements' section from server module, then
Ansible will list openstacksdk once only:

* openstacksdk >= 0.36, < 0.99.0
* python >= 3.6

To see what documentation Ansible will produce for server module run:

  ansible-doc --type module openstack.cloud.server

[0] https://docs.ansible.com/ansible/latest/collections/openstack/\
    cloud/server_module.html

Change-Id: I727ed95ee480bb644b5a533f6a9526973677064c
2023-01-16 13:51:01 +01:00

202 lines
5.4 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright (c) 2015 IBM
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
DOCUMENTATION = r'''
---
module: compute_flavor_info
short_description: Fetch compute flavors from OpenStack cloud
author: OpenStack Ansible SIG
description:
- Fetch OpenStack compute flavors.
options:
ephemeral:
description:
- Filter flavors based on the amount of ephemeral storage.
- I(ephemeral) supports same format as I(ram) option.
type: str
limit:
description:
- Limits number of flavors to I(limit) results.
- By default all matching flavors are returned.
type: int
name:
description:
- Flavor name.
type: str
ram:
description:
- "A string used for filtering flavors based on the amount of RAM
(in MB) desired. This string accepts the following special values:
'MIN' (return flavors with the minimum amount of RAM), and 'MAX'
(return flavors with the maximum amount of RAM)."
- "A specific amount of RAM may also be specified. Any flavors with this
exact amount of RAM will be returned."
- "A range of acceptable RAM may be given using a special syntax. Simply
prefix the amount of RAM with one of these acceptable range values:
'<', '>', '<=', '>='. These values represent less than, greater than,
less than or equal to, and greater than or equal to, respectively."
type: str
vcpus:
description:
- Filter flavors based on the number of virtual CPUs.
- I(vcpus) supports same format as I(ram) option.
type: str
extends_documentation_fragment:
- openstack.cloud.openstack
'''
EXAMPLES = r'''
- name: Gather information about all available flavors
openstack.cloud.compute_flavor_info:
cloud: mycloud
- name: Gather information for the flavor named "xlarge-flavor"
openstack.cloud.compute_flavor_info:
cloud: mycloud
name: "xlarge-flavor"
- name: Get all flavors with 512 MB of RAM
openstack.cloud.compute_flavor_info:
cloud: mycloud
ram: "512"
- name: Get all flavors with >= 1024 MB RAM
openstack.cloud.compute_flavor_info:
cloud: mycloud
ram: ">=1024"
- name: Get a single flavor with minimum amount of RAM
openstack.cloud.compute_flavor_info:
cloud: mycloud
ram: "MIN"
limit: 1
- name: Get all flavors with >=1024 MB RAM and 2 vCPUs
openstack.cloud.compute_flavor_info:
cloud: mycloud
ram: ">=1024"
vcpus: "2"
- name: Get flavors with >= 1024 MB RAM 2 vCPUs and < 30gb ephemeral storage
openstack.cloud.compute_flavor_info:
cloud: mycloud
ram: ">=1024"
vcpus: "2"
ephemeral: "<30"
'''
RETURN = r'''
flavors:
description: List of dictionaries describing the compute flavors.
returned: always
type: list
elements: dict
contains:
description:
description: Description of the flavor
type: str
sample: "Small flavor"
disk:
description: Size of local disk, in GB.
type: int
sample: 10
ephemeral:
description: Ephemeral space size, in GB.
type: int
sample: 10
extra_specs:
description: Optional parameters to configure different flavors
options.
type: dict
sample: "{'hw_rng:allowed': True}"
id:
description: Flavor ID.
type: str
sample: "515256b8-7027-4d73-aa54-4e30a4a4a339"
is_disabled:
description: Wether the flavor is enabled or not
type: bool
sample: False
is_public:
description: Make flavor accessible to the public.
type: bool
sample: true
name:
description: Flavor name.
type: str
sample: "tiny"
original_name:
description: Original flavor name
type: str
sample: "tiny"
ram:
description: Amount of memory, in MB.
type: int
sample: 1024
rxtx_factor:
description: Factor to be multiplied by the rxtx_base property of
the network it is attached to in order to have a
different bandwidth cap.
type: float
sample: 1.0
swap:
description: Swap space size, in MB.
type: int
sample: 100
vcpus:
description: Number of virtual CPUs.
type: int
sample: 2
'''
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
class ComputeFlavorInfoModule(OpenStackModule):
argument_spec = dict(
ephemeral=dict(),
limit=dict(type='int'),
name=dict(),
ram=dict(),
vcpus=dict(),
)
module_kwargs = dict(
supports_check_mode=True
)
def run(self):
name = self.params['name']
filters = dict((k, self.params[k])
for k in ['ephemeral', 'ram', 'vcpus']
if self.params[k] is not None)
if name:
flavor = self.conn.compute.find_flavor(name)
flavors = [flavor] if flavor else []
else:
flavors = list(self.conn.compute.flavors())
if filters:
flavors = self.conn.range_search(flavors, filters)
limit = self.params['limit']
if limit is not None:
flavors = flavors[:limit]
self.exit_json(changed=False,
flavors=[f.to_dict(computed=False) for f in flavors])
def main():
module = ComputeFlavorInfoModule()
module()
if __name__ == '__main__':
main()