From fba3dbfdca55b57591f02bd6cf385cdd2cc872e5 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 13 Jul 2020 12:02:34 -0400 Subject: [PATCH 01/28] Test commit --- sensors/encore_auto_remediate_sensors.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 sensors/encore_auto_remediate_sensors.py diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py new file mode 100644 index 0000000..0349a44 --- /dev/null +++ b/sensors/encore_auto_remediate_sensors.py @@ -0,0 +1 @@ +import json From 4cadf850ae3f584188616bc5e5b3bf2191e79faa Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Thu, 16 Jul 2020 11:07:05 -0400 Subject: [PATCH 02/28] Added last_checkin to config.yaml --- config.schema.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/config.schema.yaml b/config.schema.yaml index 0517e0a..e5e63b2 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -23,4 +23,17 @@ connections: description: "Password to login to the server" required: true secret: true + last_checkin: + type: "object" + description: "Time frame for last checkin" + required: false + properties: + date: + type: string + description: "Date of last response" + required: true + time: + type: string + description: "Time of the day" + required: true additionalProperties: false From a42ef78ff3f73d86846b4cdbd871ce408a0641de Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Thu, 16 Jul 2020 12:42:07 -0400 Subject: [PATCH 03/28] added auto_remediation key --- config.schema.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config.schema.yaml b/config.schema.yaml index e5e63b2..5bc7056 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -23,6 +23,10 @@ connections: description: "Password to login to the server" required: true secret: true + +auto_remediate: + type: "object" + properties: last_checkin: type: "object" description: "Time frame for last checkin" From 2b6260ca9ec0244fd18aee96415a2ef3410fea0f Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 20 Jul 2020 16:17:02 -0400 Subject: [PATCH 04/28] Added query through config --- sensors/encore_auto_remediate_sensors.py | 65 ++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 0349a44..86bd8eb 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -1 +1,66 @@ import json +import requests +from st2reactor.sensor.base import PollingSensor +from datetime import datetime + +class EncoreAutoRemediateSensor(PollingSensor): + + def __init__(self, sensor_service, config=None, poll_interval=None): + + super(EncoreAutoRemediateSensor, self).__init__(sensor_service=sensor_service, config=config, poll_interval=poll_interval) + self._logger = self._sensor_service.get_logger(__name__) + + def setup(self): + USERNAME = self._config['connections']['username'] + PASSWORD = self._config['connections']['password'] + SERVER = self._config['connections']['server'] + SSL_VERIFY = False + query_date = self._config['auto_remediate']['last_checkin']['date'] + query_time = self._config['auto_remediate']['last_checkin']['time'] + query = query_date + " " + query_time + actual_time = datetime.fromisoformat(query) + + def poll(self): + session = requests.Session() + response = session.get(SERVER) + response.raise_for_status() + result = response.json()["results"] + final_list = [] + + for obj in result: + if "subscription_facet_attributes" in obj: + new_obj = { + obj["certname"]: obj["subscription_facet_attributes"]["last_checkin"]} + final_list.append(new_obj) + server_checkin_time = obj["subscription_facet_attributes"]["last_checkin"] + server_checkin_time = server_checkin_time[0:len(server_checkin_time-4)] #string + server_checkin_time = datetime.fromisoformat(server_checkin_time) #datetime + + if actual_time < server_checkin_time: + print("This server responded within the query timeframe") + else: + print("This server didn't respond since query time") + print(new_obj) + else: + print("Subscription facet attributes don't exist") + + #x = json.dumps(result, indent=4, sort_keys=True) + + + def cleanup(self): + # This is called when the st2 system goes down. You can perform cleanup operations like + # closing the connections to external system here. + pass + + def add_trigger(self, trigger): + # This method is called when trigger is created + pass + + def update_trigger(self, trigger): + # This method is called when trigger is updated + pass + + def remove_trigger(self, trigger): + # This method is called when trigger is deleted + pass + From d386f14e09cacec3d68a27ce425ea1697f4c2e61 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Wed, 22 Jul 2020 14:18:13 -0400 Subject: [PATCH 05/28] config sensor to array type --- config.schema.yaml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/config.schema.yaml b/config.schema.yaml index 5bc7056..90e65ce 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -24,20 +24,19 @@ connections: required: true secret: true -auto_remediate: - type: "object" - properties: - last_checkin: - type: "object" - description: "Time frame for last checkin" - required: false - properties: - date: - type: string - description: "Date of last response" - required: true - time: - type: string - description: "Time of the day" - required: true - additionalProperties: false +auto_remediate_sensor_queries: + description: "List of queries" + type: "array" + required: true + items: + type: "object" + required: true + properties: + date: + type: string + description: "Date of last response" + required: true + time: + type: string + description: "Time of the day" + required: true From 3978a477b548637b426da4bfd1e19ed09df96305 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 27 Jul 2020 10:07:31 -0400 Subject: [PATCH 06/28] changed py to match config.yaml --- sensors/encore_auto_remediate_sensors.py | 43 +++++++++++++++--------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 86bd8eb..b33ceff 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -15,10 +15,14 @@ def setup(self): PASSWORD = self._config['connections']['password'] SERVER = self._config['connections']['server'] SSL_VERIFY = False + + queries = self._config['auto_remediate_sensor_queries'] + """ query_date = self._config['auto_remediate']['last_checkin']['date'] query_time = self._config['auto_remediate']['last_checkin']['time'] query = query_date + " " + query_time actual_time = datetime.fromisoformat(query) + """ def poll(self): session = requests.Session() @@ -26,23 +30,30 @@ def poll(self): response.raise_for_status() result = response.json()["results"] final_list = [] - - for obj in result: - if "subscription_facet_attributes" in obj: - new_obj = { - obj["certname"]: obj["subscription_facet_attributes"]["last_checkin"]} - final_list.append(new_obj) - server_checkin_time = obj["subscription_facet_attributes"]["last_checkin"] - server_checkin_time = server_checkin_time[0:len(server_checkin_time-4)] #string - server_checkin_time = datetime.fromisoformat(server_checkin_time) #datetime - - if actual_time < server_checkin_time: - print("This server responded within the query timeframe") + + for query in queries: + query_date = query['date'] + query_time = query['time'] + + curr_query = query_date + " " + query_time + actual_time = datetime.fromisoformat(curr_query) + + for obj in result: + if "subscription_facet_attributes" in obj: + new_obj = { + obj["certname"]: obj["subscription_facet_attributes"]["last_checkin"]} + final_list.append(new_obj) + server_checkin_time = obj["subscription_facet_attributes"]["last_checkin"] + server_checkin_time = server_checkin_time[0:len(server_checkin_time-4)] #string + server_checkin_time = datetime.fromisoformat(server_checkin_time) #datetime + + if actual_time < server_checkin_time: + print("This server responded within the query timeframe") + else: + print("This server didn't respond since before query time") + print(new_obj) else: - print("This server didn't respond since query time") - print(new_obj) - else: - print("Subscription facet attributes don't exist") + print("Subscription facet attributes don't exist") #x = json.dumps(result, indent=4, sort_keys=True) From f2da774ae01c630b8dc41927674150cefd205b90 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 27 Jul 2020 16:24:52 -0400 Subject: [PATCH 07/28] Added yaml file for trigger --- sensors/encore_auto_remediate_sensors.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 sensors/encore_auto_remediate_sensors.yaml diff --git a/sensors/encore_auto_remediate_sensors.yaml b/sensors/encore_auto_remediate_sensors.yaml new file mode 100644 index 0000000..87f772f --- /dev/null +++ b/sensors/encore_auto_remediate_sensors.yaml @@ -0,0 +1,17 @@ +--- + class_name: "EncoreAutoRemediateSensor" + entry_point: "encore_auto_remediate_sensor.py" + description: "Sensor to check to make sure servers are responding" + poll_interval: 300 + trigger_types: + - + name: "checkin_event" + description: "example" + + payload_schema: + type: "object" + properties: + server_name: + type: "string" + last_checkin: + type: "string" From f354774281680a4fe378e7ebd4a348dabf6b0b05 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 27 Jul 2020 18:23:15 -0400 Subject: [PATCH 08/28] added dispatch_trigger and corrected trigger name --- sensors/encore_auto_remediate_sensors.py | 15 +++++++++++++-- sensors/encore_auto_remediate_sensors.yaml | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index b33ceff..878cd3b 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -9,6 +9,7 @@ def __init__(self, sensor_service, config=None, poll_interval=None): super(EncoreAutoRemediateSensor, self).__init__(sensor_service=sensor_service, config=config, poll_interval=poll_interval) self._logger = self._sensor_service.get_logger(__name__) + self._trigger_ref = 'foreman.auto_remediate_satellite' def setup(self): USERNAME = self._config['connections']['username'] @@ -50,7 +51,8 @@ def poll(self): if actual_time < server_checkin_time: print("This server responded within the query timeframe") else: - print("This server didn't respond since before query time") + print("This server didn't respond since before query time") + self.dispatch_trigger(obj['certname'], server_checkin_time) print(new_obj) else: print("Subscription facet attributes don't exist") @@ -58,6 +60,16 @@ def poll(self): #x = json.dumps(result, indent=4, sort_keys=True) + def dispatch_trigger(self, server_name, last_checkin): + trigger = self._trigger_ref + + payload = { + 'server_name': server_name, + 'last_checkin': last_checkin + } + + self.sensor_service.dispatch(trigger=trigger, payload=payload) + def cleanup(self): # This is called when the st2 system goes down. You can perform cleanup operations like # closing the connections to external system here. @@ -74,4 +86,3 @@ def update_trigger(self, trigger): def remove_trigger(self, trigger): # This method is called when trigger is deleted pass - diff --git a/sensors/encore_auto_remediate_sensors.yaml b/sensors/encore_auto_remediate_sensors.yaml index 87f772f..1f9a3e4 100644 --- a/sensors/encore_auto_remediate_sensors.yaml +++ b/sensors/encore_auto_remediate_sensors.yaml @@ -5,8 +5,8 @@ poll_interval: 300 trigger_types: - - name: "checkin_event" - description: "example" + name: "auto_remediate_satellite" + description: "Trigger to remediate hosts that aren't responding" payload_schema: type: "object" From bbeee67075cfa59bd41e8570d1cc102b85c4c7eb Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Tue, 28 Jul 2020 11:04:14 -0400 Subject: [PATCH 09/28] changed query to only date --- sensors/encore_auto_remediate_sensors.py | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 878cd3b..78aa649 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -18,12 +18,6 @@ def setup(self): SSL_VERIFY = False queries = self._config['auto_remediate_sensor_queries'] - """ - query_date = self._config['auto_remediate']['last_checkin']['date'] - query_time = self._config['auto_remediate']['last_checkin']['time'] - query = query_date + " " + query_time - actual_time = datetime.fromisoformat(query) - """ def poll(self): session = requests.Session() @@ -34,30 +28,24 @@ def poll(self): for query in queries: query_date = query['date'] - query_time = query['time'] - - curr_query = query_date + " " + query_time - actual_time = datetime.fromisoformat(curr_query) + actual_day = datetime.fromisoformat(query_date) for obj in result: if "subscription_facet_attributes" in obj: new_obj = { obj["certname"]: obj["subscription_facet_attributes"]["last_checkin"]} final_list.append(new_obj) - server_checkin_time = obj["subscription_facet_attributes"]["last_checkin"] - server_checkin_time = server_checkin_time[0:len(server_checkin_time-4)] #string - server_checkin_time = datetime.fromisoformat(server_checkin_time) #datetime + server_checkin_time = obj["subscription_facet_attributes"]["last_checkin"].split() + server_checkin_day = server_checkin_time[0] + server_checkin_day = datetime.fromisoformat(server_checkin_day) #datetime - if actual_time < server_checkin_time: + if actual_day < server_checkin_day: print("This server responded within the query timeframe") else: print("This server didn't respond since before query time") - self.dispatch_trigger(obj['certname'], server_checkin_time) - print(new_obj) + self.dispatch_trigger(obj['certname'], server_checkin_day) else: print("Subscription facet attributes don't exist") - - #x = json.dumps(result, indent=4, sort_keys=True) def dispatch_trigger(self, server_name, last_checkin): From 51f6cdad86c7f3179e0926e415c4677a0d8e475f Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Tue, 28 Jul 2020 11:37:09 -0400 Subject: [PATCH 10/28] changed config to only array of dates --- config.schema.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/config.schema.yaml b/config.schema.yaml index 90e65ce..3974d69 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -36,7 +36,3 @@ auto_remediate_sensor_queries: type: string description: "Date of last response" required: true - time: - type: string - description: "Time of the day" - required: true From eee1cd30240f0200e1b562bff661fc486207c666 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Thu, 30 Jul 2020 11:49:19 -0400 Subject: [PATCH 11/28] changed date to days format --- sensors/encore_auto_remediate_sensors.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 78aa649..5c3a0ba 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -1,7 +1,7 @@ import json import requests from st2reactor.sensor.base import PollingSensor -from datetime import datetime +from datetime import datetime, timedelta, date class EncoreAutoRemediateSensor(PollingSensor): @@ -18,6 +18,12 @@ def setup(self): SSL_VERIFY = False queries = self._config['auto_remediate_sensor_queries'] + """ + query_date = self._config['auto_remediate']['last_checkin']['date'] + query_time = self._config['auto_remediate']['last_checkin']['time'] + query = query_date + " " + query_time + actual_time = datetime.fromisoformat(query) + """ def poll(self): session = requests.Session() @@ -35,15 +41,15 @@ def poll(self): new_obj = { obj["certname"]: obj["subscription_facet_attributes"]["last_checkin"]} final_list.append(new_obj) - server_checkin_time = obj["subscription_facet_attributes"]["last_checkin"].split() - server_checkin_day = server_checkin_time[0] - server_checkin_day = datetime.fromisoformat(server_checkin_day) #datetime + timeline = int(obj["subscription_facet_attributes"]["last_checkin"].split()[0]) + server_checkin_date = date.today() - timedelta(days=timeline) - if actual_day < server_checkin_day: + if actual_day < server_checkin_date: print("This server responded within the query timeframe") else: print("This server didn't respond since before query time") - self.dispatch_trigger(obj['certname'], server_checkin_day) + self.dispatch_trigger(obj['certname'], server_checkin_date) + print(new_obj) else: print("Subscription facet attributes don't exist") From 067d47dc5d7a5b06bc6bd516160bda0478e538ad Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Thu, 30 Jul 2020 13:29:50 -0400 Subject: [PATCH 12/28] sensor able to register. error in syntax --- sensors/encore_auto_remediate_sensors.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 5c3a0ba..9cdebce 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -30,26 +30,24 @@ def poll(self): response = session.get(SERVER) response.raise_for_status() result = response.json()["results"] - final_list = [] + #final_list = [] for query in queries: - query_date = query['date'] - actual_day = datetime.fromisoformat(query_date) + query_date = query['days'] + timeline = query_date + timeline = int(timeline.split()[0]) for obj in result: if "subscription_facet_attributes" in obj: - new_obj = { - obj["certname"]: obj["subscription_facet_attributes"]["last_checkin"]} - final_list.append(new_obj) - timeline = int(obj["subscription_facet_attributes"]["last_checkin"].split()[0]) - server_checkin_date = date.today() - timedelta(days=timeline) + + server_checkin_date = obj["subscription_facet_attributes"]["last_checkin"] + query_checkin_date = date.today() - timedelta(days=timeline) - if actual_day < server_checkin_date: + if query_checkin_day < server_checkin_date: print("This server responded within the query timeframe") else: - print("This server didn't respond since before query time") + print("This server didn't respond since before query checkin date") self.dispatch_trigger(obj['certname'], server_checkin_date) - print(new_obj) else: print("Subscription facet attributes don't exist") From 604c5afcebb3a451c46f280884efa2d20a419803 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Thu, 30 Jul 2020 13:32:17 -0400 Subject: [PATCH 13/28] change to days from date --- config.schema.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.schema.yaml b/config.schema.yaml index 3974d69..2cdb3a0 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -32,7 +32,7 @@ auto_remediate_sensor_queries: type: "object" required: true properties: - date: + days: type: string description: "Date of last response" required: true From d5174255e94d5b4bcc5aa8fc28e4e0196bfd1042 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 31 Jul 2020 14:34:42 -0400 Subject: [PATCH 14/28] need syntax change --- sensors/encore_auto_remediate_sensors.py | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 9cdebce..2855f1a 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -4,9 +4,7 @@ from datetime import datetime, timedelta, date class EncoreAutoRemediateSensor(PollingSensor): - def __init__(self, sensor_service, config=None, poll_interval=None): - super(EncoreAutoRemediateSensor, self).__init__(sensor_service=sensor_service, config=config, poll_interval=poll_interval) self._logger = self._sensor_service.get_logger(__name__) self._trigger_ref = 'foreman.auto_remediate_satellite' @@ -16,37 +14,28 @@ def setup(self): PASSWORD = self._config['connections']['password'] SERVER = self._config['connections']['server'] SSL_VERIFY = False - queries = self._config['auto_remediate_sensor_queries'] - """ - query_date = self._config['auto_remediate']['last_checkin']['date'] - query_time = self._config['auto_remediate']['last_checkin']['time'] - query = query_date + " " + query_time - actual_time = datetime.fromisoformat(query) - """ - + def poll(self): session = requests.Session() response = session.get(SERVER) response.raise_for_status() result = response.json()["results"] - #final_list = [] for query in queries: query_date = query['days'] timeline = query_date - timeline = int(timeline.split()[0]) + query_date = int(timeline.split()[0]) for obj in result: if "subscription_facet_attributes" in obj: - - server_checkin_date = obj["subscription_facet_attributes"]["last_checkin"] + server_checkin_date = int(obj["subscription_facet_attributes"]["last_checkin"].split()[0]) query_checkin_date = date.today() - timedelta(days=timeline) - if query_checkin_day < server_checkin_date: + if query_checkin_date < server_checkin_date: print("This server responded within the query timeframe") else: - print("This server didn't respond since before query checkin date") + print("This server didn't respond since before query time") self.dispatch_trigger(obj['certname'], server_checkin_date) else: print("Subscription facet attributes don't exist") From 73347aad64d89d84229b54e13c7b42f199b3de65 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 31 Jul 2020 15:00:40 -0400 Subject: [PATCH 15/28] fixing indentation --- sensors/encore_auto_remediate_sensors.py | 78 ++++++++++++------------ 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index 2855f1a..d5675c7 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -4,34 +4,34 @@ from datetime import datetime, timedelta, date class EncoreAutoRemediateSensor(PollingSensor): - def __init__(self, sensor_service, config=None, poll_interval=None): - super(EncoreAutoRemediateSensor, self).__init__(sensor_service=sensor_service, config=config, poll_interval=poll_interval) - self._logger = self._sensor_service.get_logger(__name__) - self._trigger_ref = 'foreman.auto_remediate_satellite' + def __init__(self, sensor_service, config=None, poll_interval=None): + super(EncoreAutoRemediateSensor, self).__init__(sensor_service=sensor_service, config=config, poll_interval=poll_interval) + self._logger = self._sensor_service.get_logger(__name__) + self._trigger_ref = 'foreman.auto_remediate_satellite' - def setup(self): - USERNAME = self._config['connections']['username'] - PASSWORD = self._config['connections']['password'] - SERVER = self._config['connections']['server'] - SSL_VERIFY = False - queries = self._config['auto_remediate_sensor_queries'] - - def poll(self): + def setup(self): + USERNAME = self._config['connections']['username'] + PASSWORD = self._config['connections']['password'] + SERVER = self._config['connections']['server'] + SSL_VERIFY = False + queries = self._config['auto_remediate_sensor_queries'] + + def poll(self): session = requests.Session() response = session.get(SERVER) response.raise_for_status() result = response.json()["results"] - + for query in queries: query_date = query['days'] timeline = query_date query_date = int(timeline.split()[0]) - + for obj in result: if "subscription_facet_attributes" in obj: server_checkin_date = int(obj["subscription_facet_attributes"]["last_checkin"].split()[0]) query_checkin_date = date.today() - timedelta(days=timeline) - + if query_checkin_date < server_checkin_date: print("This server responded within the query timeframe") else: @@ -39,31 +39,31 @@ def poll(self): self.dispatch_trigger(obj['certname'], server_checkin_date) else: print("Subscription facet attributes don't exist") - + - def dispatch_trigger(self, server_name, last_checkin): - trigger = self._trigger_ref - - payload = { - 'server_name': server_name, - 'last_checkin': last_checkin - } - - self.sensor_service.dispatch(trigger=trigger, payload=payload) - - def cleanup(self): - # This is called when the st2 system goes down. You can perform cleanup operations like - # closing the connections to external system here. - pass + def dispatch_trigger(self, server_name, last_checkin): + trigger = self._trigger_ref + + payload = { + 'server_name': server_name, + 'last_checkin': last_checkin + } + + self.sensor_service.dispatch(trigger=trigger, payload=payload) + + def cleanup(self): + # This is called when the st2 system goes down. You can perform cleanup operations like + # closing the connections to external system here. + pass - def add_trigger(self, trigger): - # This method is called when trigger is created - pass + def add_trigger(self, trigger): + # This method is called when trigger is created + pass - def update_trigger(self, trigger): - # This method is called when trigger is updated - pass + def update_trigger(self, trigger): + # This method is called when trigger is updated + pass - def remove_trigger(self, trigger): - # This method is called when trigger is deleted - pass + def remove_trigger(self, trigger): + # This method is called when trigger is deleted + pass From 319fb50d78ebb9bd70f7f7351eb2ce0b3883859a Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Tue, 4 Aug 2020 11:06:34 -0400 Subject: [PATCH 16/28] fixed indentation --- sensors/encore_auto_remediate_sensors.py | 117 ++++++++++++----------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py index d5675c7..9718074 100644 --- a/sensors/encore_auto_remediate_sensors.py +++ b/sensors/encore_auto_remediate_sensors.py @@ -3,67 +3,68 @@ from st2reactor.sensor.base import PollingSensor from datetime import datetime, timedelta, date + class EncoreAutoRemediateSensor(PollingSensor): - def __init__(self, sensor_service, config=None, poll_interval=None): - super(EncoreAutoRemediateSensor, self).__init__(sensor_service=sensor_service, config=config, poll_interval=poll_interval) - self._logger = self._sensor_service.get_logger(__name__) - self._trigger_ref = 'foreman.auto_remediate_satellite' + def __init__(self, sensor_service, config=None, poll_interval=None): + super(EncoreAutoRemediateSensor, self).__init__( + sensor_service=sensor_service, config=config, poll_interval=poll_interval + ) + self._logger = self._sensor_service.get_logger(__name__) + self._trigger_ref = "foreman.auto_remediate_satellite" + + def setup(self): + USERNAME = self._config["connections"]["username"] + PASSWORD = self._config["connections"]["password"] + SERVER = self._config["connections"]["server"] + SSL_VERIFY = False + queries = self._config["auto_remediate_sensor_queries"] + + def poll(self): + session = requests.Session() + response = session.get(SERVER) + response.raise_for_status() + result = response.json()["results"] + + for query in queries: + query_date = query["days"] + timeline = query_date + query_date = int(timeline.split()[0]) + + for obj in result: + if "subscription_facet_attributes" in obj: + server_checkin_date = int( + obj["subscription_facet_attributes"]["last_checkin"].split()[0] + ) + query_checkin_date = date.today() - timedelta(days=timeline) + + if query_checkin_date < server_checkin_date: + print("This server responded within the query timeframe") + else: + print("This server didn't respond since before query time") + self.dispatch_trigger(obj["certname"], server_checkin_date) + else: + print("Subscription facet attributes don't exist") + + def dispatch_trigger(self, server_name, last_checkin): + trigger = self._trigger_ref + + payload = {"server_name": server_name, "last_checkin": last_checkin} - def setup(self): - USERNAME = self._config['connections']['username'] - PASSWORD = self._config['connections']['password'] - SERVER = self._config['connections']['server'] - SSL_VERIFY = False - queries = self._config['auto_remediate_sensor_queries'] - - def poll(self): - session = requests.Session() - response = session.get(SERVER) - response.raise_for_status() - result = response.json()["results"] - - for query in queries: - query_date = query['days'] - timeline = query_date - query_date = int(timeline.split()[0]) - - for obj in result: - if "subscription_facet_attributes" in obj: - server_checkin_date = int(obj["subscription_facet_attributes"]["last_checkin"].split()[0]) - query_checkin_date = date.today() - timedelta(days=timeline) - - if query_checkin_date < server_checkin_date: - print("This server responded within the query timeframe") - else: - print("This server didn't respond since before query time") - self.dispatch_trigger(obj['certname'], server_checkin_date) - else: - print("Subscription facet attributes don't exist") - + self.sensor_service.dispatch(trigger=trigger, payload=payload) - def dispatch_trigger(self, server_name, last_checkin): - trigger = self._trigger_ref - - payload = { - 'server_name': server_name, - 'last_checkin': last_checkin - } - - self.sensor_service.dispatch(trigger=trigger, payload=payload) - - def cleanup(self): - # This is called when the st2 system goes down. You can perform cleanup operations like - # closing the connections to external system here. - pass + def cleanup(self): + # This is called when the st2 system goes down. You can perform cleanup operations like + # closing the connections to external system here. + pass - def add_trigger(self, trigger): - # This method is called when trigger is created - pass + def add_trigger(self, trigger): + # This method is called when trigger is created + pass - def update_trigger(self, trigger): - # This method is called when trigger is updated - pass + def update_trigger(self, trigger): + # This method is called when trigger is updated + pass - def remove_trigger(self, trigger): - # This method is called when trigger is deleted - pass + def remove_trigger(self, trigger): + # This method is called when trigger is deleted + pass From a20201838611f16659bc1f17d911dd6c51b0e0bc Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 10 Aug 2020 08:57:13 -0400 Subject: [PATCH 17/28] updated config and sensor --- config.schema.yaml | 25 +++---- sensors/foreman_auto_remediate_sensor.py | 79 ++++++++++++++++++++++ sensors/foreman_auto_remediate_sensor.yaml | 17 +++++ 3 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 sensors/foreman_auto_remediate_sensor.py create mode 100644 sensors/foreman_auto_remediate_sensor.yaml diff --git a/config.schema.yaml b/config.schema.yaml index 2cdb3a0..4f8b39b 100644 --- a/config.schema.yaml +++ b/config.schema.yaml @@ -1,6 +1,6 @@ --- foreman: - type: "object" + type: object required: true patternProperties: "^\\w+": @@ -8,7 +8,7 @@ foreman: additionalProperties: false connections: - type: "object" + type: object properties: server: type: string @@ -23,16 +23,13 @@ connections: description: "Password to login to the server" required: true secret: true - -auto_remediate_sensor_queries: - description: "List of queries" - type: "array" + additionalProperties: false + +query: + type: object required: true - items: - type: "object" - required: true - properties: - days: - type: string - description: "Date of last response" - required: true + properties: + days: + type: string + description: "Days since last response" + required: true diff --git a/sensors/foreman_auto_remediate_sensor.py b/sensors/foreman_auto_remediate_sensor.py new file mode 100644 index 0000000..dd7d220 --- /dev/null +++ b/sensors/foreman_auto_remediate_sensor.py @@ -0,0 +1,79 @@ +import json +import requests +from st2reactor.sensor.base import PollingSensor +from datetime import datetime, timedelta, date + + +class ForemanAutoRemediateSensor(PollingSensor): + def __init__(self, sensor_service, config=None, poll_interval=None): + + super(ForemanAutoRemediateSensor, self).__init__( + sensor_service=sensor_service, config=config, poll_interval=poll_interval + ) + self._logger = self._sensor_service.get_logger(__name__) + self._trigger_ref = "foreman.auto_remediate_satellite" + + def setup(self): + + self._USERNAME = self._config["foreman"]["dev"]["username"] + self._PASSWORD = self._config["foreman"]["dev"]["password"] + self._SERVER = self._config["foreman"]["dev"]["server"] + self._SSL_VERIFY = False + self._query = self._config["query"]['days'] + self._url = "http://{}/".format(self._SERVER) + self._url = self._url + "api/hosts" + + def poll(self): + + session = requests.Session() + session.auth = (self._USERNAME, self._PASSWORD) + session.verify = self._SSL_VERIFY + response = session.get(self._url) + response.raise_for_status() + result = response.json() + result_json = json.dumps(result) + parsed = json.loads(result_json) + + output_parse = json.dumps(parsed, indent=4, sort_keys=True) + parsed_list = parsed["results"] + + query_date = int(self._query.split()[0]) + + for obj in parsed_list: + print(obj) + if "subscription_facet_attributes" in obj: + server_checkin_date = obj["subscription_facet_attributes"]["last_checkin"] + query_checkin_date = date.today() - timedelta(days=query_date) + + if query_checkin_date < server_checkin_date: + print("This server responded within the query timeframe") + + else: + print("This server didn't respond since before query checkin date") + self.dispatch_trigger(obj["certname"], server_checkin_date) + else: + print("Subscription facet attributes don't exist") + + def dispatch_trigger(self, server_name, last_checkin): + + trigger = self._trigger_ref + payload = {"server_name": server_name, "last_checkin": last_checkin} + + self.sensor_service.dispatch(trigger=trigger, payload=payload) + + def cleanup(self): + # This is called when the st2 system goes down. You can perform cleanup operations like + # closing the connections to external system here. + pass + + def add_trigger(self, trigger): + # This method is called when trigger is created + pass + + def update_trigger(self, trigger): + # This method is called when trigger is updated + pass + + def remove_trigger(self, trigger): + # This method is called when trigger is deleted + pass diff --git a/sensors/foreman_auto_remediate_sensor.yaml b/sensors/foreman_auto_remediate_sensor.yaml new file mode 100644 index 0000000..bf07024 --- /dev/null +++ b/sensors/foreman_auto_remediate_sensor.yaml @@ -0,0 +1,17 @@ +--- + class_name: "ForemanAutoRemediateSensor" + entry_point: "foreman_auto_remediate_sensor.py" + description: "Sensor to check to make sure servers are responding" + poll_interval: 100000 + trigger_types: + - + name: "auto_remediate_satellite" + description: "Trigger to remediate hosts that aren't responding" + + payload_schema: + type: "object" + properties: + server_name: + type: "string" + last_checkin: + type: "string" From d01244291baa425c3d84db6c8275514e63338cfc Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 10 Aug 2020 08:58:25 -0400 Subject: [PATCH 18/28] file names changed --- sensors/encore_auto_remediate_sensors.py | 70 ---------------------- sensors/encore_auto_remediate_sensors.yaml | 17 ------ 2 files changed, 87 deletions(-) delete mode 100644 sensors/encore_auto_remediate_sensors.py delete mode 100644 sensors/encore_auto_remediate_sensors.yaml diff --git a/sensors/encore_auto_remediate_sensors.py b/sensors/encore_auto_remediate_sensors.py deleted file mode 100644 index 9718074..0000000 --- a/sensors/encore_auto_remediate_sensors.py +++ /dev/null @@ -1,70 +0,0 @@ -import json -import requests -from st2reactor.sensor.base import PollingSensor -from datetime import datetime, timedelta, date - - -class EncoreAutoRemediateSensor(PollingSensor): - def __init__(self, sensor_service, config=None, poll_interval=None): - super(EncoreAutoRemediateSensor, self).__init__( - sensor_service=sensor_service, config=config, poll_interval=poll_interval - ) - self._logger = self._sensor_service.get_logger(__name__) - self._trigger_ref = "foreman.auto_remediate_satellite" - - def setup(self): - USERNAME = self._config["connections"]["username"] - PASSWORD = self._config["connections"]["password"] - SERVER = self._config["connections"]["server"] - SSL_VERIFY = False - queries = self._config["auto_remediate_sensor_queries"] - - def poll(self): - session = requests.Session() - response = session.get(SERVER) - response.raise_for_status() - result = response.json()["results"] - - for query in queries: - query_date = query["days"] - timeline = query_date - query_date = int(timeline.split()[0]) - - for obj in result: - if "subscription_facet_attributes" in obj: - server_checkin_date = int( - obj["subscription_facet_attributes"]["last_checkin"].split()[0] - ) - query_checkin_date = date.today() - timedelta(days=timeline) - - if query_checkin_date < server_checkin_date: - print("This server responded within the query timeframe") - else: - print("This server didn't respond since before query time") - self.dispatch_trigger(obj["certname"], server_checkin_date) - else: - print("Subscription facet attributes don't exist") - - def dispatch_trigger(self, server_name, last_checkin): - trigger = self._trigger_ref - - payload = {"server_name": server_name, "last_checkin": last_checkin} - - self.sensor_service.dispatch(trigger=trigger, payload=payload) - - def cleanup(self): - # This is called when the st2 system goes down. You can perform cleanup operations like - # closing the connections to external system here. - pass - - def add_trigger(self, trigger): - # This method is called when trigger is created - pass - - def update_trigger(self, trigger): - # This method is called when trigger is updated - pass - - def remove_trigger(self, trigger): - # This method is called when trigger is deleted - pass diff --git a/sensors/encore_auto_remediate_sensors.yaml b/sensors/encore_auto_remediate_sensors.yaml deleted file mode 100644 index 1f9a3e4..0000000 --- a/sensors/encore_auto_remediate_sensors.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- - class_name: "EncoreAutoRemediateSensor" - entry_point: "encore_auto_remediate_sensor.py" - description: "Sensor to check to make sure servers are responding" - poll_interval: 300 - trigger_types: - - - name: "auto_remediate_satellite" - description: "Trigger to remediate hosts that aren't responding" - - payload_schema: - type: "object" - properties: - server_name: - type: "string" - last_checkin: - type: "string" From 3c1f88fb6c63168d4f13480600cd3e725d447451 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Mon, 10 Aug 2020 09:25:34 -0400 Subject: [PATCH 19/28] check for response status code --- sensors/foreman_auto_remediate_sensor.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sensors/foreman_auto_remediate_sensor.py b/sensors/foreman_auto_remediate_sensor.py index dd7d220..32eae03 100644 --- a/sensors/foreman_auto_remediate_sensor.py +++ b/sensors/foreman_auto_remediate_sensor.py @@ -29,7 +29,10 @@ def poll(self): session.auth = (self._USERNAME, self._PASSWORD) session.verify = self._SSL_VERIFY response = session.get(self._url) - response.raise_for_status() + if response.status_code != 200: + print(response.raise_for_status) + exit() + result = response.json() result_json = json.dumps(result) parsed = json.loads(result_json) From 27627db976a6a13abef7b8be70049f2e8069608f Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Tue, 11 Aug 2020 08:54:41 -0400 Subject: [PATCH 20/28] sensor working --- sensors/foreman_auto_remediate_sensor.py | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/sensors/foreman_auto_remediate_sensor.py b/sensors/foreman_auto_remediate_sensor.py index 32eae03..6ae8720 100644 --- a/sensors/foreman_auto_remediate_sensor.py +++ b/sensors/foreman_auto_remediate_sensor.py @@ -19,7 +19,7 @@ def setup(self): self._PASSWORD = self._config["foreman"]["dev"]["password"] self._SERVER = self._config["foreman"]["dev"]["server"] self._SSL_VERIFY = False - self._query = self._config["query"]['days'] + self._query = self._config["query"]["days"] self._url = "http://{}/".format(self._SERVER) self._url = self._url + "api/hosts" @@ -36,23 +36,31 @@ def poll(self): result = response.json() result_json = json.dumps(result) parsed = json.loads(result_json) - + output_parse = json.dumps(parsed, indent=4, sort_keys=True) parsed_list = parsed["results"] - query_date = int(self._query.split()[0]) - + query_date = int(self._query) + for obj in parsed_list: - print(obj) + # print(obj) if "subscription_facet_attributes" in obj: - server_checkin_date = obj["subscription_facet_attributes"]["last_checkin"] + server_checkin_date_uni = obj["subscription_facet_attributes"][ + "last_checkin" + ] + # print(type(server_checkin_date)) query_checkin_date = date.today() - timedelta(days=query_date) + # print(type(query_checkin_date)) + + server_checkin_date = datetime.strptime( + server_checkin_date_uni.split()[0], "%Y-%m-%d" + ).date() + # print(type(server_checkin_date)) if query_checkin_date < server_checkin_date: print("This server responded within the query timeframe") - else: - print("This server didn't respond since before query checkin date") + # print("This server didn't respond since before query checkin date") self.dispatch_trigger(obj["certname"], server_checkin_date) else: print("Subscription facet attributes don't exist") @@ -60,7 +68,7 @@ def poll(self): def dispatch_trigger(self, server_name, last_checkin): trigger = self._trigger_ref - payload = {"server_name": server_name, "last_checkin": last_checkin} + payload = {"server_name": server_name, "last_checkin": last_checkin.strftime("%m/%d/%Y")} self.sensor_service.dispatch(trigger=trigger, payload=payload) From 2a36d3ffed64c69c847b0b480ef546e3f57b6575 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Wed, 12 Aug 2020 09:00:32 -0400 Subject: [PATCH 21/28] remediate_sensor_rule --- rules/remediate_satellite.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 rules/remediate_satellite.yaml diff --git a/rules/remediate_satellite.yaml b/rules/remediate_satellite.yaml new file mode 100644 index 0000000..d1351c9 --- /dev/null +++ b/rules/remediate_satellite.yaml @@ -0,0 +1,14 @@ +--- +name: "remediate_satellite" +pack: "foreman" +description: "Remediate Satellite hosts that haven't checked in" +enabled : true + +trigger: + type: "foreman.auto_remediate_satellite" + parameters: {} + +action: + ref: core.local + parameters: + cmd: date From 66a643357177a4457c58cd19b8d09f039ea73ede Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 12:26:30 -0400 Subject: [PATCH 22/28] Created workflow to cmd date remotely --- actions/auto_remediate_satellite.yaml | 24 ++++++++++++ .../workflows/auto_remediate_satellite.yaml | 37 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 actions/auto_remediate_satellite.yaml create mode 100644 actions/workflows/auto_remediate_satellite.yaml diff --git a/actions/auto_remediate_satellite.yaml b/actions/auto_remediate_satellite.yaml new file mode 100644 index 0000000..50065f5 --- /dev/null +++ b/actions/auto_remediate_satellite.yaml @@ -0,0 +1,24 @@ +--- +name: auto_remediate_satellite +runner_type: orquesta +description: "Remediate satellite hosts" +enabled: true +entry_point: workflows/auto_remediate_satellite.yaml +name: auto_remediate_satellite +pack: foreman +parameters: + server_name: + type: string + description: "Server name of host" + required: true + username: + type: string + description: "Username" + required: true + default: "{{ st2kv.system.linux.username }}" + password: + type: string + description: "Password" + required: true + secret: true + default: "{{ st2kv.system.linux.password | decrypt_kv }}" diff --git a/actions/workflows/auto_remediate_satellite.yaml b/actions/workflows/auto_remediate_satellite.yaml new file mode 100644 index 0000000..c450ff9 --- /dev/null +++ b/actions/workflows/auto_remediate_satellite.yaml @@ -0,0 +1,37 @@ +--- +version: 1.0 + +description: Remediate Satellite hosts that haven't checked in + +input: + - server_name + - username + - password + +output: + - username: <% ctx().username %> + - password: <% ctx().password %> + - server_name: <% ctx().server_name %> + +tasks: + + task1: + action: core.echo message=<% ctx().server_name %> + next: + - when: <% succeeded() %> + publish: <% result().stdout %> + do: + - task2 + + task2: + action: core.remote + input: + hosts: <% ctx().server_name %> + username: <% ctx().username %> + password: <% ctx().password %> + cmd: date + next: + - when: <% succeeded() %> + publish: <% result() %> + do: + - noop From f00df0c6ddc24c3725d654364f3ff57d72760926 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 12:28:26 -0400 Subject: [PATCH 23/28] rule update --- rules/remediate_satellite.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/remediate_satellite.yaml b/rules/remediate_satellite.yaml index d1351c9..66307e0 100644 --- a/rules/remediate_satellite.yaml +++ b/rules/remediate_satellite.yaml @@ -9,6 +9,6 @@ trigger: parameters: {} action: - ref: core.local + ref: "foreman.auto_remediate_satellite" parameters: - cmd: date + server_name: "nor1devsst03.dev.encore.tech" From 611bc1928b2c89e368f10d3ef54e80d06f33384b Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 13:05:13 -0400 Subject: [PATCH 24/28] Added first action, command not found error --- actions/workflows/auto_remediate_satellite.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/actions/workflows/auto_remediate_satellite.yaml b/actions/workflows/auto_remediate_satellite.yaml index c450ff9..d0baeef 100644 --- a/actions/workflows/auto_remediate_satellite.yaml +++ b/actions/workflows/auto_remediate_satellite.yaml @@ -19,7 +19,7 @@ tasks: action: core.echo message=<% ctx().server_name %> next: - when: <% succeeded() %> - publish: <% result().stdout %> + publish: <% result().result() %> do: - task2 @@ -29,7 +29,7 @@ tasks: hosts: <% ctx().server_name %> username: <% ctx().username %> password: <% ctx().password %> - cmd: date + cmd: subscription-manager-status next: - when: <% succeeded() %> publish: <% result() %> From 87c3e16b843048a6df110fbf4c9d35cee21f9e63 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 14:16:57 -0400 Subject: [PATCH 25/28] task 5 error --- .../workflows/auto_remediate_satellite.yaml | 60 +++++++++++++++++-- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/actions/workflows/auto_remediate_satellite.yaml b/actions/workflows/auto_remediate_satellite.yaml index d0baeef..49e8f0b 100644 --- a/actions/workflows/auto_remediate_satellite.yaml +++ b/actions/workflows/auto_remediate_satellite.yaml @@ -16,20 +16,72 @@ output: tasks: task1: - action: core.echo message=<% ctx().server_name %> + action: core.echo + input: + message: <% ctx().server_name %> next: - when: <% succeeded() %> - publish: <% result().result() %> + publish: <% result().stdout() %> do: - task2 - task2: action: core.remote input: hosts: <% ctx().server_name %> username: <% ctx().username %> password: <% ctx().password %> - cmd: subscription-manager-status + cmd: subscription-manager status + next: + - when: <% succeeded() %> + publish: <% result() %> + do: + - task3 + task3: + action: core.remote + input: + hosts: <% ctx().server_name %> + username: <% ctx().username %> + password: <% ctx().password %> + cmd: subscription-manager identity + next: + - when: <% succeeded() %> + publish: <% result() %> + do: + - task4 + + task4: + action: core.remote + input: + hosts: <% ctx().server_name %> + username: <% ctx().username %> + password: <% ctx().password %> + cmd: subscription-manager unregister + next: + - when: <% succeeded() %> + publish: <% result() %> + do: + - task5 + + task5: + action: core.remote + input: + hosts: <% ctx().server_name %> + username: <% ctx().username %> + password: <% ctx().password %> + cmd: subscription-manager register --org="EMS" --activationkey="RHEL_7" + next: + - when: <% succeeded() %> + publish: <% result() %> + do: + - task6 + + task6: + action: core.remote + input: + hosts: <% ctx().server_name %> + username: <% ctx().username %> + password: <% ctx().password %> + cmd: subscription-manager list --consumed next: - when: <% succeeded() %> publish: <% result() %> From 8733b7864a8eb335b6f46f023ad23d1f2855427e Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 14:46:12 -0400 Subject: [PATCH 26/28] Final changes --- sensors/foreman_auto_remediate_sensor.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sensors/foreman_auto_remediate_sensor.py b/sensors/foreman_auto_remediate_sensor.py index 6ae8720..c375355 100644 --- a/sensors/foreman_auto_remediate_sensor.py +++ b/sensors/foreman_auto_remediate_sensor.py @@ -42,8 +42,10 @@ def poll(self): query_date = int(self._query) + count = 0 + for obj in parsed_list: - # print(obj) + if "subscription_facet_attributes" in obj: server_checkin_date_uni = obj["subscription_facet_attributes"][ "last_checkin" @@ -62,8 +64,10 @@ def poll(self): else: # print("This server didn't respond since before query checkin date") self.dispatch_trigger(obj["certname"], server_checkin_date) + count += 1 else: print("Subscription facet attributes don't exist") + print("This is count: " + str(count)) def dispatch_trigger(self, server_name, last_checkin): From 715275022ed4f2a5ca222b3ef27d93a145a08449 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 14:58:47 -0400 Subject: [PATCH 27/28] Changes made --- CHANGES.md | 12 ++++++++++++ rules/remediate_satellite.yaml | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 CHANGES.md diff --git a/CHANGES.md b/CHANGES.md new file mode 100644 index 0000000..9e3babb --- /dev/null +++ b/CHANGES.md @@ -0,0 +1,12 @@ + +--- + +- Created a Sensor to get hosts that have not responded +- Created a Trigger sending the server_name and last_checkin time for the server if the server has not responded +- Added a rule to match the trigger and link with the remediation workflow +- Created an orquesta workflow to remote run commands to troubleshoot satellite servers + + +NOTE: + +- need to figure out way to not trigger virt-who hosts diff --git a/rules/remediate_satellite.yaml b/rules/remediate_satellite.yaml index 66307e0..0b0bbdb 100644 --- a/rules/remediate_satellite.yaml +++ b/rules/remediate_satellite.yaml @@ -11,4 +11,4 @@ trigger: action: ref: "foreman.auto_remediate_satellite" parameters: - server_name: "nor1devsst03.dev.encore.tech" + server_name: "{{ trigger.server_name }}" From acbaf189fc4b6a749be5c5af3a8f6b97f6ec9998 Mon Sep 17 00:00:00 2001 From: shobhitm23 Date: Fri, 14 Aug 2020 15:03:43 -0400 Subject: [PATCH 28/28] removing Changes.md --- CHANGES.md | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 CHANGES.md diff --git a/CHANGES.md b/CHANGES.md deleted file mode 100644 index 9e3babb..0000000 --- a/CHANGES.md +++ /dev/null @@ -1,12 +0,0 @@ - ---- - -- Created a Sensor to get hosts that have not responded -- Created a Trigger sending the server_name and last_checkin time for the server if the server has not responded -- Added a rule to match the trigger and link with the remediation workflow -- Created an orquesta workflow to remote run commands to troubleshoot satellite servers - - -NOTE: - -- need to figure out way to not trigger virt-who hosts