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 1 week ago
parent
commit
97c4735129
7 changed files with 80 additions and 37 deletions
  1. +2
    -37
      modules/openstack_project/manifests/mirror_update.pp
  2. +8
    -0
      playbooks/roles/afsmon/README.rst
  3. +17
    -0
      playbooks/roles/afsmon/files/afsmon.cfg
  4. +41
    -0
      playbooks/roles/afsmon/tasks/main.yaml
  5. +1
    -0
      playbooks/roles/mirror-update/files/publish-mirror-logs
  6. +4
    -0
      playbooks/roles/mirror-update/tasks/main.yaml
  7. +7
    -0
      testinfra/test_mirror-update.py

+ 2
- 37
modules/openstack_project/manifests/mirror_update.pp View File

@@ -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
- 0
playbooks/roles/afsmon/README.rst View File

@@ -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
- 0
playbooks/roles/afsmon/files/afsmon.cfg View File

@@ -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
- 0
playbooks/roles/afsmon/tasks/main.yaml View File

@@ -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
- 0
playbooks/roles/mirror-update/files/publish-mirror-logs View File

@@ -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
- 0
playbooks/roles/mirror-update/tasks/main.yaml View File

@@ -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
- 0
testinfra/test_mirror-update.py View File

@@ -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