#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright (c) 2021, Cisco Systems
# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt)

DOCUMENTATION = r"""
---
module: lan_automation_v2
short_description: Resource module for Lan Automation V2
description:
- Manage operation create of the resource Lan Automation V2.
- >
   Invoke V2 LAN Automation Start API, which supports optional auto-stop processing feature based on the provided
   timeout or a specific device list, or both. The stop processing will be executed automatically when either of the
   cases is satisfied, without specifically calling the stop API. The V2 API behaves similarly to V1 if no timeout or
   device list is provided, and the user needs to call the stop API for LAN Automation stop processing. With the V2
   API, the user can also specify the level up to which the devices can be LAN automated.
version_added: '6.14.0'
extends_documentation_fragment:
  - cisco.dnac.module
author: Rafael Campos (@racampos)
options:
  payload:
    description: Lan Automation V2's payload.
    elements: dict
    suboptions:
      discoveredDeviceSiteNameHierarchy:
        description: Discovered device site name.
        type: str
      discoveryDevices:
        description: Lan Automation V2's discoveryDevices.
        elements: dict
        suboptions:
          deviceHostName:
            description: Hostname of the device.
            type: str
          deviceManagementIPAddress:
            description: Management IP Address of the device.
            type: str
          deviceSerialNumber:
            description: Serial number of the device.
            type: str
          deviceSiteNameHierarchy:
            description: "Site name hierarchy for the device, must be a child site of\
              \ the discoveredDeviceSiteNameHierarchy or same if it\u2019s not area\
              \ type."
            type: str
        type: list
      discoveryLevel:
        description: Level below primary seed device upto which the new devices will
          be LAN Automated by this session, level + seed = tier. Supported range for
          level is 1-5, default level is 2.
        type: int
      discoveryTimeout:
        description: Discovery timeout in minutes. Until this time, the stop processing
          will not be triggered. Any device contacting after the provided discovery
          timeout will not be processed, and a device reset and reload will be attempted
          to bring it back to the PnP agent state before process completion. The supported
          timeout range is in minutes 20-10080. If both timeout and discovery devices
          list are provided, the stop processing will be attempted whichever happens
          earlier. Users can always use the LAN Automation delete API to force stop
          processing.
        type: int
      hostNameFileId:
        description: Use /dna/intent/api/v1/file/namespace/nw_orch API to get the file
          ID for the already uploaded file in the nw_orch namespace.
        type: str
      hostNamePrefix:
        description: Host name prefix assigned to the discovered device.
        type: str
      ipPools:
        description: Lan Automation V2's ipPools.
        elements: dict
        suboptions:
          ipPoolName:
            description: Name of the IP pool.
            type: str
          ipPoolRole:
            description: Role of the IP pool. Supported roles are MAIN_POOL and PHYSICAL_LINK_POOL.
            type: str
        type: list
      isisDomainPwd:
        description: IS-IS domain password in plain text.
        type: str
      multicastEnabled:
        description: Enable underlay native multicast.
        type: bool
      peerDeviceManagmentIPAddress:
        description: Peer seed management IP address.
        type: str
      primaryDeviceInterfaceNames:
        description: The list of interfaces on primary seed via which the discovered
          devices are connected.
        elements: str
        type: list
      primaryDeviceManagmentIPAddress:
        description: Primary seed management IP address.
        type: str
      redistributeIsisToBgp:
        description: Advertise LAN Automation summary route into BGP.
        type: bool
    type: list
requirements:
- dnacentersdk >= 2.7.1
- python >= 3.5
seealso:
- name: Cisco DNA Center documentation for LAN Automation LANAutomationStartV2
  description: Complete reference of the LANAutomationStartV2 API.
  link: https://developer.cisco.com/docs/dna-center/#!l-an-automation-start-v-2
notes:
  - SDK Method used are
    lan_automation.LanAutomation.lan_automation_start_v2,

  - Paths used are
    post /dna/intent/api/v2/lan-automation,

"""

EXAMPLES = r"""
- name: Create
  cisco.dnac.lan_automation_v2:
    dnac_host: "{{dnac_host}}"
    dnac_username: "{{dnac_username}}"
    dnac_password: "{{dnac_password}}"
    dnac_verify: "{{dnac_verify}}"
    dnac_port: "{{dnac_port}}"
    dnac_version: "{{dnac_version}}"
    dnac_debug: "{{dnac_debug}}"
    payload:
    - discoveredDeviceSiteNameHierarchy: string
      discoveryDevices:
      - deviceHostName: string
        deviceManagementIPAddress: string
        deviceSerialNumber: string
        deviceSiteNameHierarchy: string
      discoveryLevel: 0
      discoveryTimeout: 0
      hostNameFileId: string
      hostNamePrefix: string
      ipPools:
      - ipPoolName: string
        ipPoolRole: string
      isisDomainPwd: string
      multicastEnabled: true
      peerDeviceManagmentIPAddress: string
      primaryDeviceInterfaceNames:
      - string
      primaryDeviceManagmentIPAddress: string
      redistributeIsisToBgp: true

"""
RETURN = r"""
dnac_response:
  description: A dictionary or list with the response returned by the Cisco DNAC Python SDK
  returned: always
  type: dict
  sample: >
    {
      "response": {
        "taskId": "string",
        "url": "string"
      },
      "version": "string"
    }
"""
