Browse Source

Move afsmon to mirror-update.opendev.org

This migrates the afsmon script from puppet deploying on
mirror-update.openstack.org to ansible deploying on
mirror-update.opendev.org.

There is nothing particularly special and this just a straight install
with some minor dependencies.  Since we have log publishing running on
the opendev.org server, we publish the update logs alongside the
others.

Change-Id: Ifa3b4d59f8d0fc23a4492e50348bab30766d5779
changes/67/707267/4
Ian Wienand 2 years ago
parent
commit
97c4735129
  1. 39
      modules/openstack_project/manifests/mirror_update.pp
  2. 8
      playbooks/roles/afsmon/README.rst
  3. 17
      playbooks/roles/afsmon/files/afsmon.cfg
  4. 41
      playbooks/roles/afsmon/tasks/main.yaml
  5. 1
      playbooks/roles/mirror-update/files/publish-mirror-logs
  6. 4
      playbooks/roles/mirror-update/tasks/main.yaml
  7. 7
      testinfra/test_mirror-update.py

39
modules/openstack_project/manifests/mirror_update.pp

@ -458,47 +458,12 @@ class openstack_project::mirror_update (
}
# AFS Monitoring
file { '/etc/afsmon.cfg':
ensure => present,
content => template('openstack_project/mirror-update/afsmon.cfg.erb'),
replace => true,
}
vcsrepo { '/opt/afsmon':
ensure => latest,
provider => git,
revision => 'master',
source => 'https://opendev.org/opendev/afsmon',
}
python::virtualenv { '/usr/afsmon-env':
ensure => present,
owner => 'root',
group => 'root',
timeout => 0,
# puppet-python 1.9.4 wants to guess we want "virtualenv-3", which
# we don't. Fixed in later versions.
virtualenv => 'virtualenv',
version => 3,
}
exec { 'install_afsmon' :
command => '/usr/afsmon-env/bin/pip install --upgrade /opt/afsmon',
path => '/usr/local/bin:/usr/bin:/bin',
refreshonly => true,
subscribe => Vcsrepo['/opt/afsmon'],
require => Python::Virtualenv['/usr/afsmon-env'],
}
# NOTE(ianw) 2020-02 : moved to mirror-update.opendev.org and ansible
cron { 'afsmon':
minute => [0, 30],
command => '/usr/afsmon-env/bin/afsmon statsd >> /var/log/afsmon.log 2>&1',
environment => 'PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin',
require => [
Python::Virtualenv['/usr/afsmon-env'],
Exec['install_afsmon'],
File['/etc/afsmon.cfg'],
],
ensure => absent,
}
}

8
playbooks/roles/afsmon/README.rst

@ -0,0 +1,8 @@
afsmon
Install the afsmon tool and related bits and pieces for periodic
monitoring of AFS volumes. This role is really only intended to be
run on the `mirror-update` host as we only need one instance of it
running.
**Role Variables**

17
playbooks/roles/afsmon/files/afsmon.cfg

@ -0,0 +1,17 @@
[main]
# Enable debugging output
debug = True
# If specified, all fileservers in this cell will be queried
cell = openstack.org
# You can specify a specific list of fileservers. This is appended to
# the cell fileservers if present, otherwise is the canonical list
#fileservers = afs01.dfw.openstack.org
# fileserver02.afs.company.com
# fileserver03.afs.company.com
# Options for remote statsd host if required
[statsd]
host = graphite.opendev.org
port = 8125

41
playbooks/roles/afsmon/tasks/main.yaml

@ -0,0 +1,41 @@
- name: Ensure afsmon log directory
file:
path: '/var/log/afsmon'
state: directory
owner: root
group: root
mode: 0755
- name: Install dependency packages
package:
name:
- python3-pbr
- python3-statsd
- python3-prettytable
state: present
- name: Install afsmon
pip:
name: afsmon
state: present
executable: pip3
- name: Install configuration file
copy:
src: afsmon.cfg
dest: '/etc/'
mode: '0644'
- name: Install afsmon cron job
cron:
name: 'afsmon'
state: present
job: '/usr/local/bin/afsmon statsd >> /var/log/afsmon/afsmon.log 2>&1'
hour: '*'
minute: '30'
- name: Install logrotate rules
include_role:
name: logrotate
vars:
logrotate_file_name: '/var/log/afsmon/afsmon.log'

1
playbooks/roles/mirror-update/files/publish-mirror-logs

@ -20,6 +20,7 @@ RSYNC="rsync -avz --no-perms --no-owner --no-group"
$K5START $RSYNC /var/log/rsync-mirrors $DEST
$K5START $RSYNC /var/log/afs-release $DEST
$K5START $RSYNC /var/log/afsmon $DEST
# NOTE(ianw) : r/w volume as this is infrequently accessed; thus no
# replications and no "vos release" etc required.

4
playbooks/roles/mirror-update/tasks/main.yaml

@ -37,4 +37,8 @@
include_role:
name: afs-release
- name: Setup AFS monitoring script
include_role:
name: afsmon
# TODO: reprepro and other mirror components

7
testinfra/test_mirror-update.py

@ -63,3 +63,10 @@ def test_afs_release_script_run(host):
cmd = host.run('/opt/afs-release/release-volumes.py '
'--debug --skip-release')
assert cmd.succeeded
def test_afsmon_installed(host):
f = host.file('/usr/local/bin/afsmon')
assert f.exists
f = host.file('/etc/afsmon.cfg')
assert f.exists

Loading…
Cancel
Save