Skip to content

Commit

Permalink
Merge pull request #2 from segadson/avns
Browse files Browse the repository at this point in the history
updated avns
  • Loading branch information
segadson authored Jun 22, 2024
2 parents 0535377 + 703c0cb commit 29e2992
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 104 deletions.
156 changes: 75 additions & 81 deletions plugins/modules/sddc_manager_avns.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,57 +77,78 @@
'''

#Todo Documentation
class SDDCManagerAVNS:
def __init__(self, module):
self.module = module
self.sddc_manager_ip = module.params['sddc_manager_ip']
self.sddc_manager_user = module.params['sddc_manager_user']
self.sddc_manager_password = module.params['sddc_manager_password']
self.avns_payload = module.params['avns_payload']
self.operation = module.params['operation']
self.management_edge_cluster_name = module.params['management_edge_cluster_name']

def get_edge_cluster_by_name(self):
try:
api_client = SddcManagerApiClient(self.sddc_manager_ip, self.sddc_manager_user, self.sddc_manager_password)
api_response = api_client.get_edge_clusters()
edge_clusters = api_response.data
except Exception as e:
self.module.fail_json(msg=f"Error: {e}")
for edge_cluster in edge_clusters['elements']:
if edge_cluster['name'] == self.management_edge_cluster_name:
return edge_cluster
return None

def create_avns(self):
edge_cluster = self.get_edge_cluster_by_name()
if edge_cluster is None:
self.module.fail_json(msg=f"Edge cluster {self.management_edge_cluster_name} not found")

edge_cluster_id = edge_cluster['id']
self.avns_payload['edgeClusterId'] = edge_cluster_id
try:
api_client = SddcManagerApiClient(self.sddc_manager_ip, self.sddc_manager_user, self.sddc_manager_password)
api_response = api_client.create_avns(json.dumps(self.avns_payload))
payload_data = api_response.data
return payload_data
except VcfAPIException as e:
self.module.fail_json(msg=f"Error: {e}")

def get_edge_cluster_by_name(sddc_manager_ip, sddc_manager_user, sddc_manager_password, edge_cluster_name):
api_client = SddcManagerApiClient(sddc_manager_ip, sddc_manager_user, sddc_manager_password)
api_response = api_client.get_edge_clusters()
edge_clusters = api_response.data
#print(type(edge_clusters)) # Check the type of edge_clusters
#print(edge_clusters) # Check the value of edge_clusters
for edge_cluster in edge_clusters['elements']: # Access the 'elements' key of the dictionary
#print(type(edge_cluster)) # Check the type of each edge_cluster
#print(edge_cluster) # Check the value of each edge_cluster
if edge_cluster['name'] == edge_cluster_name:
return edge_cluster
return None
def check_avn_current_operation(sddc_manager_ip, sddc_manager_user, sddc_manager_password):
api_client = SddcManagerApiClient(sddc_manager_ip, sddc_manager_user, sddc_manager_password)
api_response = api_client.get_avns()
payload_data = api_response.data
return payload_data

def create_avns_(sddc_manager_ip, sddc_manager_user, sddc_manager_password, avns_payload):
payload_data = avns_payload
try:
api_client = SddcManagerApiClient(sddc_manager_ip, sddc_manager_user, sddc_manager_password)
api_response = api_client.create_avns(payload_data)
payload_data = api_response.data
return payload_data
except VcfAPIException as e:
raise VcfAPIException(f"Error: {e}")

#Mimic This
# try:
# api_client = SddcManagerApiClient(sddc_manager_ip, sddc_manager_user, sddc_manager_password)
# api_response = api_client.validate_domains(json.dumps(updated_workload_domain_payload))
# payload_data = api_response.data
# response = evaluate_response(payload_data)
# if response['message'] == "Successful":
# module.exit_json(changed=False, meta=payload_data)
# else:
# module.fail_json(msg="Workload Domain Validation Has Failed", meta=response)
# except Exception as e:
# module.fail_json(msg="Failed to validate workload domain: " + str(e))
def validate_avns_(sddc_manager_ip, sddc_manager_user, sddc_manager_password, avns_payload):
payload_data = avns_payload
try:
api_client = SddcManagerApiClient(sddc_manager_ip, sddc_manager_user, sddc_manager_password)
api_response = api_client.validate_avns(payload_data)
payload_data = api_response.data
#print(f"Payload Data: {payload_data}")
return payload_data
except VcfAPIException as e:
raise VcfAPIException(f"Error: {e}")
def validate_avns(self):
edge_cluster = self.get_edge_cluster_by_name()
if edge_cluster is None:
self.module.fail_json(msg=f"Edge cluster {self.management_edge_cluster_name} not found")

edge_cluster_id = edge_cluster['id']
self.avns_payload['edgeClusterId'] = edge_cluster_id
try:
api_client = SddcManagerApiClient(self.sddc_manager_ip, self.sddc_manager_user, self.sddc_manager_password)
api_response = api_client.validate_avns(json.dumps(self.avns_payload))
payload_data = api_response.data
return payload_data
except VcfAPIException as e:
self.module.fail_json(msg=f"Error: {e}")

def run(self):
edge_cluster = self.get_edge_cluster_by_name()
if edge_cluster is None:
self.module.fail_json(msg=f"Edge cluster {self.management_edge_cluster_name} not found")

edge_cluster_id = edge_cluster['id']
self.avns_payload['edgeClusterId'] = edge_cluster_id

if self.operation == 'create':
try:
payload_data = self.create_avns()
self.module.exit_json(changed=True, meta=payload_data)
except Exception as e:
self.module.fail_json(msg=f"Error: {e}")
elif self.operation == 'validate':
try:
payload_data = self.validate_avns()
self.module.exit_json(changed=True, meta=payload_data)
except Exception as e:
self.module.fail_json(msg=f"Error: {e}")

def main():
parameters = dict(
Expand All @@ -136,39 +157,12 @@ def main():
sddc_manager_password=dict(type='str', required=True, no_log=True),
avns_payload=dict(type='dict', required=True),
operation=dict(type='str', choices=['create', 'validate'], default='create'),
management_edge_cluster_name = dict(type='str', required=True)
management_edge_cluster_name=dict(type='str', required=True)
)

module = AnsibleModule(supports_check_mode=True, argument_spec=parameters)
sddc_manager_ip = module.params['sddc_manager_ip']
sddc_manager_user = module.params['sddc_manager_user']
sddc_manager_password = module.params['sddc_manager_password']
operation = module.params['operation']
avns_payload = module.params['avns_payload']
management_edge_cluster_name = module.params['management_edge_cluster_name']

edge_cluster = get_edge_cluster_by_name(sddc_manager_ip, sddc_manager_user, sddc_manager_password, management_edge_cluster_name)
if edge_cluster is None:
module.fail_json(msg=f"Edge cluster {management_edge_cluster_name} not found")

edge_cluster_id = edge_cluster['id']
avns_payload['edgeClusterId'] = edge_cluster_id

if operation == 'create':
try:
#print("Creating AVNs-Yes")
payload_data = create_avns_(sddc_manager_ip, sddc_manager_user, sddc_manager_password, json.dumps(avns_payload))
module.exit_json(changed=True, meta=payload_data)
except VcfAPIException as e:
module.fail_json(msg=f"Error: {e}")
elif operation == 'validate':
#print("Validating-Yes")
try:
payload_data = validate_avns_(sddc_manager_ip, sddc_manager_user, sddc_manager_password, json.dumps(avns_payload))
#print(f"Payload Data: {payload_data}")
module.exit_json(changed=True, meta=payload_data)
except VcfAPIException as e:
module.fail_json(msg=f"Error: {e}")
module = AnsibleModule(argument_spec=parameters, supports_check_mode=True)
sddc_manager_avns = SDDCManagerAVNS(module)
sddc_manager_avns.run()

if __name__ == '__main__':
main()
47 changes: 24 additions & 23 deletions roles/create_avns/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,48 +7,49 @@
avns_payload: "{{ avns_payload }}"
management_edge_cluster_name: "{{ management_edge_cluster_name }}"
operation: validate
register: result
register: avn_validation_response

- name: Check if task completed
debug:
msg: "Task completed"
when: result.meta.executionStatus == 'COMPLETED'
- set_fact:
task_id: "{{ result.meta.id }}"
- name: Debug output
debug:
var: result
- name: Check task execution status
block:
- name: Debug success message
debug:
msg: "Task {{ avn_validation_response.meta.resultStatus }}"
when: avn_validation_response.meta.resultStatus == 'SUCCEEDED'


- name: Validate AVNs
- name: Fail the task if execution status is FAILED
fail:
msg: "Task execution failed"
when: avn_validation_response.meta.executionStatus == 'FAILED'
when: avn_validation_response.meta.resultStatus in ['SUCCEEDED', 'FAILED']

- name: Create AVNs
sddc_manager_avns:
sddc_manager_ip: "{{ sddc_manager_ip }}"
sddc_manager_user: "{{ sddc_manager_username }}"
sddc_manager_user: "{{ sddc_manager_username }}" # Ensure consistent variable naming
sddc_manager_password: "{{ sddc_manager_password }}"
avns_payload: "{{ avns_payload }}"
management_edge_cluster_name: "{{ management_edge_cluster_name }}"
operation: create
register: result
register: avns_created_response

- set_fact:
task_id: "{{ result.meta.id }}"
- name: Debug output
debug:
var: result
var: avns_created_response

- name: Wait for AVNs to be ready
- name: Check AVNs Creation Status
sddc_manager_tasks_status:
sddc_manager_ip: "{{ sddc_manager_ip }}"
sddc_manager_user: "{{ sddc_manager_username }}"
sddc_manager_password: "{{ sddc_manager_password }}"
tasks_id: "{{ task_id }}"
tasks_id: "{{ avns_created_response.id }}" # Assuming task_id comes from avns_created_response
sddc_manager_tasks_type: avns
validation: False
register: result
until: result.meta.status == 'Successful' or result.meta.status == 'Failed'
register: avns_created_tasks_status
until: avns_created_tasks_status.meta.status in ['Successful', 'Failed'] # Simplified condition
retries: 60
delay: 10
failed_when: result.meta.status == "Failed"
failed_when: avns_created_tasks_status.meta.status == "Failed" # Consistent error handling

- debug:
msg: "NSX AVNs Created"
msg: "NSX AVNs Created"
when: avns_created_tasks_status.meta.status == "Successful" # Explicit success message condition

0 comments on commit 29e2992

Please sign in to comment.