Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos Básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Automatize a aplicação de patches para o Apache Tomcat ou uma tecnologia de terceiros com o OCI Fleet Application Management
Introdução
O serviço Oracle Cloud Infrastructure (OCI) Fleet Application Management permite que as equipes de TI automatizem a descoberta de software e as operações de aplicação de patches para qualquer software implantado na OCI. O serviço fornece runbooks predefinidos para descobrir e aplicar patches às tecnologias Oracle, incluindo Oracle WebLogic Server, Oracle Linux e muito mais. Além disso, os runbooks personalizados e os recursos Traga Seu Próprio Produto permitem que você defina seu produto ou tecnologias a serem descobertos e corrigidos automaticamente pelo serviço.
Neste tutorial, estamos usando o Apache Tomcat como um exemplo de uma tecnologia popular de terceiros que você geralmente precisa corrigir. As seções a seguir fornecem instruções passo a passo e amostras de código reutilizáveis para orientá-lo sobre como adicionar o Apache Tomcat para ser descoberto automaticamente e aplicar patches usando o OCI Fleet Application Management. Você pode usar o mesmo processo para qualquer produto de terceiros que deseja corrigir com o serviço.
Observação: Estamos descrevendo o processo usando a Console do OCI, mas você também pode usar a Interface de Linha de Comando (CLI do OCI) ou a API do Oracle Cloud Infrastructure. Para obter informações sobre o OCI Fleet Application Management, consulte Fleet Application Management.
Conceitos Básicos de Aplicação de Patch no Apache Tomcat
O recurso Traga seu próprio produto facilita a integração de novos produtos no OCI Fleet Application Management, como software, tecnologias ou componentes de aplicativos de terceiros. Esse recurso permite a centralização da conformidade de patches e outras operações do ciclo de vida nesses vários componentes usando o serviço.
Usando o recurso Traga seu Próprio Produto, você primeiro criará seu produto personalizado no serviço junto com sua política de conformidade e patches disponíveis. Em seguida, usando runbooks personalizados, você criará os runbooks de descoberta e de aplicação de patches, permitindo automatizar o gerenciamento de conformidade daqui para frente.
Objetivos
- Automatize a aplicação de patches para o Apache Tomcat ou uma tecnologia de terceiros com o OCI Fleet Application Management.
Tarefa 1: Criar um Produto
-
Faça log-in na Console do OCI, navegue até Observabilidade e Gerenciamento e selecione Gerenciamento de Aplicativos de Frota.
-
Clique em Administração.
-
Em Gerenciamento de metadados, clique em Produtos e em Criar produto.
-
Insira as informações a seguir para o novo produto.
- Nome do Produto: Informe o nome do produto, evitando informações confidenciais, como chaves, etc.
- Versão(ões): Informe a versão.
- Tipos de Patch (Opcional): Selecione o tipo de patch.
- Produtos compatíveis (Opcional): Adicione produtos compatíveis.
- Componentes (Opcional): Selecione os componentes.
- Nomes da credencial (Opcional): Selecione o nome da credencial.
Tarefa 2: Definir uma Regra de Política de Conformidade de Patches
Uma política de conformidade de patch de software é criada automaticamente para cada novo produto. A política padrão não contém regras de política. Você pode editar a política para adicionar regras para especificar a condição a ser avaliada se um destino específico é compatível (se verdadeiro) ou não compatível (else). Você pode usar vários atributos de produto para definir as regras, como versão do produto, tipo de patch, severidade do patch, critérios de seleção de patch e período de tolerância. O status de conformidade do patch será reportado como indeterminado se você não criar regras de política.
-
Vá para a Console do OCI, navegue até Administração e clique em Política de Conformidade.
-
Selecione a política de conformidade do produto que você precisa modificar. (Sintaxe: Política de Conformidade do Nome do Produto).
-
Clique em Criar regra de política.
-
Informe a versão do produto e outros atributos a serem usados na condição.
Por exemplo, as regras de política podem ter a seguinte definição:
- Nome da regra: Digite
Apache Tomcat
. - Versão do Produto: Selecione 10.1 e superior.
- Tipo de patch: Selecione Patch Crítico.
- Severidade: Selecione CriticalPatch.
- Seleção de patch: Selecione Nível de Patch.
- Nome da regra: Digite
Tarefa 3: Criar Metadados de Patch e Fazer Upload do Patch
Crie os metadados de patch para tornar a aplicação de patch futura mais fácil para o produto adicionado. Em seguida, faça upload dos patches disponíveis para o OCI Object Storage. Dependendo da tecnologia e dos tipos de patches disponíveis para seu novo produto, você pode fazer upload de um patch genérico ou de pacotes específicos para diferentes configurações do sistema operacional.
-
Vá para a Console do OCI, navegue até Fleet Application Management, clique em Lifecycle Management e, em seguida, Patches.
-
Clique em Fazer Upload do Patch.
-
Digite as seguintes informações.
- Nome do patch: Informe um nome.
- Produto: Selecione um produto.
- Severidade: Selecione uma severidade.
- Selecione Patches dependentes para especificar os patches dependentes que serão corrigidos com o patch atual. Por exemplo, no caso do Apache Tomcat, o patch a seguir pode ser baixado como
apache-tomcat-10.1.25.tar.gz
a partir daqui: Repositório Central: org/apache/tomcat/tomcat/10.1.25.
Tarefa 4: Criar um Manual de Descoberta para um Produto
O serviço usa um manual de descoberta para identificar o software e a versão do produto adicionado. Por exemplo, no caso do Apache Tomcat, o script de runbook em Python para descobrir e coletar detalhes sobre instâncias do Apache Tomcat em um sistema pode ser o seguinte:
Tarefas no Script do Manual de Descoberta
O script realiza as seguintes tarefas:
- Verifica o sistema de arquivos para localizar instâncias do Apache Tomcat.
- Método (
_get_all_tomcats()
): Localiza instâncias do Apache Tomcat.- Usa o comando find para pesquisar no sistema de arquivos diretórios chamados webapps, que é característica das instalações do Apache Tomcat.
- Remove o sufixo
/webapps
para obter a raiz do caminho do Apache Tomcat. - Filtra caminhos que contêm backup para evitar resultados redundantes ou irrelevantes.
- Saída: Retorna uma lista de caminhos de instalação do Apache Tomcat.
- Extrai detalhes da versão e metadados de cada instância.
- Cria um dicionário de instâncias detalhado para uma instância do Apache Tomcat.
- Descobre e agrega todas as instâncias do Apache Tomcat.
- Coleta informações sobre o ambiente Java associado.
- Retorna todos os dados no formato JSON que você pode usar para geração de relatórios ou processamento adicional.
- Trata erros.
Detalhamento de Principais Tarefas
-
Localize Instâncias do Apache Tomcat.
-
Extrair detalhes da versão do Apache Tomcat.
- Método (
_get_details(path)
):- Executa o script
version.sh
no diretório bin de cada caminho do Apache Tomcat. - Analisa a saída para extrair detalhes da chave (por exemplo, número da versão) em um dicionário.
- Lida com erros: Quaisquer exceções durante a execução ou análise são ignoradas silenciosamente.
- Executa o script
- Saída: Retorna um dicionário de metadados do Apache Tomcat (por exemplo, número do servidor).
- Método (
-
Recuperar timestamp de modificação de arquivo.
- Método
_get_timestamp(file_path)
:- Verifica se um determinado arquivo existe e recupera seu último horário de modificação.
- Formata o timestamp no formato
dd-MMM-yyyy
HH:mm:ss
.
- Saída: Retorna o timestamp formatado.
- Método
-
Obtenha detalhes do ambiente Java.
- Método
_get_java_details()
:- Usa comandos do sistema para extrair a versão do Java e o caminho do home do Java.
- Versão Java: Obtida com
java -version
. - Caminho do home do Java: Extraído das propriedades do runtime java.
- Versão Java: Obtida com
- Usa comandos do sistema para extrair a versão do Java e o caminho do home do Java.
- Saída: Retorna um dicionário com
java_version
ejava_home
.
- Método
-
Crie um dicionário de instâncias detalhado.
- Método
_instance(path)
:- Cria um dicionário que representa uma única instância do Apache Tomcat.
- Detalhes do produto: Nome, versão, caminho de destino etc.
- Patches instalados: Inclui a versão e a data da última modificação do diretório.
- Propriedades Java: Inclui
java_version
ejava_home
.
- Cria um dicionário que representa uma única instância do Apache Tomcat.
- Saída: Retorna um dicionário estruturado para a instância do Apache Tomcat.
- Método
-
Descubra e agregue todas as instâncias.
- Método
_discovery_tomcat()
:- Chama
_get_all_tomcats()
para localizar caminhos do Apache Tomcat. - Itera em cada caminho e chama
_instance(path)
para coletar detalhes. - Agrega todas as instâncias em uma lista de destinos.
- Chama
- Saída: Retorna um dicionário com todos os destinos descobertos.
- Método
-
Gerar saída.
- Grava os detalhes do Apache Tomcat descobertos em um arquivo JSON.
- Local:
/opt/fams/.scripts/tomcat_discovery.json
. - Formato: JSON pré-impresso.
- Local:
- Também imprime o objeto JSON no console para visibilidade imediata.
- Grava os detalhes do Apache Tomcat descobertos em um arquivo JSON.
Fluxo de script
-
Localizar instâncias do Apache Tomcat: O método
_get_all_tomcats()
verifica o sistema de arquivos. -
Recuperar detalhes de cada instância: Os métodos
_get_details()
e_instance()
extraem metadados relevantes. -
Coletar detalhes do Java: O método
_get_java_details()
extrai as propriedades do ambiente Java. -
Agregar dados: O método
_discovery_tomcat()
combina as informações de todas as instâncias. -
Gerar saída: Os resultados são salvos no formato JSON e impressos.
Exemplo de Saída:
{ "targets": [ { "product": "Tomcat", "version": "9.0", "target\_name": "/usr/local/tomcat", "resource\_name": "", "components": [], "available\_patches": [], "installed\_patches": [ { "patch\_name": "9.0.50", "patch\_applied\_dt": "19-Nov-2024 12:45:30", "patch\_description": "", "patch\_type": "", "severity": "" } ], "properties": [ { "property\_name": "java\_home", "property\_value": "/usr/lib/jvm/java-11-openjdk" }, { "property\_name": "java\_version", "property\_value": "11" } ] } ] }
-
Tratamento de erro:
- Falha silenciosa para a maioria das exceções (por exemplo, arquivos ausentes, erros de comando).
- Essa abordagem impede que o script seja encerrado prematuramente, mas pode ocultar erros durante a execução.
Exemplo: Script de Descoberta do Apache Tomcat no Python
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("%d-%b-%Y %H:%M:%S %z")
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):
properties = []
tomcat\_details = self.\_get\_details(path)
instance = {"product": "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": []})
installed\_patches = [
{
"patch\_name": tomcat\_details['Server number'],
"patch\_applied\_dt": self.\_get\_timestamp(path),
"patch\_description": "",
"patch\_type": "",
"severity": ""
}
]
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()
for path in tomcat\_paths:
instances = targets.append(self.\_instance(path))
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())
Depois de lidar com todos os erros, os produtos são associados a uma frota ou várias frotas para automatizar a descoberta e as operações. Quando um produto estiver na lista de usuários permitidos de uma frota, seu manual de descoberta padrão localizará e atualizará automaticamente o inventário de software com alvos do produto implantado em todos os recursos gerenciados.
Para criar um runbook, siga as etapas:
-
Vá para a Console do OCI, navegue até Fleet Application Management e clique em Ações e Controles.
-
Clique em Runbooks e Criar runbook.
-
Digite Nome, Descrição, Operação do ciclo de vida, Tipo de runbook e selecione Tipo de sistema operacional e Tempo de conclusão estimado.
-
Crie seu runbook usando o designer visual, faça upload de um arquivo YAML ou JSON ou faça referência ao seu script de automação existente por meio de tarefas de script Bash ou Python dentro do runbook. Por exemplo, a amostra fornecida é um manual para descobrir o Apache Tomcat.
-
Para runbooks do tipo descoberta, selecione Marcar isso como tarefa de saída de descoberta para permitir que o serviço leia e faça parsing da saída da tarefa para preencher o inventário de software.
Observação: O serviço só poderá fazer parsing da saída se o formato da saída for baseado no modelo de saída de descoberta.
Veja a seguir a saída JSON (
runbook\_Apache Tomcat\_discovery.json
) do produto.{ "id": "ocid1.famsrunbook.oc1.eu-frankfurt-1.xxxxxxxx", "displayName": "Apache Tomcat\_discovery", "description": null, "type": "USER\_DEFINED", "runbookRelevance": "PRODUCT", "operation": "DISCOVERY", "osType": "LINUX", "platform": "Apache Tomcat", "isDefault": false, "estimatedTime": "1", "lifecycleState": "INACTIVE", "lifecycleDetails": "{\"subState\":\"DRAFT\",\"message\":\"Draft runbook\"}", "timeCreated": "2024-11-19T13:03:20.376Z", "timeUpdated": "2024-11-19T13:03:20.376Z", "associations": { "tasks": [ { "stepName": "Apache\_Tomcat\_discovery\_task", "associationType": "TASK", "taskRecordDetails": { "scope": "LOCAL", "executionDetails": { "executionType": "SCRIPT", "variables": null, "content": { "sourceType": "OBJECT\_STORAGE\_BUCKET", "namespaceName": "xxxxxx", "namespaceName": "xxxxxx", "bucketName": "demo\_bucket", "objectName": "apache\_tomcat\_discovery\_demo.zip", "checksum": "xxxxxxxxxxxxx" }, "command": "unzip -o -q apache\_tomcat\_discovery\_demo.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": { "runOn": null, "condition": null, "actionOnFailure": "ABORT", "pauseDetails": null, "notificationPreferences": null }, "outputVariableMappings": [] } ], "groups": [ { "type": "PARALLEL\_RESOURCE\_GROUP", "name": "Parallel\_resource\_container", "properties": { "runOn": null, "condition": null, "actionOnFailure": "ABORT", "pauseDetails": null, "notificationPreferences": null } } ], "executionWorkflowDetails": { "workflow": [ { "groupName": "Parallel\_resource\_container", "type": "PARALLEL\_RESOURCE\_GROUP", "steps": [ { "type": "TASK", "stepName": "Apache\_Tomcat\_discovery\_task" } ] } ] }, "rollbackWorkflowDetails": null, "version": "1.0" }, "compartmentId": "xxxxxx", "region": "xxxxxxx", "freeformTags": {}, "definedTags": { "Oracle-Tags": { "CreatedBy": "xxxxxx", "CreatedOn": "2024-11-08T15:48:59.329Z" } }, "systemTags": {} }
-
Adicione mais tarefas para personalizar seu runbook conforme necessário.
Tarefa 5: Criar um Manual para Aplicar um Patch
Consulte a Tarefa 4 para criar um manual personalizado com sua sequência de aplicação de patches.
Depois de criar um produto com seus patches disponíveis e lógica de descoberta padrão, agora você pode criar um manual para aplicação de patches que inclua a sequência de automação específica dessa tecnologia e o processo de TI de sua organização. Em seguida, você definirá uma programação de manutenção para definir quando o runbook será acionado para corrigir alvos não compatíveis identificados em sua frota.
O script Bash (apache_tomcat_patching.sh
) que automatiza o processo de atualização de uma instalação do Apache Tomcat é o seguinte. Além disso, você pode encontrar as tarefas associadas ao script.
-
Inicialize as Variáveis
target_path
: Esta extração de um arquivotarget.json
no diretórioDATA_DIR
usandojq
.patches_file
: Esta variável pode ser usada para identificar dinamicamente o arquivopatches.json
mais recente no sistema.patch_url
: Especifica o diretório para patches (/opt/fams/wls_patch
).
-
Exibir e Analisar Detalhes do Patch: Leia o conteúdo do arquivo
patches.json
para saber o seguinte:- Para extrair a versão de patch necessária (
required_version
). - Para determinar o nome do arquivo do patch (
file_name
).
- Para extrair a versão de patch necessária (
-
Verificar Arquivos Necessários
apache_tomcat_functions.sh
:- Verifique a presença de um script auxiliar (
apache_tomcat_functions.sh
). - Se o arquivo estiver ausente, o script sairá com um erro.
- Verifique a presença de um script auxiliar (
- Validação do Caminho do Destino:
- Verifique se o diretório
target_path
existe. - Se ele não existir, o script sairá com um erro.
- Verifique se o diretório
-
Verificar a Versão Atual: Execute o script
version.sh
do Apache Tomcat para extrair a versão instalada atualmente (curr_version
). -
Preparar Upgrade
- Fazer Backup da Instalação Existente: Chame
create_backup
para fazer backup da instalação existente do Apache Tomcat. - Interromper Tomcat: Interrompa o Apache Tomcat usando uma função (
stop_tomcat
).
- Fazer Backup da Instalação Existente: Chame
-
Fazer Upgrade da Instalação do Apache Tomcat
- Extrair uma Nova Versão: Extraia o novo pacote do Apache Tomcat (
file_name
) no diretório de destino. - Copiar Arquivos de Configuração:
- Copie arquivos críticos (por exemplo, configuração, logs) da instalação antiga para uma nova usando
copy_main_files
. - Trate os erros durante esta etapa restaurando o backup.
- Copie arquivos críticos (por exemplo, configuração, logs) da instalação antiga para uma nova usando
- Renomear e finalizar: renomeie o novo diretório para substituir o diretório de instalação antigo.
- Extrair uma Nova Versão: Extraia o novo pacote do Apache Tomcat (
-
Validar e Reiniciar
- Verificar o Upgrade: Verifique a versão atualizada executando
version.sh
novamente. - Reiniciar o Apache Tomcat: Inicie o Apache Tomcat usando
start_tomcat
.
- Verificar o Upgrade: Verifique a versão atualizada executando
-
Erro no tratamento
- Forneça mensagens de erro significativas em vários estágios (por exemplo, arquivos ausentes, diretório não encontrado, falhas de upgrade).
- Reverta as alterações se as operações críticas falharem (por exemplo, copiar arquivos ou renomear diretórios).
As Principais Funções Usadas São:
stop_tomcat
: Interrompe o serviço Tomcat.create_backup
: Cria um backup do diretório Tomcat existente.copy_main_files
: Transfere os arquivos necessários da instalação antiga para a nova.start_tomcat
: Inicia o serviço Tomcat atualizado.
O que Ele Realiza?
O script fornece uma abordagem estruturada e automatizada para atualizar uma instância do Apache Tomcat, minimizando o tempo de inatividade e garantindo um mecanismo de rollback em caso de falha. Ele conta com as funções predefinidas (apache_tomcat_functions.sh
) para gerenciar tarefas como interromper ou iniciar o Apache Tomcat e o tratamento de arquivos.
Veja a seguir o script Bash (apache\_tomcat\_patching.sh
) de amostra com os métodos para aplicar patches.
\#
target\_path=$(cat ${DATA\_DIR}/target.json | jq -r '.target.target\_name')
patches\_file="$(find / -type f -name 'patches.json' | tail -1)"
patch\_url=/opt/fams/wls\_patch
\#
echo "Details of patches.json from path $patches\_file"
cat $patches\_file
required\_version=$(jq -r '.patches[0].name' $patches\_file)
file\_name=$(jq -r '.patches[0].location.object\_name' $patches\_file)
echo "Checking for tomcat\_functions.sh file "
if [ -f ./apache\_tomcat\_functions.sh ]; then
source ./apache\_tomcat\_functions.sh
echo -e "apache\_tomcat\_functions.sh file exists \n"
else
echo "apache\_tomcat\_functions.sh file does not exist..Exiting"
exit 1
fi
echo "Checking if Target Path $target\_path exists"
if [ ! -d "$target\_path" ]; then
echo "$target\_path doesnt exist.....Exiting"
exit 1
else
echo "$target\_path exists"
fi
script\_dir=/opt/fams/.scripts/
echo "Target Directory: " $target\_path
echo "Target Version Download location: " $patch\_url
echo "Target Patch: " $required\_version
\# directories where tomcat is installed
curr\_version=$(sh $target\_path/bin/version.sh | grep 'Server number:' | awk '{print $3}')
echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"
tomcat\_vars
if [ $curr\_version != "" ]; then
echo -e "Version $curr\_version is currently installed in Target Path $target\_path \n"
dir\_path=$(basename "$target\_path") #old tomcat directory
#file\_name=$(basename "$patch\_url") #zip filename for new version
#Stopping tomcat
stop\_tomcat $target\_path
#killing process
#kill\_tomcat
echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"
echo -e "Upgrading Tomcat $curr\_version to patch $required\_version.................\n"
# Backing old tomcat
cd $target\_path/..
create\_backup $dir\_path
# Downloading New Tomcat Version
# echo -e "Downloading Tomcat version $required\_version.......................\n"
# download\_required\_version $patch\_url
# echo "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"
# # Extracting tomcat directories
echo -e "Extracting Tomcat version from $file\_name file ......................."
tar -xf "$patch\_url/$file\_name"
echo -e " COMPLETED : Extracted successfully \n"
# Copying important files from old tomcat to new tomcat directories
tomcat\_dir=$(basename "$file\_name" .tar.gz) # new tomcat directory
echo -e "Copying important files from $dir\_path directory to $tomcat\_dir ......................."
copy\_main\_files $backup\_dir $tomcat\_dir
status=$?
if [ $status -eq 0 ]; then
# Renaming tomcat directory
echo -e "Renaming $tomcat\_dir directory to $dir\_path......................."
mv $tomcat\_dir $target\_path
else
echo -e "Process failed while Copying important files from $dir\_path directory to $tomcat\_dir.\n"
mv $backup\_dir $dir\_path
exit 1
fi
if [ $? -eq 0 ]; then
upgraded\_version=$(sh $target\_path/bin/version.sh | grep 'Server number:' | awk '{print $3}')
echo -e " COMPLETED : Renaming directory \n"
echo -e "Successfully upgraded tomcat to $upgraded\_version from $curr\_version \n"
# Starting tomcat
echo -e "Starting Tomcat......................."
start\_tomcat $target\_path
else
echo -e "Process failed while renaming $tomcat\_dir directory to $target\_path.\n"
exit 1
fi
else
echo -e "Required version is empty, Exiting \n"
exit 1
fi
#done
stop\_tomcat(){
tomcat\_dir=$1
echo "Stopping Tomcat Service"
sh $tomcat\_dir/bin/shutdown.sh
}
start\_tomcat(){
tomcat\_dir=$1
echo "Starting Tomcat Service"
sh $tomcat\_dir/bin/startup.sh
}
kill\_tomcat(){
myarray=( `ps aux | grep tomcat | awk '{print $2}'` )
for i in "${myarray[@]}"
do
echo "Killing Process $i"
kill -9 $i
done
}
tomcat\_vars(){
\# curr\_ver=$(jq --arg ident "$dir" -r '.targets[] | select(.target\_name == $ident) |.version' $script\_dir/tomcat\_discovery.json)
\# echo "Current Version: "$curr\_version
tomcat\_home=$(jq -r '.targets[].target\_name' $script\_dir/tomcat\_discovery.json)
echo "Tomcat Home: "$tomcat\_home
}
create\_backup(){
dir\_path=$1
\# curr\_version=$2
echo " Backing up directory: $dir\_path"
prefix=backup
backup\_dir="${dir\_path}\_${prefix}"
mkdir -p "$backup\_dir"
cp -r "$dir\_path"/\* "$backup\_dir"/
if [ "$?" -eq 0 ]; then
echo -e " COMPLETED : Backup directory $backup\_dir created \n"
rm -r "$dir\_path"
fi
}
download\_required\_version(){
download\_url=$1
wget -nc $download\_url
}
copy\_main\_files(){
old\_tomcat=$1
new\_tomcat=$2
cp -r ./$old\_tomcat/conf/\* ./$new\_tomcat/conf/
cp -r ./$old\_tomcat/webapps/\* ./$new\_tomcat/webapps/
if [ "$?" -eq 0 ]; then
echo -e " COMPLETED : Copying files into directory \n"
return 0 # Success
else
return 1 # Failure
fi
}
copy\_rollback\_files(){
old\_tomcat=$1
new\_tomcat=$2
cp -r $old\_tomcat/conf/\* /$new\_tomcat/conf/
cp -r $old\_tomcat/webapps/\* /$new\_tomcat/webapps/
echo -e " COMPLETED : Copying files into directory \n"
}
create\_rollback\_backup(){
curr\_tomcat=$1
rollback\_tomcat=$2
echo " Backing up directory: $dir\_path"
prefix=$curr\_version
backup\_dir="${curr\_tomcat}\_${prefix}"
mkdir -p "$backup\_dir"
cp -r "$dir\_path"/\* "$backup\_dir"/
echo -e " COMPLETED : Backup directory $backup\_dir created \n"
rm -r "$dir\_path"
}
Tarefa 6: Criar uma Frota
Crie uma frota e coloque seu produto na lista de permissões relacionada para descobrir seu inventário de software, saber sobre o status de conformidade de patch de software e corrigir a conformidade de patch de software.
-
Vá para a Console do OCI, navegue até Fleet Application Management, Fleets e clique em Criar Frota.
-
Informe o Nome e a Descrição da frota e adicione recursos.
-
Ative a confirmação automática dos recursos do destino.
Tarefa 7: Corrigir a Conformidade de Patches de Software
Clique em Corrigir agora para corrigir a conformidade de patch de software de uma frota em sua página de detalhes ou criar uma programação na página Programações do Gerenciamento do ciclo de vida.
Se você clicar em Corrigir agora, o job de conformidade será executado nos próximos 15 minutos, enquanto que, se você selecionar a opção de programação na página Programações, poderá criar um job para o futuro ou definir uma programação recursiva. Definindo uma programação de manutenção, especifique quando o runbook será acionado para corrigir alvos não compatíveis identificados em sua frota.
Confirmações
- Autors - Shabbir Hussain (equipe técnica do membro consultor), Fabio Bonisoli (gerente de produtos de gerenciamento de aplicativos de frota)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Automate Patching for Apache Tomcat or a Third-Party Technology with OCI Fleet Application Management
G23647-01
December 2024