From: Jochen Topf Date: Sat, 25 Aug 2018 13:51:52 +0000 (+0200) Subject: Recipe to keep a local updated planet file. X-Git-Url: https://git.openstreetmap.org./chef.git/commitdiff_plain/e682a35a26a7106212d3da34665984b78b2c7505 Recipe to keep a local updated planet file. --- diff --git a/cookbooks/cplanet/README.md b/cookbooks/cplanet/README.md new file mode 100644 index 000000000..59e2ccbef --- /dev/null +++ b/cookbooks/cplanet/README.md @@ -0,0 +1,5 @@ +# cplanet cookbook + +This cookbook installs a current planet file and keeps a local copy up-to-date. +It is the basis for other services that need a current planet file. + diff --git a/cookbooks/cplanet/metadata.rb b/cookbooks/cplanet/metadata.rb new file mode 100644 index 000000000..2ee79ff07 --- /dev/null +++ b/cookbooks/cplanet/metadata.rb @@ -0,0 +1,8 @@ +name "cplanet" +maintainer "OpenStreetMap Administrators" +maintainer_email "admins@openstreetmap.org" +license "Apache-2.0" +description "Installs and keeps current planet file" +long_description IO.read(File.join(File.dirname(__FILE__), "README.md")) +version "1.0.0" +supports "ubuntu" diff --git a/cookbooks/cplanet/recipes/default.rb b/cookbooks/cplanet/recipes/default.rb new file mode 100644 index 000000000..bc9445cef --- /dev/null +++ b/cookbooks/cplanet/recipes/default.rb @@ -0,0 +1,72 @@ +# +# Cookbook Name:: cplanet +# Recipe:: default +# +# Copyright 2018, OpenStreetMap Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +user = 'cplanet' +basedir = '/srv/cplanet' +planet_source = 'https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf' + +package %w[ + pyosmium +] + +directory basedir do + owner 'root' + group 'root' + mode 0o755 +end + +%w[bin jobs log].each do |dir| + directory "#{basedir}/#{dir}" do + owner 'root' + group 'root' + mode 0o755 + end +end + +directory "#{basedir}/planet" do + owner user + group user + mode 0o755 +end + +%w[update update-planet].each do |file| + template "#{basedir}/bin/#{file}" do + source "#{file}.erb" + owner 'root' + group 'root' + mode 0o755 + variables :basedir => basedir, :user => user + end +end + +remote_file "#{basedir}/planet/planet.pbf" do + action :create_if_missing + source planet_source + owner user + group user + mode 0o644 +end + +cron 'update-planet' do + hour 1 + minute 17 + user 'root' + command "#{basedir}/bin/update" +end + diff --git a/cookbooks/cplanet/templates/default/update-planet.erb b/cookbooks/cplanet/templates/default/update-planet.erb new file mode 100644 index 000000000..e992c3578 --- /dev/null +++ b/cookbooks/cplanet/templates/default/update-planet.erb @@ -0,0 +1,26 @@ +#!/bin/sh + +# DO NOT EDIT - This file is being maintained by Chef + +# setup + +PLANETDIR="<%= @basedir %>/planet" +PLANETPREV="${PLANETDIR}/planet-previous.pbf" +PLANETCURR="${PLANETDIR}/planet.pbf" +PLANETNEW="${PLANETDIR}/planet-new.pbf" + +retval=1 +while [ $retval -eq 1 ]; do + pyosmium-up-to-date -v -o $PLANETNEW $PLANETCURR + retval=$? +done + +if [ $retval -ne 0 ]; then + exit $retval +fi + +# cleanup + +mv "$PLANETCURR" "$PLANETPREV" +mv "$PLANETNEW" "$PLANETCURR" + diff --git a/cookbooks/cplanet/templates/default/update.erb b/cookbooks/cplanet/templates/default/update.erb new file mode 100644 index 000000000..c1b1b90bb --- /dev/null +++ b/cookbooks/cplanet/templates/default/update.erb @@ -0,0 +1,30 @@ +#!/bin/sh + +# DO NOT EDIT - This file is being maintained by Chef + +USER="<%= @user %>" +DIR="<%= @basedir %>" +LOGDIR="${DIR}/log" + +# start logging + +exec >"${LOGDIR}/$(date +%Y%m%d-%H%M).log" 2>&1 + +echo "Updating planet file..." +sudo -u "$USER" "$DIR/bin/update-planet" + +echo "Running jobs..." +if [ -d "$DIR/jobs" ]; then + for job in `find "$DIR/jobs" -type f -executable | sort`; do + user=`stat '--format=%U' $job` + echo "Running '$job' as user '$user'..." + su -c "$job" "$user" + done +fi + +echo +echo "Expire old logs..." +find "${LOGDIR}" -mtime +28 -delete + +echo "Done." + diff --git a/roles/cplanet.rb b/roles/cplanet.rb new file mode 100644 index 000000000..92ae85374 --- /dev/null +++ b/roles/cplanet.rb @@ -0,0 +1,20 @@ +name "cplanet" +description "Role applied to servers providing a current planet file" + +default_attributes( + :accounts => { + :users => { + :jochen => { + :status => :administrator + }, + :cplanet => { + :status => :role, + :members => [:jochen, :tomh] + } + } + }, +) + +run_list( + "recipe[cplanet]" +)