diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7aa5ac9a..b4768071 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ # https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners # Order is important; the last matching pattern takes the most precedence. -* @yurkovychv @puneet0191 @olexandr-havryliak @sandraromanchenko +* @yurkovychv @puneet0191 @olexandr-havryliak @sandraromanchenko @peterSirotnak diff --git a/pmm_qa/external_setup.yml b/pmm_qa/external_setup.yml index 456e636d..a3f66d62 100644 --- a/pmm_qa/external_setup.yml +++ b/pmm_qa/external_setup.yml @@ -27,34 +27,37 @@ ignore_errors: true - name: Prepare Container for External Exporters - shell: > - sudo docker run -d -p 43100:43100 --name={{ external_container }} - phusion/baseimage:jammy-1.0.1 + shell: | + docker run -d \ + -p 43100:43100 \ + --name={{ external_container }} \ + --network=pmm-qa \ + phusion/baseimage:noble-1.0.2 - name: Copy all required Artifacts to the docker external_container shell: "{{ item }}" with_items: - docker cp ./external_setup.sh {{ external_container }}:/ - - docker cp ./pmm3-client-setup.sh {{ external_container }}:/ - docker exec {{ external_container }} apt-get update - docker exec {{ external_container }} apt-get -y install wget curl git gnupg2 lsb-release - name: Run Redis Container in Host - shell: "{{ item }}" - with_items: - - docker run --name redis_container -d -p 6379:6379 redis '--requirepass oFukiBRg7GujAJXq3tmd' - - docker network connect pmm-qa redis_container + shell: | + docker run -d \ + --name=redis_container \ + --network=pmm-qa \ + -p 6379:6379 \ + redis '--requirepass oFukiBRg7GujAJXq3tmd' - name: Setup External Exporters for monitoring shell: "{{ item }}" with_items: - docker exec {{ external_container }} bash -x ./external_setup.sh > setup_external.log - - name: Install pmm2-client on the external_container - shell: "{{ item }}" - with_items: - - docker network connect pmm-qa {{ external_container }} - - docker exec {{ external_container }} bash -x ./pmm3-client-setup.sh --pmm_server_ip {{ pmm_server_ip }} --client_version {{ client_version }} --admin_password {{ admin_password }} --use_metrics_mode no + - name: Install PMM Client inside of container + include_tasks: ./tasks/install_pmm_client.yml + vars: + container_name: "{{ external_container }}" - name: Execute Setup script inside the External container for Redis shell: "{{ item }}" @@ -91,11 +94,11 @@ - name: Add Redis for Monitoring to PMM via pmm-admin add external command shell: "{{ item }}" with_items: - - docker exec {{ external_container }} bash -c 'source ~/.bash_profile || true; pmm-admin list' - - docker exec {{ external_container }} bash -c 'source ~/.bash_profile || true; pmm-admin add external --listen-port=42200 --group="redis" --service-name=redis_external_service_{{ random_number }}' + - docker exec {{ external_container }} pmm-admin list + - docker exec {{ external_container }} pmm-admin add external --listen-port=42200 --group="redis" --service-name=redis_external_service_{{ random_number }} - name: Add Node Process for Monitoring to PMM via pmm-admin add external command shell: "{{ item }}" with_items: - - docker exec {{ external_container }} bash -c 'source ~/.bash_profile || true; pmm-admin list' - - docker exec {{ external_container }} bash -c 'source ~/.bash_profile || true; pmm-admin add external --group=processes --listen-port=9256 --service-name=nodeprocess_service_{{ random_number }}' + - docker exec {{ external_container }} pmm-admin list + - docker exec {{ external_container }} pmm-admin add external --group=processes --listen-port=9256 --service-name=nodeprocess_service_{{ random_number }} diff --git a/pmm_qa/tasks/install_pmm_client.yml b/pmm_qa/tasks/install_pmm_client.yml index 188b5739..1f4b14ad 100644 --- a/pmm_qa/tasks/install_pmm_client.yml +++ b/pmm_qa/tasks/install_pmm_client.yml @@ -1,3 +1,8 @@ +- name: Set default metrics mode + set_fact: + metrics_mode: 'auto' + when: metrics_mode is not defined + - name: Get PMM server address shell: 'docker ps -f name=-server --format "{{ "{{" }}.Names{{ "}}" }}"' register: pmm_server_ip_output @@ -8,20 +13,6 @@ pmm_server_ip: "{{ pmm_server_ip_output.stdout }}" when: pmm_server_ip == "127.0.0.1" -- name: Print pmm server address - debug: - var: pmm_server_ip - -- name: Copy a file into the container - community.docker.docker_container_copy_into: - container: "{{ container_name }}" - path: ../pmm3-client-setup-centos.sh - container_path: /pmm3-client-setup.sh - -- name: "PMM Server IP is" - debug: - msg: "{{ pmm_server_ip }} is pmm server IP" - - name: Set correct pmm server port set_fact: pmm_server_port: 443 @@ -33,9 +24,7 @@ when: not (pmm_server_ip | default('') | regex_search('\.')) - name: Detect OS inside the container - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: cat /etc/os-release + shell: docker exec {{ container_name }} cat /etc/os-release register: container_os_info - name: Set distro family (debian/rhel) @@ -50,201 +39,189 @@ }} - name: Install dependencies inside Debian-family container - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: > - sh -c ' - apt-get update && - apt-get install -y wget gnupg2 jq lsb-base lsb-release curl - ' - user: "root" + shell: | + docker exec --user root {{ container_name }} sh -c ' + apt-get update && \ + apt-get install -y \ + wget \ + gnupg2 \ + jq \ + lsb-base \ + lsb-release \ + curl + ' when: distro_family == "debian" -- name: Install dependencies on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: microdnf install -y wget gnupg2 jq - user: "root" +- name: Install dependencies inside Debian-family container + shell: | + docker exec --user root {{ container_name }} sh -c ' + microdnf install -y \ + wget \ + gnupg2 \ + jq \ + ' + when: distro_family == "debian" + +- name: Install dependencies inside Debian-family container + shell: | + docker exec --user root {{ container_name }} sh -c ' + microdnf install -y \ + wget \ + gnupg2 \ + jq \ + ' when: distro_family == "rhel" - name: Install curl on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: microdnf install -y curl-minimal - user: "root" + shell: | + docker exec --user root {{ container_name }} sh -c 'microdnf install -y curl-minimal' when: distro_family == "rhel" ignore_errors: true - name: Get lsb_release - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: > + shell: | + docker exec --user root {{ container_name }} \ bash -c "grep '^VERSION_CODENAME=' /etc/os-release | cut -d '=' -f2 | tr -d '\"'" - user: "root" register: lsb_release - name: Set lsb_release set_fact: lsb_release: "{{ lsb_release.stdout }}" -- name: Print expected client version - debug: - msg: "{{ metrics_mode }}" - - name: Install percona release on Debian-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - wget -O /percona-release_latest.{{ lsb_release }}_all.deb https://repo.percona.com/apt/percona-release_latest.{{ lsb_release }}_all.deb && - dpkg -i /percona-release_latest.{{ lsb_release }}_all.deb - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + wget -O /percona-release_latest.{{ lsb_release.stdout | trim }}_all.deb \ + https://repo.percona.com/apt/percona-release_latest.{{ lsb_release.stdout | trim }}_all.deb && + dpkg -i /percona-release_latest.{{ lsb_release.stdout | trim }}_all.deb + ' when: - distro_family == 'debian' + ignore_errors: true -- name: Install specific PMM client version on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - wget -O /percona-release-latest.noarch.rpm https://repo.percona.com/yum/percona-release-latest.noarch.rpm && - rpm -i /percona-release-latest.noarch.rpm - ' - when: - - distro_family == 'rhel' +- name: Install percona release on RHEL-family containers + shell: | + docker exec --user root {{ container_name }} sh -c ' + wget -O /percona-release-latest.noarch.rpm \ + https://repo.percona.com/yum/percona-release-latest.noarch.rpm && \ + rpm -i /percona-release-latest.noarch.rpm + ' + when: distro_family == 'rhel' ignore_errors: true - name: Install pmm client experimental on Debian-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - percona-release enable-only pmm3-client experimental && - apt-get update && - apt-get -y install pmm-client - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client experimental && + apt-get update && + apt-get -y install pmm-client + ' when: distro_family == "debian" and client_version == "3-dev-latest" - name: Install pmm client experimental on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - percona-release enable-only pmm3-client experimental && - microdnf install -y pmm-client - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client experimental && + microdnf install -y pmm-client + ' when: distro_family == "rhel" and client_version == "3-dev-latest" - name: Install pmm client testing on Debian-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - percona-release enable-only pmm3-client testing && - apt-get update && - apt-get -y install pmm-client - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client testing && + apt-get update && + apt-get -y install pmm-client + ' when: distro_family == "debian" and client_version == "pmm3-rc" - name: Install pmm client testing on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - percona-release enable-only pmm3-client testing && - microdnf install -y pmm-client - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client testing && + microdnf install -y pmm-client + ' when: distro_family == "rhel" and client_version == "pmm3-rc" - name: Install pmm client release on Debian-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - percona-release enable-only pmm3-client release && - apt-get update && - apt-get -y install pmm-client - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client release && + apt-get update && + apt-get -y install pmm-client + ' when: distro_family == "debian" and client_version == "pmm3-latest" - name: Install pmm client release on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - percona-release enable-only pmm3-client release && - microdnf install -y pmm-client - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client release && + microdnf install -y pmm-client + ' when: distro_family == "rhel" and client_version == "pmm3-latest" - name: Install specific PMM client version on Debian-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - wget -O /pmm-client.deb https://repo.percona.com/pmm3-client/apt/pool/main/p/pmm-client/pmm-client_{{ client_version }}-7.$(lsb_release -sc)_amd64.deb && - dpkg -i /pmm-client.deb - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + wget -O /pmm-client.deb https://repo.percona.com/pmm3-client/apt/pool/main/p/pmm-client/pmm-client_{{ client_version }}-7.$(lsb_release -sc)_amd64.deb && + dpkg -i /pmm-client.deb + ' when: - distro_family == 'debian' - client_version is match('^3\\.[0-9]+\\.[0-9]+$') - name: Install specific PMM client version on RHEL-family containers - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - wget -O /pmm-client.rpm https://repo.percona.com/pmm3-client/yum/release/9/RPMS/x86_64/pmm-client-{{ client_version }}-7.el9.x86_64.rpm && - rpm -i /pmm-client.rpm - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + wget -O /pmm-client.rpm https://repo.percona.com/pmm3-client/yum/release/9/RPMS/x86_64/pmm-client-{{ client_version }}-7.el9.x86_64.rpm && + rpm -i /pmm-client.rpm + ' when: - distro_family == 'rhel' - client_version is match('^3\\.[0-9]+\\.[0-9]+$') - name: Install tarball PMM client version - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c ' - wget -O /pmm-client.tar.gz "{{ client_version }}" && - tar -zxpf /pmm-client.tar.gz && - PMM_CLIENT=`ls -1td pmm-client* 2>/dev/null | grep -v ".tar" | grep -v ".sh" | head -n1` && - echo ${PMM_CLIENT} && - rm -rf pmm-client && - mv ${PMM_CLIENT} pmm-client && - rm -rf /usr/local/bin/pmm-client && - mv -f pmm-client /usr/local/bin && - bash -x /usr/local/bin/pmm-client/install_tarball && - ln -sf /usr/local/percona/pmm/bin/pmm-admin /usr/local/bin/pmm-admin && - ln -sf /usr/local/percona/pmm/bin/pmm-agent /usr/local/bin/pmm-agent && - pmm-admin --version - ' + shell: | + docker exec --user root {{ container_name }} sh -c ' + wget -O /pmm-client.tar.gz "{{ client_version }}" && + tar -zxpf /pmm-client.tar.gz && + PMM_CLIENT=`ls -1td pmm-client* 2>/dev/null | grep -v ".tar" | grep -v ".sh" | head -n1` && + echo ${PMM_CLIENT} && + rm -rf pmm-client && + mv ${PMM_CLIENT} pmm-client && + rm -rf /usr/local/bin/pmm-client && + mv -f pmm-client /usr/local/bin && + bash -x /usr/local/bin/pmm-client/install_tarball && + ln -sf /usr/local/percona/pmm/bin/pmm-admin /usr/local/bin/pmm-admin && + ln -sf /usr/local/percona/pmm/bin/pmm-agent /usr/local/bin/pmm-agent && + pmm-admin --version + ' when: - client_version | regex_search('^https?://.*\\.tar\\.gz$') is not none - name: Connect pmm client to pmm server using metrics mode - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: pmm-agent setup --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml --server-address={{ pmm_server_ip }}:{{ pmm_server_port }} --server-insecure-tls --metrics-mode={{ metrics_mode }} --server-username=admin --server-password={{ admin_password }} {{ container_name }} + shell: | + docker exec --user root {{ container_name }} \ + pmm-agent setup \ + --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml \ + --server-address={{ pmm_server_ip }}:{{ pmm_server_port }} \ + --server-insecure-tls \ + --metrics-mode={{ metrics_mode }} \ + --server-username=admin \ + --server-password={{ admin_password }} \ + {{ container_name }} when: metrics_mode | length > 0 -- name: Connect pmm client to pmm server using metrics mode - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: pmm-agent setup --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml --server-address={{ pmm_server_ip }}:{{ pmm_server_port }} --server-insecure-tls --server-username=admin --server-password={{ admin_password }} {{ container_name }} +- name: Connect pmm client to pmm server using default metrics mode + shell: | + docker exec --user root {{ container_name }} \ + pmm-agent setup \ + --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml \ + --server-address={{ pmm_server_ip }}:{{ pmm_server_port }} \ + --server-insecure-tls \ + --server-username=admin \ + --server-password={{ admin_password }} \ + {{ container_name }} when: metrics_mode | length == 0 - name: Wait 5 seconds for connection to complete @@ -252,10 +229,8 @@ seconds: 5 - name: Start pmm client - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > + shell: | + docker exec --user root {{ container_name }} \ sh -c 'nohup pmm-agent --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml > /var/log/pmm-agent.log 2>&1 &' - name: Wait 5 seconds for start to complete