-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #14 from davidban77/develop
Bumping to 1.5.0
- Loading branch information
Showing
16 changed files
with
624 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
#!/usr/bin/env python | ||
|
||
ANSIBLE_METADATA = { | ||
"metadata_version": "1.1", | ||
"status": ["preview"], | ||
"supported_by": "community", | ||
} | ||
|
||
DOCUMENTATION = """ | ||
--- | ||
module: gns3_facts | ||
short_description: Module that retrieves the compute(s) information of a GNS3 server | ||
version_added: '2.8' | ||
description: | ||
- Module that retrieves the compute(s) information of a GNS3 server | ||
requirements: [ gns3fy ] | ||
author: | ||
- David Flores (@davidban77) | ||
options: | ||
url: | ||
description: | ||
- URL target of the GNS3 server | ||
required: true | ||
type: str | ||
port: | ||
description: | ||
- TCP port to connect to server REST API | ||
type: int | ||
default: 3080 | ||
user: | ||
description: | ||
- User to connect to GNS3 server | ||
type: str | ||
password: | ||
description: | ||
- Password to connect to GNS3 server | ||
type: str | ||
get_images: | ||
description: | ||
- If set it will also retrieve the images of the specified emulator unless | ||
- is set to 'all', in which case will retrieve from all emulators. For a | ||
- list of available emulators, visit the GNS3 API information | ||
type: str | ||
get_compute_ports: | ||
description: | ||
- If set it will retrieve the console_ports and udp_ports of the compute | ||
type: bool | ||
""" | ||
|
||
EXAMPLES = """ | ||
# Retrieves all the information from the computes of GNS3 server | ||
- name: Retrieve all the facts of a GNS3 server computes | ||
gns3_facts: | ||
url: http://localhost | ||
get_images: all | ||
get_compute_ports: yes | ||
register: computes_info | ||
- debug: var=computes_info | ||
# Retrieves only basic facts data of the GNS3 server computes | ||
- gns3_facts: | ||
url: http://localhost | ||
register: computes_info | ||
- debug: var=computes_info | ||
""" | ||
|
||
RETURN = """ | ||
compute_id: | ||
description: Server identifier | ||
type: str | ||
name: | ||
description: Server name | ||
type: str | ||
host: | ||
description: Server host | ||
type: str | ||
capabilities: | ||
description: Object that describes what the server supports | ||
type: dict | ||
connected: | ||
description: Whether the controller is connected to the compute or not | ||
type: bool | ||
cpu_usage_percent: | ||
description: CPU usage of the compute | ||
type: float | ||
memory_usage_percent: | ||
description: RAM usage of the compute | ||
type: int | ||
port: | ||
description: Server port | ||
type: int | ||
protocol: | ||
description: Protocol used (http, https) | ||
type: str | ||
user: | ||
description: User for authentication | ||
type: str | ||
last_error: | ||
description: Last error on the compute | ||
type: str | ||
images: | ||
description: Images configured on the compute depending on the emulator (optional) | ||
type: dict | ||
compute_ports: | ||
description: Ports used by the compute (console and udp ports) (optional) | ||
type: dict | ||
""" | ||
|
||
import traceback | ||
from ansible.module_utils.basic import AnsibleModule, missing_required_lib | ||
|
||
GNS3FY_IMP_ERR = None | ||
try: | ||
from gns3fy import Gns3Connector | ||
|
||
HAS_GNS3FY = True | ||
except Exception: | ||
HAS_GNS3FY = False | ||
GNS3FY_IMP_ERR = traceback.format_exc() | ||
|
||
|
||
def main(): | ||
module = AnsibleModule( | ||
argument_spec=dict( | ||
url=dict(type="str", required=True), | ||
port=dict(type="int", default=3080), | ||
user=dict(type="str", default=None), | ||
password=dict(type="str", default=None, no_log=True), | ||
get_images=dict(type="str", default=None), | ||
get_compute_ports=dict(type="bool", default=False), | ||
) | ||
) | ||
result = dict(changed=False) | ||
if not HAS_GNS3FY: | ||
module.fail_json(msg=missing_required_lib("gns3fy"), exception=GNS3FY_IMP_ERR) | ||
|
||
server_url = module.params["url"] | ||
server_port = module.params["port"] | ||
server_user = module.params["user"] | ||
server_password = module.params["password"] | ||
get_images = module.params["get_images"] | ||
get_compute_ports = module.params["get_compute_ports"] | ||
|
||
try: | ||
# Create server session | ||
server = Gns3Connector( | ||
url=f"{server_url}:{server_port}", user=server_user, cred=server_password | ||
) | ||
|
||
computes = server.get_computes() | ||
for compute in computes: | ||
|
||
# Images | ||
if get_images: | ||
compute["images"] = dict() | ||
|
||
if get_images == "all": | ||
for emulator in compute["capabilities"]["node_types"]: | ||
try: | ||
compute["images"][emulator] = server.get_compute_images( | ||
emulator=emulator, compute_id=compute["compute_id"] | ||
) | ||
except Exception as err: | ||
if "404" in str(err): | ||
# Contine if no image dir is set for that emulator | ||
continue | ||
else: | ||
compute["images"][get_images] = server.get_compute_images( | ||
emulator=get_images, compute_id=compute["compute_id"] | ||
) | ||
|
||
# Compute ports | ||
if get_compute_ports: | ||
compute["compute_ports"] = server.get_compute_ports( | ||
compute_id=compute["compute_id"] | ||
) | ||
|
||
result["facts"] = computes | ||
module.exit_json(**result) | ||
except Exception as err: | ||
module.fail_json(msg=str(err), **result) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.