Création d'un classeur pour le repérage
Créez un runbook pour analyser et identifier les répertoires de base Apache Tomcat installés sur les ressources dans Fleet Application Management.
Exemple de script pour le repérage d'un produit
import json
import os
import subprocess
import datetime
class TOMCAT:
def _get_all_tomcats(self):
command = ['find', '/', '-type', 'd', '-name', 'webapps']
sp = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
tomcat_paths = sp.stdout.decode("utf-8").strip().replace('/webapps', '').split('\n')
#tomcat_paths=[path for path in tomcat_paths if not 'backup' in path]
return tomcat_paths
def _get_details(self, path):
tomcat_details = dict()
try:
command = f'{path}/bin/version.sh'
sp = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = sp.communicate(timeout=10)
info_list = stdout.decode("utf-8")
for line in info_list.splitlines():
if ':' in line:
key, value = line.split(':', 1)
tomcat_details[key.strip()] = value.strip()
return tomcat_details
except Exception as E:
pass
def _get_timestamp(self, file_path):
if os.path.exists(file_path):
timestamp = os.path.getmtime(file_path)
modified_date = datetime.datetime.fromtimestamp(timestamp).strftime("%Y-%d-%m %H:%M:%S")
return modified_date
def _get_java_details(self):
try:
java_details = dict()
command = "java -version 2>&1 | head -n 1"
sp = subprocess.run(command, shell=True, stdout=subprocess.PIPE)
java_version = sp.stdout.decode("utf-8").split('"')[1]
# Getting Java Home
command = "java -XshowSettings:properties -version 2>&1 | sed '/^[[:space:]]*java\.home/!d;s/^[[:space:]]*java\.home[[:space:]]*=[[:space:]]*//'"
sp = subprocess.run(command, shell=True, stdout=subprocess.PIPE)
java_home = sp.stdout.decode("utf-8").replace("\n", '')
java_details['java_home'] = java_home
java_details['java_version'] = java_version.split('_')[0]
return java_details
except Exception as E:
pass
def _instance(self, path, new_version_exists):
properties = []
installed_patches = []
tomcat_details = self._get_details(path)
instance = {"product": "Apache Tomcat"}
instance.update({"version": '.'.join(tomcat_details['Server number'].split('.')[:2])})
instance.update({"target_name": path})
instance.update({"resource_name": ""})
instance.update({"components": []})
instance.update({"available_patches": []})
if new_version_exists:
installed_patches = [
{
"patch_name": tomcat_details['Server number'],
"patch_applied_dt": self._get_timestamp(path),
"patch_description": tomcat_details['Server number'],
"patch_type":"Critical Patch Update",
"released_date":self._get_timestamp(path),
"severity":"CRITICAL"
}
]
else:
installed_patches = [
{
"patch_name": tomcat_details['Server number'],
"patch_applied_dt": self._get_timestamp(path),
"patch_description": tomcat_details['Server number'],
"patch_type": "Critical Patch Update"
}
]
instance.update({"installed_patches": installed_patches})
for key, value in self._get_java_details().items():
properties.append({"property_name": key, "property_value": value})
instance.update({"properties": properties})
return instance
def _discovery_tomcat(self):
targets = []
tomcat_paths = self._get_all_tomcats()
new_version_exists = any(['backup' in path for path in tomcat_paths])
for path in tomcat_paths:
if not 'backup' in path:
targets.append(self._instance(path, new_version_exists))
discovery_output = ({"targets": targets})
return discovery_output
if __name__ == "__main__":
SCRIPTS_DIR = "/opt/fams/.scripts"
os.makedirs(SCRIPTS_DIR, exist_ok=True)
tomcat = TOMCAT()
tomcat_output = tomcat._discovery_tomcat()
json_obj = json.dumps(tomcat_output, indent=4)
print(json_obj)
with open("{}/tomcat_discovery.json".format(SCRIPTS_DIR), 'wb') as outfile:
outfile.write(json_obj.encode())
Exemple de fichier JSON pour le repérage
Voici un exemple de représentation JSON d'Apache Tomcat que Fleet Application Management analyse pour son repérage.
{
"compartmentId": "<your_root_compartment_ocid>",
"displayName": "Apache Tomcat Discovery",
"description": "Runbook to discovery Apache Tomcat Product Homes on an instance",
"operation": "DISCOVERY",
"runbookRelevance": "PRODUCT",
"platform": "Apache Tomcat",
"isDefault": false,
"osType": "LINUX",
"estimatedTime": "1",
"associations": {
"groups": [
{
"name": "Parallel_resource_group",
"type": "PARALLEL_RESOURCE_GROUP",
"properties": {
"actionOnFailure": "ABORT",
"condition": null
}
}
],
"tasks": [
{
"stepName": "Apache_Tomcat_discovery_task",
"associationType": "TASK",
"taskRecordDetails": {
"scope": "LOCAL",
"executionDetails": {
"executionType": "SCRIPT",
"variables": null,
"content": {
"sourceType": "OBJECT_STORAGE_BUCKET",
"namespaceName": "mytenancynamespace",
"bucketName": "demo_bucket",
"objectName": "my_apache_tomcat_discovery.zip",
"checksum": "APLIeko3yTq4CXNWzxcVKvHg=="
},
"command": "unzip -o -q my_apache_tomcat_discovery.zip; chmod +x apache_tomcat_discovery.py ; python apache_tomcat_discovery.py",
"credentials": []
},
"description": null,
"platform": "Apache Tomcat",
"isCopyToLibraryEnabled": false,
"osType": "LINUX",
"properties": {
"numRetries": 0,
"timeoutInSeconds": 3000
},
"isDiscoveryOutputTask": true,
"isApplySubjectTask": false,
"name": "Apache Tomcat_discovery_task"
},
"stepProperties": {
"actionOnFailure": "ABORT",
"condition": null
},
"outputVariableMappings": []
}
],
"executionWorkflowDetails": {
"workflow": [
{
"groupName": "Parallel_resource_group",
"type": "PARALLEL_RESOURCE_GROUP",
"steps": [
{
"type": "TASK",
"stepName": "Apache_Tomcat_discovery_task"
}
]
}
]
}
}
}
Exemple YAML pour le repérage
Voici un exemple de représentation YAML d'Apache Tomcat que Fleet Application Management analyse pour son repérage.
compartmentId: <your_root_compartment_ocid>
displayName: Apache Tomcat Discovery
description: Runbook to discovery Apache Tomcat Product Homes on an instance
operation: DISCOVERY
runbookRelevance: PRODUCT
platform: Apache Tomcat
isDefault: false
osType: LINUX
estimatedTime: "1"
associations:
groups:
- name: Parallel_resource_group
type: PARALLEL_RESOURCE_GROUP
properties:
actionOnFailure: ABORT
condition: null
tasks:
- stepName: Apache_Tomcat_discovery_task
associationType: TASK
taskRecordDetails:
scope: LOCAL
executionDetails:
executionType: SCRIPT
variables: null
content:
sourceType: OBJECT_STORAGE_BUCKET
namespaceName: mytenancynamespace
bucketName: demo_bucket
objectName: my_apache_tomcat_discovery.zip
checksum: APLIeko3yTq4CXNWzxcVKvHg==
command: unzip -o -q my_apache_tomcat_discovery.zip; chmod +x
apache_tomcat_discovery.py ; python apache_tomcat_discovery.py
credentials: []
description: null
platform: Apache Tomcat
isCopyToLibraryEnabled: false
osType: LINUX
properties:
numRetries: 0
timeoutInSeconds: 3000
isDiscoveryOutputTask: true
isApplySubjectTask: false
name: Apache Tomcat_discovery_task
stepProperties:
actionOnFailure: ABORT
condition: null
outputVariableMappings: []
executionWorkflowDetails:
workflow:
- groupName: Parallel_resource_group
type: PARALLEL_RESOURCE_GROUP
steps:
- type: TASK
stepName: Apache_Tomcat_discovery_task