Skip to content

(MAINT) test vmpooler #1007

(MAINT) test vmpooler

(MAINT) test vmpooler #1007

---
name: Install test matrix
on:
pull_request:
paths:
- .github/workflows/**/*
- spec/**/*
- lib/**/*
- tasks/**/*
- functions/**/*
- types/**/*
- plans/**/*
- hiera/**/*
- manifests/**/*
- templates/**/*
- files/**/*
- metadata.json
- Rakefile
- Gemfile
- provision.yaml
- .rspec
- .rubocop.yml
- .puppet-lint.rc
- .fixtures.yml
branches: [main]
workflow_dispatch: {}
jobs:
test-install:
name: PE ${{ matrix.version }} ${{ matrix.architecture }} on ${{ matrix.image }}
runs-on: ubuntu-latest
env:
BOLT_GEM: true
BOLT_DISABLE_ANALYTICS: true
LANG: en_US.UTF-8
strategy:
fail-fast: false
matrix:
architecture: [standard-with-dr]
version: [2025.6.0]
image: [litmusimage/ubuntu:24.04]
steps:
- name: Checkout Source
uses: actions/checkout@v4
- name: Activate Ruby 3.1
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1'
bundler-cache: true
- name: Print bundle environment
if: ${{ github.repository_owner == 'puppetlabs' }}
run: |
echo ::group::info:bundler
bundle env
echo ::endgroup::
- name: Provision test cluster
timeout-minutes: 15
run: |
echo ::group::prepare
mkdir -p $HOME/.ssh
echo 'Host *' > $HOME/.ssh/config
echo ' ServerAliveInterval 150' >> $HOME/.ssh/config
echo ' ServerAliveCountMax 2' >> $HOME/.ssh/config
echo ' StrictHostKeyChecking no' >> $HOME/.ssh/config
echo ' UserKnownHostsFile /dev/null' >> $HOME/.ssh/config
echo ' ConnectTimeout 30' >> $HOME/.ssh/config
echo ' ConnectionAttempts 10' >> $HOME/.ssh/config
bundle exec rake spec_prep
echo ::endgroup::
echo ::group::provision
bundle exec bolt plan run peadm_spec::provision_test_cluster \
--modulepath spec/fixtures/modules \
provider=docker \
image=${{ matrix.image }} \
architecture=${{ matrix.architecture }} \
--log-level trace
echo ::endgroup::
echo ::group::list modules
ls -l ./spec/fixtures/modules || true; echo
echo ::endgroup::
echo ::group::update every 'ssh:' tag in ./inventory.yaml file to add 'native-ssh: true' under install_test_cluster and indent correctly
sed -i -e '/ssh:/a\ native-ssh: true' ./inventory.yaml || true; echo
# Also add additional SSH options for container environments
sed -i -e '/ssh:/a\ connect-timeout: 30' ./inventory.yaml || true; echo
sed -i -e '/ssh:/a\ host-key-check: false' ./inventory.yaml || true; echo
# Set root credentials if not already present
sed -i -e '/ssh:/a\ user: root' ./inventory.yaml || true; echo
sed -i -e '/ssh:/a\ password: root' ./inventory.yaml || true; echo
echo ::endgroup::
echo ::group::list contents of ./inventory.yaml
ls -l ./inventory.yaml || true; echo
cat ./inventory.yaml || true; echo
echo ::endgroup::
echo ::group::list contents of spec/docker/inventory.yaml
ls -l ./spec/docker/inventory.yaml || true; echo
cat ./spec/docker/inventory.yaml || true; echo
echo ::endgroup::
echo ::group::info:request
cat request.json || true; echo
echo ::endgroup::
echo ::group::info:inventory
sed -e 's/password: .*/password: "[redacted]"/' < ./inventory.yaml || true
echo ::endgroup::
- name: Debug SSH connectivity
run: |
echo ::group::debug_ssh_connectivity
# Check if containers are running
docker ps
# Check SSH processes in containers
for container in $(docker ps --format "table {{.Names}}" | tail -n +2); do
echo "Testing SSH to container: $container"
echo "SSH processes in $container:"
docker exec $container ps aux | grep sshd || echo "No sshd processes found in $container"
# Test SSH connectivity directly
echo "Testing direct SSH connection to $container:"
container_ip=$(docker inspect $container | jq -r '.[0].NetworkSettings.IPAddress')
echo "Container IP: $container_ip"
# Get the mapped SSH port
ssh_port=$(docker port $container 22 | cut -d: -f2)
echo "SSH port mapping: localhost:$ssh_port -> $container:22"
# Test SSH connection with timeout
timeout 10 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 -p $ssh_port root@localhost 'echo "SSH connection successful"' || echo "SSH connection failed to $container"
done
echo ::endgroup::
- name: Check container SSH configuration
run: |
echo ::group::container_ssh_config
for container in $(docker ps --format "table {{.Names}}" | tail -n +2); do
echo "=== SSH config for $container ==="
docker exec $container cat /etc/ssh/sshd_config | grep -E "(PasswordAuthentication|PubkeyAuthentication|PermitRootLogin)" || true
echo "=== Test password auth ==="
ssh_port=$(docker port $container 22 | cut -d: -f2)
# Try common passwords
for password in "root" "password" "litmus"; do
echo "Trying password: $password"
timeout 5 sshpass -p "$password" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 -p $ssh_port root@localhost 'echo "Password auth successful with: $password"' && break
done || echo "Password authentication failed"
done
echo ::endgroup::
- name: Install PE on test cluster
timeout-minutes: 120
run: |
bundle exec bolt plan run peadm_spec::install_test_cluster \
--inventoryfile ./inventory.yaml \
--modulepath spec/fixtures/modules \
architecture=${{ matrix.architecture }} \
version=${{ matrix.version }} \
console_password=${{ secrets.CONSOLE_PASSWORD }}
- name: Tear down test cluster
if: ${{ always() }}
continue-on-error: true
run: |-
if [ -f spec/fixtures/litmus_inventory.yaml ]; then
echo ::group::tear_down
bundle exec rake 'litmus:tear_down'
echo ::endgroup::
echo ::group::info:request
cat request.json || true; echo
echo ::endgroup::
fi