Dre4m Shell
Server IP : 85.214.239.14  /  Your IP : 3.129.211.156
Web Server : Apache/2.4.62 (Debian)
System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.18
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /usr/lib/python3/dist-packages/ansible_collections/cisco/iosxr/plugins/modules/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /usr/lib/python3/dist-packages/ansible_collections/cisco/iosxr/plugins/modules/iosxr_bgp_global.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright 2021 Red Hat
# GNU General Public License v3.0+
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

"""
The module file for iosxr_bgp_global
"""

from __future__ import absolute_import, division, print_function


__metaclass__ = type

DOCUMENTATION = """
module: iosxr_bgp_global
short_description: Resource module to configure BGP.
description:
- This module configures and manages the attributes of BGP global on Cisco IOS-XR platforms.
version_added: 2.0.0
author: Ashwini Mhatre (@amhatre)
notes:
- This module works with connection C(network_cli).
options:
    config:
      description: A list of configurations for BGP global.
      type: dict
      suboptions:
        as_number:
          description: Autonomous system number of the router.
          type: str
        bfd: &bfd
          description: Configure BFD parameters.
          type: dict
          suboptions:
            minimum_interval: &min_interval
              description: Specifies the BFD session's minimum-interval value for the neighbor.
              type: int
            multiplier: &multiplier
              description: Specifies the BFD session's multiplier value for the neighbor.
              type: int
        bgp: &bgp
          description: BGP parameters.
          type: dict
          suboptions:
            as_path_loopcheck:
              description: Enable AS-path loop checking for iBGP peers.
              type: bool
            auto_policy_soft_reset: &auto_policy_soft_reset
              description: Enable automatic soft peer reset on policy reconfiguration.
              type: dict
              suboptions:
                disable:
                  description: Disable an automatic soft reset of Border Gateway Protocol (BGP) peers.
                  type: bool
            bestpath: &bestpath
              description: Select the bestpath selection algorithim for BGP routes.
              type: dict
              suboptions:
                as_path:
                  description: Select the bestpath selection based on as-path.
                  type: dict
                  suboptions:
                    ignore:
                      description: ignore
                      type: bool
                    multipath_relax:
                      description: multipath-relax
                      type: bool
                aigp:
                  description: AIGP attribute
                  type: dict
                  suboptions:
                    ignore:
                      description: Ignore AIGP attribute.
                      type: bool
                med:
                  description: MED attribute
                  type: dict
                  suboptions:
                    always:
                      description: Allow comparing MED from different neighbors.
                      type: bool
                    confed:
                      description: Compare MED among confederation paths.
                      type: bool
                    missing_as_worst:
                      description: Treat missing MED as the least preferred one.
                      type: bool
                compare_routerid:
                  description: Compare router-id for identical EBGP paths.
                  type: bool
                cost_community:
                  description: Cost community.
                  type: dict
                  suboptions:
                    ignore:
                      description: ignore cost_community
                      type: bool
                origin_as:
                  description: BGP origin-AS knobs.
                  type: dict
                  suboptions:
                    use:
                      description: BGP origin-AS knobs.
                      type: dict
                      suboptions:
                        validity:
                          description: BGP bestpath selection will use origin-AS validity
                          type: bool
                    allow:
                      description: BGP origin-AS knobs.
                      type: dict
                      suboptions:
                        invalid:
                          description: BGP bestpath selection will allow 'invalid' origin-AS
                          type: bool
            cluster_id: &cluster_id
              description: Cluster ID of this router acting as a route reflector.
              type: str
            confederation: &confederation
              description: confederation.
              type: dict
              suboptions:
                identifier:
                  description: Set routing domain confederation AS.
                  type: int
                peers:
                  description: Enter peer ASs in BGP confederation mode.
                  type: list
                  elements: int
            default: &default
              description: Configure default value.
              type: dict
              suboptions:
                local_preference:
                  description:
                    - local preferance.
                    - Please refer vendor documentation for valid values
                  type: int
            enforce_first_as: &enforce_first_as
              description: Enforce the first AS for EBGP routes
              type: dict
              suboptions:
                disable:
                  description: disable enforce 1st as
                  type: bool
            fast_external_fallover: &fast_external_fallover
              description: Immediately reset session if a link to a directly connected external peer goes down.
              type: dict
              suboptions:
                disable:
                  description: disable fast external fallover.
                  type: bool
            graceful_restart:
              description: Enable graceful restart support.
              type: dict
              suboptions:
                set:
                  description: Enable graceful-restart.
                  type: bool
                graceful_reset:
                  description: Reset gracefully if configuration change forces a peer reset.
                  type: bool
                restart_time: &restart_time
                  description: Restart time advertised to neighbors in seconds <1-4095>.
                  type: int
                purge_time:
                  description: Time before stale routes are purged in seconds <1-6000>.
                  type: int
                stalepath_time: &stalepath_time
                  description: Maximum time to wait for restart of GR capable peers in seconds <1-4095>.
                  type: int
            install:
              description: Install diversion path to RIB/CEF.
              type: dict
              suboptions:
                diversion:
                  description: Install diversion path to RIB/CEF.
                  type: bool
            log: &bgp_log
              description: Log bgp info
              type: dict
              suboptions:
                log_message:
                  description: Log neighbor inbound/outbound message.
                  type: dict
                  suboptions:
                    disable:
                      description: disable inbound outbound messages.
                      type: bool
                neighbor:
                  description: Log neighbor state info.
                  type: dict
                  suboptions:
                    changes:
                      description: Log neighbor up/down and reset reason.
                      type: dict
                      suboptions:
                        detail:
                          type: bool
                          description: detail
                        disable:
                          type: bool
                          description: disable
            maximum:
              description: Maximum number of neighbors that can be configured
              type: dict
              suboptions:
                neighbor:
                  description: Maximum number of neighbors <1-15000>.
                  type: int
            multipath: &multipath
              description: Change multipath selection criteria
              type: dict
              suboptions:
                as_path:
                  description: AS path
                  type: dict
                  suboptions:
                    ignore:
                      description: Ignore as-path related check for multipath selection.
                      type: dict
                      suboptions:
                        onwards:
                          description: Ignore everything onwards as-path for multipath selection.
                          type: bool
            origin_as:
              description: BGP origin-AS knobs.
              type: dict
              suboptions:
                validation:
                  description: BGP origin-AS validation knobs.
                  type: dict
                  suboptions:
                    disable:
                      description: Disable RPKI origin-AS validation.
                      type: bool
                    signal:
                      description: Signal origin-AS validity towards peers.
                      type: dict
                      suboptions:
                        ibgp:
                          description: Signal origin-AS validity towards iBGP peers
                          type: bool
                    time:
                      description: Time to wait between an RPKI update and a BGP table walk.
                      type: dict
                      suboptions:
                        time_off:
                          description: No automatic prefix validation after an RPKI update.
                          type: bool
                        time_in_second:
                          description: Prefix validation time (in seconds).
                          type: int
            redistribute_internal: &redistribute_internal
              description: Redistribute internal BGP routes.
              type: bool
            router_id: &router_id
              description: Configure Router-id. Example- A.B.C.D  IPv4 address.
              type: str
            scan_time:
              description: Configure background scanner interval for generic scanner Example- <5-3600>.
              type: int
            unsafe_ebgp_policy: &ebgp_policy
              description: Make eBGP neighbors with no policy pass all routes(cisco-support).
              type: bool
            update_delay:
              description: Set the max initial delay for sending updates Example-<0-3600> in secs.
              type: int
        default_information: &default_info
          description: Control distribution of default information.
          type: dict
          suboptions:
            originate:
              description: Distribute a default route
              type: bool
        default_metric: &default_metric
          description: Default metric. Example-<1-4294967295>.
          type: int
        graceful_maintenance:
          description: This allows the router to be brought in or out of service gracefully.
          type: dict
          suboptions:
            activate:
              description: All neighbors with graceful-maintenance config
              type: str
              choices: [ 'all-neighbors','retain-routes','all-neighbors retain-routes', '' ]
        ibgp:
          description: Set options for iBGP peers.
          type: dict
          suboptions:
            policy:
              description: Set options for route-policy.
              type: dict
              suboptions:
                out:
                  description: Set options for outbound policy.
                  type: dict
                  suboptions:
                    enforce_modifications:
                      description: Allow policy to modify all attributes.
                      type: bool
        mpls: &mpls
          description: Enable mpls parameters.
          type: dict
          suboptions:
            activate:
              description: Enter mpls interfaces in BGP mpls activate mode.
              type: dict
              suboptions:
                interface:
                  description: Name of interface to enable mpls.
                  type: str
        mvpn:
          description: Connect to PIM/PIM6.
          type: bool
        neighbors: &neighbors
          description: Specify a neighbor router.
          type: list
          elements: dict
          suboptions:
            neighbor_address:
              description:
                - Neighbor router address.
              type: str
              aliases:
                - neighbor
              required: true
            advertisement_interval:
              description: Minimum interval between sending BGP routing updates.Example-<0-600>.
              type: int
            bfd:
              description: Configure BFD parameters.
              type: dict
              suboptions:
                fast_detect:
                  description: Enable Fast detection
                  type: dict
                  suboptions:
                    set:
                      description: set fast-detect
                      type: bool
                    disable:
                      description: Prevent bfd settings from being inherited from the parent.
                      type: bool
                    strict_mode:
                      description: Hold down neighbor session until BFD session is up
                      type: bool
                multiplier: *multiplier
                minimum_interval: *min_interval
            bmp_activate: &bmp_activate
              description: Enable BMP logging for this neighbor.
              type: dict
              suboptions:
                server:
                  description: Enable BMP connection to particular server.Example-<1-8>.
                  type: int
            capability: &capability
              description: Advertise capability to the peer.
              type: dict
              suboptions:
                additional_paths:
                  description: BGP additional-paths commands.
                  type: dict
                  suboptions:
                    send:
                      type: dict
                      description: Additional paths Send capability
                      suboptions:
                        set:
                          type: bool
                          description: set send capability
                        disable:
                          type: bool
                          description: set send capability
                    receive:
                      type: dict
                      description: Additional paths receive capability
                      suboptions:
                        set:
                          type: bool
                          description: set receive capability
                        disable:
                          type: bool
                          description: set receive capability
                suppress:
                  description: Suppress advertising capability to the peer.
                  type: dict
                  suboptions:
                    four_byte_AS:
                      description: 4-byte-as capability
                      type: dict
                      suboptions:
                        set:
                          description: set 4_byte_as.
                          type: bool

                    all:
                      description: all capability
                      type: dict
                      suboptions:
                        inheritance_disable:
                          description: Do not inherit this configuration from parent group.
                          type: bool
                        set:
                          description: set all.
                          type: bool
            cluster_id: *cluster_id
            description:
              description: Neighbor specific description.
              type: str
            dmz_link_bandwidth: &dmz_link_bw
              description: Propagate the DMZ link bandwidth.
              type: dict
              suboptions:
                inheritance_disable:
                  description: Do not inherit this configuration from parent group.
                  type: bool
                set:
                  description: set dmz-link-bandwidth.
                  type: bool
            dscp:
              description: Set IP DSCP (DiffServ CodePoint).Please refer vendor document for valid entries.
              type: str
            ebgp_multihop:
              description: Allow EBGP neighbors not on directly connected networks.
              type: dict
              suboptions:
                value:
                  description: maximum hop count.Example-<1-255>.
                  type: int
                mpls:
                  description: Disable BGP MPLS forwarding.
                  type: bool
            ebgp_recv_extcommunity_dmz:
              description: Receive extcommunity dmz link bandwidth from ebgp neighbor.
              type: dict
              suboptions:
                inheritance_disable:
                  description: Prevent ebgp-recv-community-dmz from being inherited from parent
                  type: bool
                set:
                  description: set ebgp-recv-community-dmz.
                  type: bool
            ebgp_send_extcommunity_dmz:
              description: Send extcommunity dmz link bandwidth from ebgp neighbor.
              type: dict
              suboptions:
                inheritance_disable:
                  description: Prevent ebgp-send-community-dmz from being inherited from parent
                  type: bool
                cumulatie:
                  description: Send cumulative community dmz link bandwidth of all multipaths to ebgp neighbor.
                  type: bool
                set:
                  description: set ebgp-send-community-dmz.
                  type: bool
            egress_engineering:
              type: dict
              description: Enable egress peer engineering for this neighbor.
              suboptions:
                inheritance_disable:
                  description: Prevent egress-engineering from being inherited from parent
                  type: bool
                set:
                  description: set egress-engineering.
                  type: bool
            enforce_first_as: *enforce_first_as
            graceful_maintenance:
              description:
                Attributes for Graceful Maintenance. This will cause neighbors to de-prefer routes from this router and
                choose alternates. This allows the router to be brought in or out of service gracefully.
              type: dict
              suboptions:
                set:
                  description: set graceful maintenance.
                  type: bool
                activate:
                  description: Routes will be announced with the graceful maintenance attributes while activated either here or under router
                    bgp configuration.
                  type: dict
                  suboptions:
                    inheritance_disable:
                      description: Prevent activate from being inherited from the parent.
                      type: bool
                    set:
                      description: activate.
                      type: bool
                as_prepends:
                  description: Number of times to prepend the local AS number to the
                    AS path of routes. Default=0
                  type: dict
                  suboptions:
                    inheritance_disable:
                      description: Prevent as prepends from being inherited from the parent.
                      type: bool
                    value:
                      description: Range of values for as prepends.Example-<0-6> .
                      type: int
                local_preference:
                  description: local preference with which to advertise routes to ibgp neigbors. Default=No Touch
                  type: dict
                  suboptions:
                    value:
                      description: Range of values for Local Preference.Example-<0-4294967295> .
                      type: int
                    inheritance_disable:
                      description: Prevent local preference from being inherited from the parent.
                      type: bool
            graceful_restart:
              description: Enable graceful restart support for this neighbor.
              type: dict
              suboptions:
                restart_time: *restart_time
                stalepath_time: *stalepath_time
            ignore_connected_check:
              description: Bypass the directly connected nexthop check for single-hop eBGP peering
              type: dict
              suboptions:
                inheritance_disable:
                  description: Prevent ignore-connected-check from being inherited from the parent
                  type: bool
                set:
                  description: set ignore-connected-check.
                  type: bool
            keychain:
              description: Set keychain based authentication.
              type: dict
              suboptions:
                name:
                  description: Name of the key chain - maximum 32 characters.
                  type: str
                inheritance_disable:
                  description: Prevent keychain from being inherited from parent.
                  type: bool
            local:
              type: dict
              description: Configure local parameter
              suboptions:
                address:
                  description: IPv4 address
                  type: dict
                  suboptions:
                    ipv4_address:
                      description: IPv4 address <A.B.C.D>.
                      type: str
                    inheritance_disable:
                      description: Prevent local address from being inherited from parent.
                      type: bool
            local_as:
              description: Specify local AS number.
              type: dict
              suboptions:
                value:
                  description: 2 byte, 4 byte As number
                  type: int
                inheritance_disable:
                  description: Prevent local AS from being inherited from parent.
                  type: bool
            log:
              description: Logging update messages per neighbor.
              type: dict
              suboptions:
                log_message:
                  description: Logging update/notification messages per neighbor.
                  type: dict
                  suboptions:
                    in:
                      description: Inbound log messages
                      type: dict
                      suboptions:
                        value:
                          description: Range for message log buffer size <1-100>.
                          type: int
                        disable:
                          description: Disable inbound message logging.
                          type: bool
                        inheritance_disable:
                          description: Prevents the msg log from being inherited from the parent.
                          type: bool
                    out:
                      description: Outbound log messages
                      type: dict
                      suboptions:
                        value:
                          description: Range for message log buffer size <1-100>.
                          type: int
                        disable:
                          description: Disable inbound message logging.
                          type: bool
                        inheritance_disable:
                          description: Prevents the msg log from being inherited from the parent.
                          type: bool
            origin_as:
              description: BGP origin-AS knobs.
              type: dict
              suboptions:
                validation:
                  description: BGP origin-AS validation knobs.
                  type: dict
                  suboptions:
                    disable:
                      description: Disable RPKI origin-AS validation.
                      type: bool
            receive_buffer_size:
              description: Set socket and BGP receive buffer size.Example <512-131072>.
              type: int
            remote_as:
              description: Neighbor Autonomous System.
              type: int
            send_buffer_size:
              description: Set socket and BGP send buffer size.Example  <4096-131072>.
              type: int
            session_open_mode:
              description: Establish BGP session using this TCP open mode.
              type: str
              choices: [ 'active-only', 'both', 'passive-only' ]
            shutdown:
              description: Administratively shut down this neighbor.
              type: dict
              suboptions:
                inheritance_disable:
                  description: Prevent shutdown from being inherited from parent
                  type: bool
                set:
                  description: shutdown.
                  type: bool
            tcp:
              description: TCP session configuration commands.
              type: dict
              suboptions:
                mss:
                  description: Maximum Segment Size.
                  type: dict
                  suboptions:
                    value:
                      description: TCP initial maximum segment size.
                      type: int
                    inheritance_disable:
                      description: Prevent mss from being inherited from parent
                      type: bool
            timers: &timers
              description: BGP per neighbor timers.
              type: dict
              suboptions:
                keepalive_time:
                  description: keepalive interval <0-65535>.
                  type: int
                holdtime:
                  description: hold time <3-65535> or 0 Disable hold time.
                  type: int
            ttl_security:
              description: Enable EBGP TTL security.
              type: dict
              suboptions:
                inheritance_disable:
                  description: Prevent ttl-security from being inherited from parent
                  type: bool
                set:
                  description: set ttl-security
                  type: bool
            update:
              description: BGP Update configuration.
              type: dict
              suboptions:
                in:
                  description: Inbound update message handling.
                  type: dict
                  suboptions:
                    filtering:
                      description: Inbound update message filtering
                      type: dict
                      suboptions:
                        attribute_filter:
                          description: Attribute-filter configuration.
                          type: dict
                          suboptions:
                            group:
                              description: Name of group.
                              type: str
                        logging:
                            description: Update filtering syslog message.
                            type: dict
                            suboptions:
                              disable:
                                description: Disable update filtering syslog message.
                                type: bool
                        update_message:
                          description: Filtered update messages.
                          type: dict
                          suboptions:
                            buffers:
                              description: Number of buffers to store filtered update messages.
                              type: int
            update_source:
              description: Source of routing updates.Refer vendor document for valid values.
              type: str
        nsr:
          description: Enable non-stop-routing support for all neighbors.
          type: dict
          suboptions:
            set:
              type: bool
              description: set nsr
            disable:
              type: bool
              description: disable nsr
        socket: &socket
          description: set socket parameters.
          type: dict
          suboptions:
            receive_buffer_size:
              description: socket receive buffer size.Example-<512-131072>.
              type: int
            send_buffer_size:
              description: socket send buffer size.Example- <4096-131072>.
              type: int
        timers: *timers
        update:
          description: BGP Update configuration.
          type: dict
          suboptions:
            in:
              description: Inbound update message handling
              type: dict
              suboptions:
                error_handling:
                  description: Inbound update message error handling.
                  type: dict
                  suboptions:
                    basic:
                      description: Inbound update message basic error handling
                      type: dict
                      suboptions:
                        ebgp:
                          type: dict
                          description: Inbound update message basic error handling for EBGP neighbors
                          suboptions:
                            disable:
                              description: disable
                              type: bool
                        ibgp:
                          type: dict
                          description: Inbound update message basic error handling for ibgp neighbors
                          suboptions:
                            disable:
                              description: disable
                              type: bool
                    extended:
                      description: Inbound update message extended error handling
                      type: dict
                      suboptions:
                        ebgp:
                          type: bool
                          description: Inbound update message extended error handling for EBGP neighbors

                        ibgp:
                          type: bool
                          description: Inbound update message extended error handling for ibgp neighbors
            out:
              description: BGP Update generation configuration.
              type: dict
              suboptions:
                logging:
                  description: Enable logging of update generation events.
                  type: bool
            limit:
              description: Upper bound on transient memory usage for update generation.Example-<16-2048>.
              type: int
        rpki:
          description: Configure RPKI.
          type: dict
          suboptions:
            route:
              description: Configure an RPKI route.A.B.C.D/length or X:X::X/length  Network/Minimum prefix length
              type: dict
              suboptions:
                value:
                  description: A.B.C.D/length or X:X::X/length  Network/Minimum prefix length.
                  type: str
                max:
                  description: Maximum prefix length. Example- <1-128>  .
                  type: int
                origin:
                  description: Origin Autonomous System number (in asplain format) Example-<1-4294967295>.
                  type: int
            servers:
              description: Configure RPKI cache-servers.
              type: list
              elements: dict
              suboptions:
                name:
                  description: address of rpki server.
                  type: str
                purge_time:
                  type: int
                  description: Time to wait after a cache goes down to clean up stale routes
                refresh_time:
                  type: dict
                  description: Time between sending serial-queries for the RPKI cache-server
                  suboptions:
                    value:
                      description: Purge time (in seconds) <30-360>
                      type: int
                    time_off:
                      description: Do not send serial-queries periodically
                      type: bool
                response_time:
                  type: dict
                  description: Time to wait for a response from the RPKI cache-server
                  suboptions:
                    value:
                      description: Purge time (in seconds) <15-3600>
                      type: int
                    time_off:
                      description: Wait indefinitely for a response
                      type: bool
                shutdown:
                  type: bool
                  description: Shutdown the RPKI cache-server
                transport:
                  type: dict
                  description: Specify a transport method for the RPKI cache-server
                  suboptions:
                    ssh:
                      description: Connect to the RPKI cache-server using SSH
                      type: dict
                      suboptions:
                        port:
                          description: Specify a port number for the RPKI cache-server transport
                          type: int
                    tcp:
                      description: Connect to the RPKI cache-server using TCP (unencrypted)
                      type: dict
                      suboptions:
                        port:
                          description: Specify a port number for the RPKI cache-server transport
                          type: int
        vrfs:
          description: Specify a vrf name.
          type: list
          elements: dict
          suboptions:
            vrf:
              description: VRF name.
              type: str
            bfd: *bfd
            bgp:
              description: BGP commands.
              type: dict
              suboptions:
                auto_policy_soft_reset: *auto_policy_soft_reset
                bestpath: *bestpath
                default: *default
                enforce_first_as: *enforce_first_as
                fast_external_fallover: *fast_external_fallover
                log: *bgp_log
                multipath: *multipath
                redistribute_internal: *redistribute_internal
                router_id: *router_id
                unsafe_ebgp_policy: *ebgp_policy
            default_information: *default_info
            default_metric: *default_metric
            mpls: *mpls
            neighbors: *neighbors
            rd:
              description: route distinguisher.
              type: dict
              suboptions:
                auto:
                  description: Automatic route distinguisher.
                  type: bool
            socket: *socket
            timers: *timers
    running_config:
      description:
        The state the configuration should be left in.
        - State I(purged) removes all the BGP configurations from the
        target device. Use caution with this state.
        - State I(deleted) only removes BGP attributes that this modules
        manages and does not negate the BGP process completely. Thereby, preserving
        address-family related configurations under BGP context.
        - Running states I(deleted) and I(replaced) will result in an error if there
        are address-family configuration lines present under a neighbor,
        or a vrf context that is to be removed. Please use the
        M(cisco.iosxr.iosxr_bgp_address_family) or M(cisco.iosxr.iosxr_bgp_neighbor_address_family)
        modules for prior cleanup.
        - Refer to examples for more details.
      type: str
    state:
      description:
      - The state the configuration should be left in.
      type: str
      choices: [deleted, merged, replaced, gathered, rendered, parsed, purged]
      default: merged
"""
EXAMPLES = """

##### Using Merged ##########################################
-----------------------------------------------------------------

# configuration on device  Before merge state:


#RP/0/0/CPU0:10#show running-config router bgp
#Thu Feb  4 09:38:36.245 UTC
#% No such configuration item(s)
#RP/0/0/CPU0:10#

# --------------Merge state---------------
#  - name: Merge the following configuration
#       cisco.iosxr.iosxr_bgp_global:
#         config:
#             as_number: 65536
#             default_metric: 5
#             socket:
#               receive_buffer_size: 514
#               send_buffer_size: 4098
#             bgp:
#               confederation:
#                 identifier: 4
#               bestpath:
#                 med:
#                   confed: True
#               cluster_id: 5
#               router_id: 192.0.2.10
#             neighbors:
#               - neighbor: 192.0.2.13
#                 remote_as: 65538
#                 bfd:
#                   fast_detect:
#                     strict_mode: True
#                   multiplier: 6
#                   minimum_interval: 20
#             vrfs:
#               - vrf: vrf1
#                 default_metric: 5
# ----------------------------------------
#


# commands:
# - "router bgp 65536",
# - "bgp cluster-id 5",
# - "bgp router-id 192.0.2.10",
# - "bgp bestpath med confed",
# - "bgp confederation identifier 4",
# - "default-metric 5",
# - "socket receive-buffer-size 514",
# - "socket send-buffer-size 4098",
# - "neighbor 192.0.2.13",
# - "bfd fast-detect strict-mode",
# - "bfd minimum-interval 20",
# - "bfd multiplier 6",
# - "remote-as 65538",
# - "vrf vrf1",
# - "default-metric 5"

# Configuration on device After Merge state:
# --------------------------------------------

# RP/0/0/CPU0:10#show running-config router bgp
# Thu Feb  4 09:44:32.480 UTC
# router bgp 65536
#  bgp confederation identifier 4
#  bgp router-id 192.0.2.10
#  bgp cluster-id 5
#  default-metric 5
#  socket send-buffer-size 4098
#  bgp bestpath med confed
#  socket receive-buffer-size 514
#  neighbor 192.0.2.13
#   remote-as 65538
#   bfd fast-detect strict-mode
#   bfd multiplier 6
#   bfd minimum-interval 20
#  !
#  vrf vrf1
#   default-metric 5
#  !
# !

##### Using replaced ###########################################

# configuration on device before replaced
# --------------------------------------------
#
# RP/0/0/CPU0:10#show running-config router bgp
# Thu Feb  4 09:44:32.480 UTC
# router bgp 65536
#  bgp confederation identifier 4
#  bgp router-id 192.0.2.10
#  bgp cluster-id 5
#  default-metric 5
#  socket send-buffer-size 4098
#  bgp bestpath med confed
#  socket receive-buffer-size 514
#  neighbor 192.0.2.13
#   remote-as 65538
#   bfd fast-detect strict-mode
#   bfd multiplier 6
#   bfd minimum-interval 20
#  !
#  vrf vrf1
#   default-metric 5
#  !
# !
# --------------Replace state---------------
# - name: Replace the following configuration
#       cisco.iosxr.iosxr_bgp_global:
#         state: replaced
#         config:
#             as_number: 65536
#             default_metric: 4
#             socket:
#               receive_buffer_size: 514
#               send_buffer_size: 4098
#             bgp:
#               confederation:
#                 identifier: 4
#               bestpath:
#                 med:
#                   confed: True
#               cluster_id: 5
#               router_id: 192.0.2.10
#             neighbors:
#               - neighbor: 192.0.2.14
#                 remote_as: 65538
#                 bfd:
#                   fast_detect:
#                     strict_mode: True
#                   multiplier: 6
#                   minimum_interval: 20
#             vrfs:
#               - vrf: vrf1
#                 default_metric: 5
# -------------------------------------------
# commands:
# - "router bgp 65536",
# - "default-metric 4",
# - "neighbor 192.0.2.14",
# - "bfd fast-detect strict-mode",
# - "bfd minimum-interval 20",
# - "bfd multiplier 6",
# - "remote-as 65538",
# - "no neighbor 192.0.2.13"

# configuration on device After Replaced  state:
# ----------------------------------------------

# RP/0/0/CPU0:10#show running-config router bgp
# Thu Feb  4 09:54:11.161 UTC
# router bgp 65536
#  bgp confederation identifier 4
#  bgp router-id 192.0.2.10
#  bgp cluster-id 5
#  default-metric 4
#  socket send-buffer-size 4098
#  bgp bestpath med confed
#  socket receive-buffer-size 514
#  neighbor 192.0.2.14
#   remote-as 65538
#   bfd fast-detect strict-mode
#   bfd multiplier 6
#   bfd minimum-interval 20
#  !
#  vrf vrf1
#   default-metric 5
#  !
# !


##### Using deleted ############################################

# configuration on device Before deleted state
# ---------------------------------------------
#
# RP/0/0/CPU0:10#show running-config router bgp
# Thu Feb  4 09:54:11.161 UTC
# router bgp 65536
#  bgp confederation identifier 4
#  bgp router-id 192.0.2.10
#  bgp cluster-id 5
#  default-metric 4
#  socket send-buffer-size 4098
#  bgp bestpath med confed
#  socket receive-buffer-size 514
#  neighbor 192.0.2.14
#   remote-as 65538
#   bfd fast-detect strict-mode
#   bfd multiplier 6
#   bfd minimum-interval 20
#  !
#  vrf vrf1
#   default-metric 5
#  !
# !
#
# --------------------------------------------------------
# - name: Delete BGP configurations handled by this module
#  cisco.iosxr.iosxr_bgp_global:
#         state: deleted
#         config:
#             as_number: 65536
#
# commands:
# "router bgp 65536",
# "no bgp cluster-id 5",
# "no bgp router-id 192.0.2.10",
# "no bgp bestpath med confed",
# "no bgp confederation identifier 4",
# "no default-metric 4",
# "no socket receive-buffer-size 514",
# "no socket send-buffer-size 4098",
# "no neighbor 192.0.2.14",
# "no vrf vrf1"
#
# configuration on device after delete
# -------------------------------------------
#
# RP/0/0/CPU0:10#show running-config router bgp
# Thu Feb  4 10:01:08.232 UTC
# router bgp 65536
# !
#


################# Using Purged ########################################

# configuration on device Before Purged state
# --------------------------------------------
#
# RP/0/0/CPU0:10#show running-config router bgp
# Thu Feb  4 09:54:11.161 UTC
# router bgp 65536
#  bgp confederation identifier 4
#  bgp router-id 192.0.2.10
#  bgp cluster-id 5
#  default-metric 4
#  socket send-buffer-size 4098
#  bgp bestpath med confed
#  socket receive-buffer-size 514
#  address-family ipv4 unicast
#  neighbor 192.0.2.14
#   remote-as 65538
#   bfd fast-detect strict-mode
#   bfd multiplier 6
#   bfd minimum-interval 20
#   address-family ipv4 unicast
#  !
#  vrf vrf1
#   default-metric 5
#  !
# !
#
# - name: Purge all BGP configurations from the device
#   cisco.iosxr.iosxr_bgp_global:
#     state: purged
#
#  commands:
# - no router bgp 65563
#
# configuration on device After purged state:
# ---------------------------------------------
#
# #RP/0/0/CPU0:10#show running-config router bgp
# #Thu Feb  4 09:38:36.245 UTC
# #% No such configuration item(s)
# #RP/0/0/CPU0:10#
#
#
# ################# Using Rendred #######################################################
#
# - name: Render platform specific configuration lines (without connecting to the device)
#   cisco.iosxr.iosxr_bgp_global:
#         state: rendered
#         config:
#             as_number: 1
#             default_metric: 4
#             vrfs:
#               - vrf: vrf3
#                 bfd:
#                   minimum_interval: 20
#                   multiplier: 10
#                 bgp:
#                   fast_external_fallover:
#                     disable: True
#                   router_id: 1.2.3.4
#                   auto_policy_soft_reset:
#                     disable: True
#                 #rd:
#                 #  auto: True
#                 #  #value: 1
#                 timers:
#                   keepalive_time: 20
#                   holdtime: 30
#               - vrf: vrf2
#                 bgp:
#                   enforce_first_as:
#                     disable: True
#                 default_metric: 4
#                 neighbors:
#                   - neighbor: 1.1.1.3
#                     remote_as: 2
#                     graceful_maintenance:
#                       set: True
#                       activate:
#                         #set: True
#                         inheritance_disable: True
#                       local_preference:
#                         value: 1
#                         #inheritance_disable: True
#                       as_prepends:
#                         value: 2
# rendered output
# ------------------------------------
#   "router bgp 1",
#   "default-metric 4",
#   "vrf vrf3",
#   "bfd multiplier 10",
#   "bfd minimum-interval 20",
#   "bgp auto-policy-soft-reset disable",
#   "bgp fast-external-fallover disable",
#   "bgp router-id 1.2.3.4",
#   "timers bgp 20 30",
#   "vrf vrf2",
#   "neighbor 1.1.1.3",
#   "remote-as 2",
#   "graceful-maintenance",
#   "graceful-maintenance activate inheritance-disable",
#   "graceful-maintenance local-preference 1",
#   "graceful-maintenance as-prepends 2",
#   "bgp enforce-first-as disable",
#   "default-metric 4"
#
# ############## Using parsed #####################
#  parsed.cfg
#  ------------
# router bgp 65536
#  bgp confederation identifier 4
#  bgp router-id 192.0.2.10
#  bgp cluster-id 5
#  default-metric 4
#  socket send-buffer-size 4098
#  bgp bestpath med confed
#  socket receive-buffer-size 514
#  neighbor 192.0.2.11
#   remote-as 65537
#   cluster-id 3
#  !
#  neighbor 192.0.2.14
#   remote-as 65538
#   bfd fast-detect strict-mode
#   bfd multiplier 6
#   bfd minimum-interval 20
#  !
# !
# ------------------------------------
#
# - name: Parse externally provided BGP config
#   cisco.iosxr.iosxr_bgp_global:
#     running_config: "{{ lookup('file', 'parsed.cfg') }}"
#     state: parsed
#
# #Task output using parsed
#     as_number: "65536"
#     default_metric: 4
#     socket:
#       receive_buffer_size: 514
#       send_buffer_size: 4098
#     bgp:
#       confederation:
#         identifier: 4
#       bestpath:
#         med:
#           confed: true
#       cluster_id: "5"
#       router_id: "192.0.2.10"
#     neighbors:
#       - neighbor: 192.0.2.11
#         remote_as: 65537
#         cluster_id: "3"
#       - neighbor: "192.0.2.14"
#         remote_as: 65538
#         bfd:
#           fast_detect:
#             strict_mode: true
#           multiplier: 6
#           minimum_interval: 20
"""

from ansible.module_utils.basic import AnsibleModule

from ansible_collections.cisco.iosxr.plugins.module_utils.network.iosxr.argspec.bgp_global.bgp_global import (
    Bgp_globalArgs,
)
from ansible_collections.cisco.iosxr.plugins.module_utils.network.iosxr.config.bgp_global.bgp_global import (
    Bgp_global,
)


def main():
    """
    Main entry point for module execution

    :returns: the result form module invocation
    """
    module = AnsibleModule(
        argument_spec=Bgp_globalArgs.argument_spec,
        mutually_exclusive=[["config", "running_config"]],
        required_if=[
            ["state", "merged", ["config"]],
            ["state", "replaced", ["config"]],
            ["state", "overridden", ["config"]],
            ["state", "rendered", ["config"]],
            ["state", "parsed", ["running_config"]],
        ],
        supports_check_mode=True,
    )

    result = Bgp_global(module).execute_module()
    module.exit_json(**result)


if __name__ == "__main__":
    main()

Anon7 - 2022
AnonSec Team