From c786f7ca3cc018a24c3d0f83da8631e71aa0ca60 Mon Sep 17 00:00:00 2001
From: Fabio Alessandro Locati <me@fale.io>
Date: Wed, 7 Dec 2016 01:41:29 +0000
Subject: [PATCH] Native YAML - monitoring/logicmonitor.py (#18790)

* Native YAML - monitoring/logicmonitor.py

* Fix comments as well

* Fix quotes
---
 .../modules/monitoring/logicmonitor.py        | 683 +++++++++---------
 1 file changed, 349 insertions(+), 334 deletions(-)

diff --git a/lib/ansible/modules/monitoring/logicmonitor.py b/lib/ansible/modules/monitoring/logicmonitor.py
index f2267207a71..fc1157bbb6f 100644
--- a/lib/ansible/modules/monitoring/logicmonitor.py
+++ b/lib/ansible/modules/monitoring/logicmonitor.py
@@ -89,7 +89,7 @@ options:
       - NOTE You should use Ansible service modules such as M(service) or M(supervisorctl) for managing the Collector 'logicmonitor-agent' and 'logicmonitor-watchdog' services. Specifically, you'll probably want to start these services after a Collector add and stop these services before a Collector remove.
       - "Host: Perform actions on a host device."
       - "Hostgroup: Perform actions on a LogicMonitor host group."
-      - NOTE Host and Hostgroup tasks should always be performed via local_action. There are no benefits to running these tasks on the remote host and doing so will typically cause problems.
+      - 'NOTE Host and Hostgroup tasks should always be performed via delegate_to: localhost. There are no benefits to running these tasks on the remote host and doing so will typically cause problems.'
     required: true
     default: null
     choices: ['collector', 'host', 'datsource', 'hostgroup']
@@ -192,352 +192,367 @@ options:
 ...
 '''
 EXAMPLES = '''
-    # example of adding a new LogicMonitor collector to these devices
-    ---
-    - hosts: collectors
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Deploy/verify LogicMonitor collectors
-        become: yes
-        logicmonitor:
-          target=collector
-          action=add
-          company={{ company }}
-          user={{ user }}
-          password={{ password }}
+# example of adding a new LogicMonitor collector to these devices
+---
+- hosts: collectors
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Deploy/verify LogicMonitor collectors
+    become: yes
+    logicmonitor:
+      target: collector
+      action: add
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
 
-    #example of adding a list of hosts into monitoring
-    ---
-    - hosts: hosts
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Deploy LogicMonitor Host
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=host
-          action=add
-          collector='mycompany-Collector'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          groups="/servers/production,/datacenter1"
-          properties="{'snmp.community':'secret','dc':'1', 'type':'prod'}"
+#example of adding a list of hosts into monitoring
+---
+- hosts: hosts
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Deploy LogicMonitor Host
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: host
+      action: add
+      collector: mycompany-Collector
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      groups: /servers/production,/datacenter1
+      properties:
+        snmp.community: secret
+        dc: 1
+        type: prod
+    delegate_to: localhost
 
-    #example of putting a datasource in SDT
-    ---
-    - hosts: localhost
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: SDT a datasource
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=datasource
-          action=sdt
-          id='123'
-          duration=3000
-          starttime='2017-03-04 05:06'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
+#example of putting a datasource in SDT
+---
+- hosts: localhost
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: SDT a datasource
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: datasource
+      action: sdt
+      id: 123
+      duration: 3000
+      starttime: '2017-03-04 05:06'
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
 
-    #example of creating a hostgroup
-    ---
-    - hosts: localhost
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Create a host group
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=add
-          fullpath='/servers/development'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          properties="{'snmp.community':'commstring', 'type':'dev'}"
+#example of creating a hostgroup
+---
+- hosts: localhost
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Create a host group
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor
+      target: hostgroup
+      action: add
+      fullpath: /servers/development
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      properties: 
+        snmp.community: commstring
+        type: dev
 
-    #example of putting a list of hosts into SDT
-    ---
-    - hosts: hosts
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: SDT hosts
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=host
-          action=sdt
-          duration=3000
-          starttime='2016-11-10 09:08'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          collector='mycompany-Collector'
+#example of putting a list of hosts into SDT
+---
+- hosts: hosts
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: SDT hosts
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: host
+      action: sdt
+      duration: 3000
+      starttime: '2016-11-10 09:08'
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      collector: mycompany-Collector
+    delegate_to: localhost
 
-    #example of putting a host group in SDT
-    ---
-    - hosts: localhost
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: SDT a host group
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=sdt
-          fullpath='/servers/development'
-          duration=3000
-          starttime='2017-03-04 05:06'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
+#example of putting a host group in SDT
+---
+- hosts: localhost
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: SDT a host group
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: hostgroup
+      action: sdt
+      fullpath: /servers/development
+      duration: 3000
+      starttime: '2017-03-04 05:06'
+      company=: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
 
-    #example of updating a list of hosts
-    ---
-    - hosts: hosts
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Update a list of hosts
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=host
-          action=update
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          collector='mycompany-Collector'
-          groups="/servers/production,/datacenter5"
-          properties="{'snmp.community':'commstring','dc':'5'}"
+#example of updating a list of hosts
+---
+- hosts: hosts
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Update a list of hosts
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: host
+      action: update
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      collector: mycompany-Collector
+      groups: /servers/production,/datacenter5
+      properties: 
+        snmp.community: commstring
+        dc: 5
+    delegate_to: localhost
 
-    #example of updating a hostgroup
-    ---
-    - hosts: hosts
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Update a host group
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=update
-          fullpath='/servers/development'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          properties="{'snmp.community':'hg', 'type':'dev', 'status':'test'}"
+#example of updating a hostgroup
+---
+- hosts: hosts
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Update a host group
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: hostgroup
+      action: update
+      fullpath: /servers/development
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      properties: 
+        snmp.community: hg
+        type: dev
+        status: test
+    delegate_to: localhost
 
-    #example of removing a list of hosts from monitoring
-    ---
-    - hosts: hosts
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Remove LogicMonitor hosts
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=host
-          action=remove
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          collector='mycompany-Collector'
+#example of removing a list of hosts from monitoring
+---
+- hosts: hosts
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Remove LogicMonitor hosts
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: host
+      action: remove
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      collector: mycompany-Collector
+    delegate_to: localhost
 
-    #example of removing a host group
-    ---
-    - hosts: hosts
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Remove LogicMonitor development servers hostgroup
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=remove
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          fullpath='/servers/development'
-      - name: Remove LogicMonitor servers hostgroup
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=remove
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          fullpath='/servers'
-      - name: Remove LogicMonitor datacenter1 hostgroup
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=remove
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          fullpath='/datacenter1'
-      - name: Remove LogicMonitor datacenter5 hostgroup
-        # All tasks except for target=collector should use local_action
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=remove
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          fullpath='/datacenter5'
+#example of removing a host group
+---
+- hosts: hosts
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Remove LogicMonitor development servers hostgroup
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: hostgroup
+      action: remove
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      fullpath: /servers/development
+    delegate_to: localhost
+  - name: Remove LogicMonitor servers hostgroup
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: hostgroup
+      action: remove
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      fullpath: /servers
+    delegate_to: localhost
+  - name: Remove LogicMonitor datacenter1 hostgroup
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: hostgroup
+      action: remove
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      fullpath: /datacenter1
+    delegate_to: localhost
+  - name: Remove LogicMonitor datacenter5 hostgroup
+    # All tasks except for target=collector should use delegate_to: localhost
+    logicmonitor:
+      target: hostgroup
+      action: remove
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      fullpath: /datacenter5
+    delegate_to: localhost
 
-    ### example of removing a new LogicMonitor collector to these devices
-    ---
-    - hosts: collectors
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Remove LogicMonitor collectors
-        become: yes
-        logicmonitor:
-          target=collector
-          action=remove
-          company={{ company }}
-          user={{ user }}
-          password={{ password }}
+### example of removing a new LogicMonitor collector to these devices
+---
+- hosts: collectors
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Remove LogicMonitor collectors
+    become: yes
+    logicmonitor:
+      target: collector
+      action: remove
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
 
-    #complete example
-    ---
-    - hosts: localhost
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Create a host group
-        local_action: >
-          logicmonitor
-          target=hostgroup
-          action=add
-          fullpath='/servers/production/database'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          properties="{'snmp.community':'commstring'}"
-      - name: SDT a host group
-      local_action: >
-        logicmonitor
-        target=hostgroup
-        action=sdt
-        fullpath='/servers/production/web'
-        duration=3000
-        starttime='2012-03-04 05:06'
-        company='{{ company }}'
-        user='{{ user }}'
-        password='{{ password }}'
+#complete example
+---
+- hosts: localhost
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Create a host group
+    logicmonitor:
+      target: hostgroup
+      action: add
+      fullpath: /servers/production/database
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      properties: 
+        snmp.community: commstring
+  - name: SDT a host group
+    logicmonitor:
+      target: hostgroup
+      action: sdt
+      fullpath: /servers/production/web
+      duration: 3000
+      starttime: '2012-03-04 05:06'
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
 
-    - hosts: collectors
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: Deploy/verify LogicMonitor collectors
-        logicmonitor:
-          target: collector
-          action: add
-          company: {{ company }}
-          user: {{ user }}
-          password: {{ password }}
-      - name: Place LogicMonitor collectors into 30 minute Scheduled downtime
-        logicmonitor: target=collector action=sdt company={{ company }}
-          user={{ user }} password={{ password }}
-      - name: Deploy LogicMonitor Host
-        local_action: >
-          logicmonitor
-          target=host
-          action=add
-          collector=agent1.ethandev.com
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          properties="{'snmp.community':'commstring', 'dc':'1'}"
-          groups="/servers/production/collectors, /datacenter1"
+- hosts: collectors
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: Deploy/verify LogicMonitor collectors
+    logicmonitor:
+      target: collector
+      action: add
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+  - name: Place LogicMonitor collectors into 30 minute Scheduled downtime
+    logicmonitor:
+      target: collector
+      action: sdt
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+  - name: Deploy LogicMonitor Host
+    logicmonitor:
+      target: host
+      action: add
+      collector: agent1.ethandev.com
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      properties:
+        snmp.community: commstring
+        dc: 1
+      groups: /servers/production/collectors, /datacenter1
+    delegate_to: localhost
 
-    - hosts: database-servers
-      remote_user: '{{ username }}'
-      vars:
-        company: 'mycompany'
-        user: 'myusername'
-        password: 'mypassword'
-      tasks:
-      - name: deploy logicmonitor hosts
-        local_action: >
-          logicmonitor
-          target=host
-          action=add
-          collector=monitoring.dev.com
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
-          properties="{'snmp.community':'commstring', 'type':'db', 'dc':'1'}"
-          groups="/servers/production/database, /datacenter1"
-      - name: schedule 5 hour downtime for 2012-11-10 09:08
-        local_action: >
-          logicmonitor
-          target=host
-          action=sdt
-          duration=3000
-          starttime='2012-11-10 09:08'
-          company='{{ company }}'
-          user='{{ user }}'
-          password='{{ password }}'
+- hosts: database-servers
+  remote_user: '{{ username }}'
+  vars:
+    company: mycompany
+    user: myusername
+    password: mypassword
+  tasks:
+  - name: deploy logicmonitor hosts
+    logicmonitor:
+      target: host
+      action: add
+      collector: monitoring.dev.com
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+      properties:
+        snmp.community: commstring
+        type: db
+        dc: 1
+      groups: /servers/production/database, /datacenter1
+    delegate_to: localhost
+  - name: schedule 5 hour downtime for 2012-11-10 09:08
+    logicmonitor:
+      target: host
+      action: sdt
+      duration: 3000
+      starttime: '2012-11-10 09:08'
+      company: '{{ company }}'
+      user: '{{ user }}'
+      password: '{{ password }}'
+    delegate_to: localhost
 '''