diff --git a/deployment/ansible-playbooks/README.md b/deployment/ansible-playbooks/README.md index 760a7cb..6c095f4 100644 --- a/deployment/ansible-playbooks/README.md +++ b/deployment/ansible-playbooks/README.md @@ -4,16 +4,18 @@ This provides the automated agent deployment on multiple target hosts, where monitoring is required.
Following sections will walk you through the pre-requisites, configuration and executing the playbooks.
The current playbooks works for linux based hosts, but this can be extended to other operating systems as well. -

## Pre-requisites +- Make sure ansible (version 2.9 or above version) is installed on localhost from where the deployment is to be initiated. +refer: https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html +- Make sure python3 (version 3.6 or above version) is installed in all target hosts and localhost from where the deployment is initiated +refer: https://docs.python.org/3/using/unix.html#getting-and-installing-the-latest-version-of-python - Make sure you have SSH capability on the target hosts and the user connecting through SSH has the capability to become root. - You need to have OCI CLI installed and OCI configuration created only on the localhost from where the deployment is initiated.
refer: https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm#Quickstart - You need ansible collection to execute playbooks and configured with OCI CLI on the localhost from where the deployment is initiated.
refer: https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/ansiblegetstarted.htm#Getting_Started_with_Oracle_Cloud_Infrastructure_and_Ansible -

## Configuration ### Hosts file @@ -37,6 +39,11 @@ export compartment_ocid= ansible-playbook -i hosts mgmt_agent_install.yaml -kK ``` +### Upgrading agent +``` +ansible-playbook -i hosts mgmt_agent_upgrade.yaml -kK +``` + ### Uninstalling agent ``` ansible-playbook -i hosts mgmt_agent_uninstall.yaml -kK @@ -47,8 +54,6 @@ Note: - SSH password: The ssh user password
- BECOME password[defaults to SSH password]: The password to become the root user. - -

## Verifying the execution of playbooks - At the end of each playbook run, you should be able to see something similar like this for a successful execution @@ -61,7 +66,6 @@ localhost : ok=12 changed=1 unreachable=0 failed=0 s - Go to oracle cloud - Observability & Management - Management Agents - Agents - select the compartment and verify the installed agents -

## Copyright -Copyright (c) 2022 Oracle and/or its affiliates. \ No newline at end of file +Copyright (c) 2022 Oracle and/or its affiliates. diff --git a/deployment/ansible-playbooks/mgmt_agent_upgrade.yaml b/deployment/ansible-playbooks/mgmt_agent_upgrade.yaml new file mode 100644 index 0000000..ae236c4 --- /dev/null +++ b/deployment/ansible-playbooks/mgmt_agent_upgrade.yaml @@ -0,0 +1,125 @@ +# Copyright (c) 2021, 2024 Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl. +# +--- + +# validations +- hosts: target_hosts + vars: + # common vars + tasks: + - name: collect facts about system services + service_facts: + + - name: Check if the mgmt_agent service is already installed + fail: + msg: "Management Agent is not installed in the host, hence upgrade is not required" + when: "'mgmt_agent.service' not in services" + + - name: Check if the mgmt_agent service is in running state + fail: + msg: "Management Agent installed in the host is not in running state" + when: "'mgmt_agent.service' not in services or ansible_facts.services['mgmt_agent.service'].state != 'running'" + +# workflows +- hosts: localhost + collections: + - oracle.oci + tasks: + - name: Check pre-requisites + fail: + msg: "Environment variable {{item}} not set. Please declare an environment variable with an appropriate value for the sample to work." + when: item not in ansible_env + with_items: + - "compartment_ocid" + + - name: Create a directory if it does not exist + ansible.builtin.file: + path: "./{{remote_mgmt_agent_scratch_dir}}" + state: directory + mode: '0755' + + - name: List Management Agent Images + oci_management_agent_image_facts: + compartment_id: "{{compartment_ocid}}" + install_type: AGENT + register: image_result + - set_fact: + object_url: "{{ item.object_url | split('/')}}" + namespace: "{{[4]|map('extract', item.object_url.split('/')) | join()}}" + bucket_name: "{{[6]|map('extract', item.object_url.split('/')) | join ()}}" + object_name: "{{[8,9,10]|map('extract', item.object_url.split('/')) | join('/')}}" + image_version: "{{ item.version }}" + + with_items: "{{image_result.management_agent_images}}" + when: + - item.platform_name == "Linux-x86_64" + - item.package_type == "RPM" + - debug: + msg: "Extracted the agent image details as follows Namespace: {{namespace}} Bucket: {{bucket_name}} Object name: {{object_name}} Agent Image Version : {{image_version}}" + + - name: Download Agent RPM object + oci_object_storage_object: + # required + namespace_name: "{{namespace}}" + bucket_name: "{{bucket_name}}" + object_name: "{{object_name}}" + dest: "./{{remote_mgmt_agent_scratch_dir}}/oracle.mgmt_agent.rpm" + tags: download_agent + +- hosts: target_hosts + vars: + # common vars + tasks: + - name: Check if upgrade operation is applicable for Management Agent + become: yes + ansible.builtin.shell: /opt/oracle/mgmt_agent/agent_inst/bin/agentcore version + register: agent_version + - set_fact: + host_agent_version: "{{ agent_version.stdout_lines }}" + - debug: + msg: "Management Agent Version : {{host_agent_version[0]}} Agent Image Version : {{hostvars['localhost']['image_version']}}" + - fail: + msg: "Management Agent is up-to-date with latest version of software available in production" + when: "host_agent_version[0] >= hostvars['localhost']['image_version']" + + - name: Transfer all Management Agent files over to the hosts + become: yes + become_user: root + copy: + src: "./{{remote_mgmt_agent_scratch_dir}}" + dest: "{{remote_mgmt_agent_scratch_parent}}" + owner: root + group: root + mode: '0644' + + - name: Upgrade the Management Agent + become: yes + become_user: root + shell: + "rpm -U {{remote_mgmt_agent_scratch_path}}/oracle.mgmt_agent.rpm" + tags: upgrade-agent + + - name: Collect facts about system services + service_facts: + + - name: Check if the mgmt_agent service is in running state + fail: + msg: "mgmt_agent is not in running state" + when: "'mgmt_agent.service' not in services or ansible_facts.services['mgmt_agent.service'].state != 'running'" + + - name: Cleanup Management Agent binary copied to the target host + become: yes + become_user: root + file: + path: "{{remote_mgmt_agent_scratch_path}}" + state: absent + +- hosts: localhost + collections: + - oracle.oci + tasks: + - name: Cleanup Management Agent binary downloaded in localhost + file: + path: "./{{remote_mgmt_agent_scratch_dir}}" + state: absent \ No newline at end of file