diff --git a/.github/workflows/PMM_PSMDB_PBM_FULL.yml b/.github/workflows/PMM_PSMDB_PBM_FULL.yml index 2c102ebf..023d1217 100644 --- a/.github/workflows/PMM_PSMDB_PBM_FULL.yml +++ b/.github/workflows/PMM_PSMDB_PBM_FULL.yml @@ -25,7 +25,7 @@ on: jobs: test_replica_set: runs-on: ubuntu-22.04 - timeout-minutes: 20 + timeout-minutes: 40 strategy: fail-fast: false matrix: @@ -42,7 +42,7 @@ jobs: test_sharded_cluster: runs-on: ubuntu-22.04 - timeout-minutes: 20 + timeout-minutes: 40 strategy: fail-fast: false matrix: @@ -52,6 +52,12 @@ jobs: PMM_IMAGE: ${{ inputs.pmm_image || 'perconalab/pmm-server:3-dev-latest' }} steps: - uses: actions/checkout@v2 + - name: Cleanup disk space on a worker according to https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Test sharded with PSMDB ${{ matrix.psmdb }} run: | PSMDB_VERSION=${{ matrix.psmdb }} ./start-sharded.sh diff --git a/pmm_psmdb-pbm_setup/Dockerfile b/pmm_psmdb-pbm_setup/Dockerfile index 2c302fe8..e3b2afcb 100644 --- a/pmm_psmdb-pbm_setup/Dockerfile +++ b/pmm_psmdb-pbm_setup/Dockerfile @@ -20,8 +20,7 @@ VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"] ARG OL_VERSION -RUN set -ex; \ - export GNUPGHOME="$(mktemp -d)"; \ +RUN export GNUPGHOME="$(mktemp -d)"; \ export PERCONA_TELEMETRY_URL="https://check-dev.percona.com/v1/telemetry/GenericReport"; \ dnf install -y gnupg2; \ if [ $PSMDB_VERSION != "latest" ]; then export PSMDB_REPO="$(echo "${PSMDB_VERSION}" | awk -F '.' '{print "psmdb-"$1$2}')" ; else export PSMDB_REPO=psmdb-80 ; fi ; \ @@ -58,25 +57,8 @@ RUN set -ex; \ fi ARG OL_VERSION -RUN if [[ "$PMM_CLIENT_VERSION" == http* ]]; then \ - dnf -y install pmm-client && \ - curl -Lf -o /tmp/pmm-client.tar.gz $PMM_CLIENT_VERSION && \ - cd /tmp && tar -xvf pmm-client.tar.gz --transform 's,^/*[^/]*,/pmm-client,S' && \ - cd /tmp/pmm-client && ./install_tarball && cd ../ && rm -rf pmm* ;\ - elif [[ "$PMM_CLIENT_VERSION" =~ 3-dev-latest|latest ]]; then \ - dnf -y install pmm-client ; \ - elif [[ "$PMM_CLIENT_VERSION" = "pmm3-rc" ]]; then \ - percona-release enable pmm3-client testing && \ - dnf update --refresh -y && \ - dnf -y install pmm-client ; \ - else \ - if [[ "$PMM_CLIENT_VERSION" =~ ^([3-9])\.([1-9][0-9]*)\.([0-9]+)$ ]]; then \ - dnf -y install pmm-client-${PMM_CLIENT_VERSION}-7.el${OL_VERSION} ; \ - else \ - dnf -y install pmm-client-${PMM_CLIENT_VERSION}-6.el${OL_VERSION} ; \ - fi \ - fi && \ - sed 's/Type=forking/#Type=forking/' -i /usr/lib/systemd/system/mongod.service && \ + +RUN sed 's/Type=forking/#Type=forking/' -i /usr/lib/systemd/system/mongod.service && \ systemctl enable mongod && \ systemctl enable pbm-agent && \ sed -i '/ExecStart/a StandardError=file:/var/log/pmm-agent.log' /usr/lib/systemd/system/pmm-agent.service && \ diff --git a/pmm_psmdb-pbm_setup/configure-agents.sh b/pmm_psmdb-pbm_setup/configure-agents.sh index 89f70d06..feaeafa1 100644 --- a/pmm_psmdb-pbm_setup/configure-agents.sh +++ b/pmm_psmdb-pbm_setup/configure-agents.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e pmm_mongo_user=${PMM_MONGO_USER:-pmm} pmm_mongo_user_pass=${PMM_MONGO_USER_PASS:-pmmpass} @@ -44,12 +43,40 @@ if [[ $mongo_setup_type == "psa" ]]; then fi echo echo "configuring pmm agents" +PLAYBOOK_FILE="install_pmm_client.yml" +cat > "$PLAYBOOK_FILE" <&1) + + if [ $? -ne 0 ]; then + echo "Ansible failed for: $node" + echo "$ansible_out" + exit 1 + fi + + if [[ $mongo_setup_type == "psa" && $node == "rs103" ]]; then docker compose -f docker-compose-rs.yaml exec -T $node pmm-admin add mongodb --enable-all-collectors --agent-password=mypass --environment=psmdb-dev --cluster=replicaset --replication-set=rs --host=${node} --port=27017 ${node}${gssapi_service_name_part}_${random_number} else @@ -59,6 +86,10 @@ do done echo echo "adding some data" +docker exec rs101 wget -O mgodatagen_linux_amd64.tar.gz https://github.com/feliixx/mgodatagen/releases/download/v0.12.0/mgodatagen_0.12.0_darwin_amd64.tar.gz +docker exec rs101 tar -xzf mgodatagen_linux_amd64.tar.gz +docker exec rs101 mv mgodatagen /usr/local/bin/ +docker exec rs101 chmod +x /usr/local/bin/mgodatagen docker compose -f docker-compose-rs.yaml exec -T rs101 mgodatagen -f /etc/datagen/replicaset.json --uri=mongodb://${pmm_mongo_user}:${pmm_mongo_user_pass}@127.0.0.1:27017/?replicaSet=rs docker compose -f docker-compose-rs.yaml exec -T rs101 mongo "mongodb://${pmm_mongo_user}:${pmm_mongo_user_pass}@localhost/?replicaSet=rs" --quiet << EOF use students; diff --git a/pmm_psmdb-pbm_setup/configure-extra-agents.sh b/pmm_psmdb-pbm_setup/configure-extra-agents.sh index c71c16d8..7b02c506 100644 --- a/pmm_psmdb-pbm_setup/configure-extra-agents.sh +++ b/pmm_psmdb-pbm_setup/configure-extra-agents.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e pmm_mongo_user=${PMM_MONGO_USER:-pmm} pmm_mongo_user_pass=${PMM_MONGO_USER_PASS:-pmmpass} @@ -44,10 +43,26 @@ echo echo "configuring pmm agents" random_number=$RANDOM nodes="rs201 rs202 rs203" +PLAYBOOK_FILE="install_pmm_client.yml" + +cat > "$PLAYBOOK_FILE" <&1) + + if [ $? -ne 0 ]; then + echo "Ansible failed for: $node" + echo "$ansible_out" + exit 1 + fi + if [[ $mongo_setup_type == "psa" && $node == "rs203" ]]; then docker compose -f docker-compose-rs.yaml exec -T $node pmm-admin add mongodb --enable-all-collectors --agent-password=mypass --cluster=replicaset --replication-set=rs1 --host=${node} --port=27017 ${node}${gssapi_service_name_part}_${random_number} else diff --git a/pmm_psmdb-pbm_setup/configure-replset.sh b/pmm_psmdb-pbm_setup/configure-replset.sh index 2b6f7b59..740e86a4 100644 --- a/pmm_psmdb-pbm_setup/configure-replset.sh +++ b/pmm_psmdb-pbm_setup/configure-replset.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -e +#set -e pmm_mongo_user=${PMM_MONGO_USER:-pmm} pmm_mongo_user_pass=${PMM_MONGO_USER_PASS:-pmmpass} diff --git a/pmm_psmdb-pbm_setup/start-rs-only.sh b/pmm_psmdb-pbm_setup/start-rs-only.sh index 7f88ad95..0c4fc395 100755 --- a/pmm_psmdb-pbm_setup/start-rs-only.sh +++ b/pmm_psmdb-pbm_setup/start-rs-only.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -e +#set -e profile=${COMPOSE_PROFILES:-classic} mongo_setup_type=${MONGO_SETUP_TYPE:-pss} @@ -22,6 +22,34 @@ echo echo "waiting 60 seconds for replica set members to start" sleep 60 echo + +docker ps --format "{{.Names}}" | grep '^rs' +PLAYBOOK_FILE="install_pmm_client.yml" +cat > "$PLAYBOOK_FILE" <&1) + if [ $? -ne 0 ]; then + echo "Ansible failed for: $c" + echo "$ansible_out" + exit 1 + fi +done + if [ $mongo_setup_type == "pss" ]; then bash -e ./configure-replset.sh else diff --git a/pmm_psmdb-pbm_setup/start-rs.sh b/pmm_psmdb-pbm_setup/start-rs.sh index aa9e3c8b..dc8f89a1 100755 --- a/pmm_psmdb-pbm_setup/start-rs.sh +++ b/pmm_psmdb-pbm_setup/start-rs.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e pmm_server_admin_pass=${ADMIN_PASSWORD:-password} profile=${COMPOSE_PROFILES:-classic} diff --git a/pmm_psmdb-pbm_setup/start-sharded.sh b/pmm_psmdb-pbm_setup/start-sharded.sh index e63274eb..ed9c26d9 100755 --- a/pmm_psmdb-pbm_setup/start-sharded.sh +++ b/pmm_psmdb-pbm_setup/start-sharded.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -ex pmm_user=${PMM_USER:-pmm} pmm_pass=${PMM_PASS:-pmmpass} pbm_user=${PBM_USER:-pbm} @@ -46,6 +45,8 @@ do }; rs.initiate(config); EOF + + sleep 60 echo echo "configuring root user on primary $node replicaset $rs" @@ -228,22 +229,56 @@ do echo "restarting pbm agent on $node" docker compose -f docker-compose-sharded.yaml exec -T $node systemctl restart pbm-agent done -echo -echo "configuring pmm agents" + +echo "Install and setup PMM Client" + +PLAYBOOK_FILE="install_pmm_client.yml" +cat > "$PLAYBOOK_FILE" <&1) + + if [ $? -ne 0 ]; then + echo "Ansible failed for: $node" + echo "$ansible_out" + exit 1 + fi + + docker exec $node pmm-admin add mongodb --agent-password=mypass --cluster=sharded --environment=mongo-sharded-dev --username=${pmm_user} --password=${pmm_pass} ${node}_${random_number} 127.0.0.1:27017 done echo "configuring pmm-agent on primary rscfg01 for mongos instance" docker compose -f docker-compose-sharded.yaml exec -T rscfg01 pmm-admin add mongodb --agent-password=mypass --cluster=sharded --environment=mongo-sharded-dev --username=${pmm_user} --password=${pmm_pass} mongos_${random_number} mongos:27017 echo "adding some data" -docker compose -f docker-compose-sharded.yaml exec -T mongos mgodatagen -f /etc/datagen/sharded.json --uri=mongodb://root:root@127.0.0.1:27017 +docker exec mongos yum install -y wget +docker exec mongos wget -O mgodatagen_linux_amd64.tar.gz https://github.com/feliixx/mgodatagen/releases/download/v0.12.0/mgodatagen_0.12.0_darwin_amd64.tar.gz +docker exec mongos tar -xzf mgodatagen_linux_amd64.tar.gz +docker exec mongos mv mgodatagen /usr/local/bin/ +docker exec mongos chmod +x /usr/local/bin/mgodatagen +docker exec mongos mgodatagen -f /etc/datagen/sharded.json --uri=mongodb://root:root@127.0.0.1:27017 + tests=${TESTS:-yes} if [ $tests != "no" ]; then echo "running tests" @@ -252,6 +287,7 @@ if [ $tests != "no" ]; then else echo "skipping tests" fi + cleanup=${CLEANUP:-yes} if [ $cleanup != "no" ]; then echo "cleanup" diff --git a/pmm_psmdb_diffauth_setup/test-auth.sh b/pmm_psmdb_diffauth_setup/test-auth.sh index cfc7ebb9..37e244e3 100755 --- a/pmm_psmdb_diffauth_setup/test-auth.sh +++ b/pmm_psmdb_diffauth_setup/test-auth.sh @@ -11,7 +11,7 @@ # TESTS - whether to run tests, by default - yes # CLEANUP - whether to remove setup, by default - yes -set -e +#set -e # PSMDB 4.2 doesn't support AWS auth if [[ -n "$PSMDB_VERSION" ]] && [[ "$PSMDB_VERSION" == *"4.2."* ]]; then @@ -25,41 +25,58 @@ fi bash -e ./generate-certs.sh -#Start setup +echo "Start setup" docker compose -f docker-compose-pmm-psmdb.yml down -v --remove-orphans docker compose -f docker-compose-pmm-psmdb.yml build docker compose -f docker-compose-pmm-psmdb.yml up -d -#Add users +echo "Add users" docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server mongo --quiet << EOF db.getSiblingDB("admin").createUser({ user: "root", pwd: "root", roles: [ "root", "userAdminAnyDatabase", "clusterAdmin" ] }); EOF docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server mongo --quiet "mongodb://root:root@localhost/?replicaSet=rs0" < init/setup_psmdb.js -#Configure PBM +echo "Configure PBM" docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server bash -c "echo \"PBM_MONGODB_URI=mongodb://pbm:pbmpass@127.0.0.1:27017\" > /etc/sysconfig/pbm-agent" docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server systemctl restart pbm-agent -#Configure PMM -set +e -i=1 -while [ $i -le 3 ]; do - output=$(docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server pmm-agent setup --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml --server-address=pmm-server:8443 --metrics-mode=auto --server-username=admin --server-password=${ADMIN_PASSWORD} --server-insecure-tls) - exit_code=$? +echo "Install PMM Client" - if [ $exit_code -ne 0 ] && [[ $output == *"500 Internal Server Error"* ]]; then - i=$((i + 1)) - else - break - fi - sleep 1 -done +docker ps -a + +PLAYBOOK_FILE="install_pmm_client.yml" +cat > "$PLAYBOOK_FILE" <&1) + +if [ $? -ne 0 ]; then + echo "Ansible failed for: psmdb-server" + echo "$ansible_out" + exit 1 +fi + +echo "Add Mongo Service" random_number=$RANDOM docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server pmm-admin add mongodb psmdb-server_${random_number} --agent-password=mypass --username=pmm_mongodb --password="5M](Q%q/U+YQ<^m" --host psmdb-server --port 27017 --tls --tls-certificate-key-file=/mongodb_certs/client.pem --tls-ca-file=/mongodb_certs/ca-certs.pem --cluster=mycluster -#Add some data -docker compose -f docker-compose-pmm-psmdb.yml exec -T psmdb-server mgodatagen -f /etc/datagen/replicaset.json --username=pmm_mongodb --password="5M](Q%q/U+YQ<^m" --host psmdb-server --port 27017 --tlsCertificateKeyFile=/mongodb_certs/client.pem --tlsCAFile=/mongodb_certs/ca-certs.pem + +echo "Add some data" +docker exec psmdb-server wget -O mgodatagen_linux_amd64.tar.gz https://github.com/feliixx/mgodatagen/releases/download/v0.12.0/mgodatagen_0.12.0_darwin_amd64.tar.gz +docker exec psmdb-server tar -xzf mgodatagen_linux_amd64.tar.gz +docker exec psmdb-server mv mgodatagen /usr/local/bin/ +docker exec psmdb-server chmod +x /usr/local/bin/mgodatagen +docker exec psmdb-server mgodatagen -f /etc/datagen/replicaset.json --username=pmm_mongodb --password="5M](Q%q/U+YQ<^m" --host psmdb-server --port 27017 --tlsCertificateKeyFile=/mongodb_certs/client.pem --tlsCAFile=/mongodb_certs/ca-certs.pem tests=${TESTS:-yes} if [ $tests = "yes" ]; then diff --git a/pmm_qa/percona_server/data/my.cnf.j2 b/pmm_qa/percona_server/data/my.cnf.j2 index fd4b27f2..3f8bbc97 100644 --- a/pmm_qa/percona_server/data/my.cnf.j2 +++ b/pmm_qa/percona_server/data/my.cnf.j2 @@ -1,2 +1,3 @@ [mysqld] -userstat=1 \ No newline at end of file +userstat=1 +innodb_buffer_pool_size=256M \ No newline at end of file diff --git a/pmm_qa/percona_server/tasks/percona-server-setup-single.yml b/pmm_qa/percona_server/tasks/percona-server-setup-single.yml index 9fbad84c..bf564fa1 100644 --- a/pmm_qa/percona_server/tasks/percona-server-setup-single.yml +++ b/pmm_qa/percona_server/tasks/percona-server-setup-single.yml @@ -20,6 +20,9 @@ volumes: - "{{ data_dir }}/node{{ item }}/my.cnf:/etc/mysql/my.cnf" - "{{ data_dir }}/node{{ item }}/data:/var/lib/mysql" + memory: "2g" + memory_reservation: "1g" + memory_swap: "4g" loop: "{{ range(1, nodes_count | int + 1) | list }}" - name: Wait for MySQL to be available diff --git a/pmm_qa/pmm-framework.py b/pmm_qa/pmm-framework.py index 24f4b769..c0546987 100755 --- a/pmm_qa/pmm-framework.py +++ b/pmm_qa/pmm-framework.py @@ -422,7 +422,6 @@ def execute_shell_scripts(shell_scripts, project_relative_scripts_dir, env_vars, # Get script directory current_directory = os.getcwd() shell_scripts_path = os.path.abspath(os.path.join(current_directory, os.pardir, project_relative_scripts_dir)) - # Get the original working directory original_dir = os.getcwd() @@ -555,6 +554,7 @@ def setup_psmdb(db_type, db_version=None, db_config=None, args=None): # Define environment variables for playbook env_vars = { + 'PMM_SERVER_IP': args.pmm_server_ip or container_name or '127.0.0.1', 'PSMDB_VERSION': psmdb_version, 'PMM_SERVER_CONTAINER_ADDRESS': server_address, 'PSMDB_CONTAINER': 'psmdb_pmm_' + str(psmdb_version), @@ -697,6 +697,7 @@ def setup_ssl_psmdb(db_type, db_version=None, db_config=None, args=None): # Define environment variables for playbook env_vars = { + 'PMM_SERVER_IP': args.pmm_server_ip or container_name or '127.0.0.1', 'PSMDB_VERSION': psmdb_version, 'PMM_SERVER_CONTAINER_ADDRESS': server_address, 'PSMDB_CONTAINER': 'psmdb_pmm_' + str(psmdb_version), diff --git a/pmm_qa/scripts/install_pmm_client.sh b/pmm_qa/scripts/install_pmm_client.sh new file mode 100644 index 00000000..ed70c0d7 --- /dev/null +++ b/pmm_qa/scripts/install_pmm_client.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Read passed values. +for arg in "$@" +do + case $arg in + server_ip=*) + server_ip="${arg#*=}" + ;; + esac +done + +echo "The server IP is: $server_ip" +# Now you can use $server_ip anywhere in your script + +echo "Set correct pmm server port, 8443 for docker image. 443 for ip address" +if [[ $server_ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then + export PMM_SERVER_PORT=443 +else + export PMM_SERVER_PORT=8443 +fi + +echo "Detect OS" +export OS_INFO=$(cat /etc/os-release) + +echo $OS_INFO +echo $server_ip +echo $PMM_SERVER_PORT diff --git a/pmm_qa/tasks/install_pmm_client.yml b/pmm_qa/tasks/install_pmm_client.yml index 188b5739..00a36e79 100644 --- a/pmm_qa/tasks/install_pmm_client.yml +++ b/pmm_qa/tasks/install_pmm_client.yml @@ -1,3 +1,12 @@ +- name: Set PMM Server address if undefined + set_fact: + pmm_server_ip: "pmm-server" + when: pmm_server_ip | default('') == '' + +- name: "Log PMM Server IP" + debug: + msg: "{{ pmm_server_ip }} is pmm server IP" + - name: Get PMM server address shell: 'docker ps -f name=-server --format "{{ "{{" }}.Names{{ "}}" }}"' register: pmm_server_ip_output @@ -8,17 +17,7 @@ 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" +- name: "Log PMM Server IP" debug: msg: "{{ pmm_server_ip }} is pmm server IP" @@ -33,9 +32,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 +47,179 @@ }} - name: Install dependencies inside Debian-family container - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: > - sh -c ' + shell: | + docker exec -u root {{ container_name }} sh -c ' apt-get update && apt-get install -y wget gnupg2 jq lsb-base lsb-release curl - ' - user: "root" + ' 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" + shell: docker exec -u root {{ container_name }} dnf install -y microdnf + when: distro_family == "rhel" + ignore_errors: true + +- name: Install dependencies on RHEL-family containers + shell: docker exec -u root {{ container_name }} microdnf install -y wget gnupg2 jq perl 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 -u root {{ container_name }} microdnf install -y curl-minimal wget when: distro_family == "rhel" ignore_errors: true - name: Get lsb_release - community.docker.docker_container_exec: - container: "{{ container_name }}" - command: > - bash -c "grep '^VERSION_CODENAME=' /etc/os-release | cut -d '=' -f2 | tr -d '\"'" - user: "root" + shell: docker exec -u root {{ container_name }} bash -c "grep '^VERSION_CODENAME=' /etc/os-release | cut -d '=' -f2 | tr -d '\"'" register: lsb_release - name: Set lsb_release set_fact: lsb_release: "{{ lsb_release.stdout }}" -- name: Print expected client version - debug: - msg: "{{ metrics_mode }}" +- name: Set metrics mode to auto when metrics mode is not defined. + set_fact: + metrics_mode: "auto" + when: metrics_mode is not defined - 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 -u root {{ container_name }} 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 + ' when: - distro_family == 'debian' -- 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 - ' +- name: Install percona release on RHEL-family containers + shell: | + docker exec -u 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 -u 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 -u 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 -u 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 -u 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 -u 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 == "release" + +- name: Install pmm client release on RHEL-family containers + shell: | + docker exec -u root {{ container_name }} sh -c ' + percona-release enable-only pmm3-client release && + microdnf install -y pmm-client + ' + when: distro_family == "rhel" and client_version == "release" + +- name: Install pmm client release on Debian-family containers + shell: | + docker exec -u 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 -u 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 -u 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]+$') + - 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 -u 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]+$') + - 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 -u 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 + - client_version | regex_search('^https?://.*\.tar\.gz$') is not none + +- name: Generate random node name suffix + set_fact: + random_node_name_suffix: "_{{ 99999 | random + 1 }}" + when: random_node_name_suffix is not defined - 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 -u root {{ container_name }} env PMM_AGENT_SETUP_NODE_NAME="{{ container_name }}{{ random_node_name_suffix }}" 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 }}{{ random_node_name_suffix }} 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 without metrics mode + shell: > + docker exec -u root {{ container_name }} env PMM_AGENT_SETUP_NODE_NAME="{{ container_name }}{{ random_node_name_suffix }}" 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 }}{{ random_node_name_suffix }} when: metrics_mode | length == 0 - name: Wait 5 seconds for connection to complete @@ -252,11 +227,8 @@ seconds: 5 - name: Start pmm client - community.docker.docker_container_exec: - container: "{{ container_name }}" - user: "root" - command: > - sh -c 'nohup pmm-agent --config-file=/usr/local/percona/pmm/config/pmm-agent.yaml > /var/log/pmm-agent.log 2>&1 &' + shell: > + docker exec -u 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 pause: