On Fri, Sep 21, 2012 at 10:48 AM, Michael Hanselmann <[email protected]> wrote:
> This utility can be used to configure an environment for a virtual
> cluster. It sets up entries in /etc/hosts, creates the necessary
> directory structure, and generates helper scripts.
>
> Documentation for virtual clusters will come in a later patch.
> ---
>  .gitignore              |    1 +
>  Makefile.am             |    9 +++
>  tools/vcluster-setup.in |  167 
> +++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 177 insertions(+), 0 deletions(-)
>  create mode 100644 tools/vcluster-setup.in
>
> diff --git a/.gitignore b/.gitignore
> index 393495e..2571df7 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -93,6 +93,7 @@
>  # tools
>  /tools/kvm-ifup
>  /tools/ensure-dirs
> +/tools/vcluster-setup
>
>  # scripts
>  /scripts/gnt-backup
> diff --git a/Makefile.am b/Makefile.am
> index 0cd3cfa..e002f85 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -160,6 +160,7 @@ CLEANFILES = \
>         $(man_MANS) \
>         $(manhtml) \
>         tools/kvm-ifup \
> +       tools/vcluster-setup
>         stamp-directories \
>         stamp-srclinks \
>         $(nodist_pkgpython_PYTHON) \
> @@ -665,6 +666,9 @@ dist_tools_SCRIPTS = \
>         tools/xm-console-wrapper \
>         tools/master-ip-setup
>
> +nodist_tools_SCRIPTS = \
> +       tools/vcluster-setup
> +
>  pkglib_python_scripts = \
>         daemons/import-export \
>         tools/check-cert-expired
> @@ -706,6 +710,7 @@ EXTRA_DIST = \
>         $(pkglib_python_scripts) \
>         devel/upload.in \
>         tools/kvm-ifup.in \
> +       tools/vcluster-setup.in \
>         $(docdot) \
>         $(docpng) \
>         $(docrst) \
> @@ -1037,6 +1042,10 @@ devel/upload: devel/upload.in $(REPLACE_VARS_SED)
>         sed -f $(REPLACE_VARS_SED) < $< > $@
>         chmod u+x $@
>
> +tools/vcluster-setup: tools/vcluster-setup.in $(REPLACE_VARS_SED)
> +       sed -f $(REPLACE_VARS_SED) < $< > $@
> +       chmod +x $@
> +
>  daemons/%:: daemons/%.in $(REPLACE_VARS_SED)
>         sed -f $(REPLACE_VARS_SED) < $< > $@
>         chmod +x $@
> diff --git a/tools/vcluster-setup.in b/tools/vcluster-setup.in
> new file mode 100644
> index 0000000..03bc572
> --- /dev/null
> +++ b/tools/vcluster-setup.in
> @@ -0,0 +1,167 @@
> +#!/bin/bash
> +#
> +
> +# Copyright (C) 2012 Google Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 2 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful, but
> +# WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +# General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> +# 02110-1301, USA.
> +
> +set -e -u -o pipefail
> +
> +readonly self=$(readlink -f $0)
> +readonly ensure_dirs=@PKGLIBDIR@/ensure-dirs
> +
> +usage() {
> +  echo "Usage: $0 <directory>"
> +  #echo
> +  #echo 'Options:'
> +  #echo "  -H  Hostname"
> +  #echo "  -P  Port (defaults to $default_port)"
> +}
> +
> +# Variables for options
> +nodecount=5
> +networkprefix=192.0.2
> +
> +# Parse options
> +while getopts :h opt; do
> +  case "$opt" in
> +    h)
> +      usage
> +      exit 0
> +    ;;
> +    \?)
> +      echo "Invalid option: -$OPTARG" >&2
> +      usage >&2
> +      exit 1
> +      ;;
> +    :)
> +      echo "Option -$OPTARG requires an argument" >&2
> +      usage >&2
> +      exit 1
> +      ;;
> +  esac
> +done
> +
> +shift $((OPTIND - 1))
> +
> +if [[ "$#" != 1 ]]; then
> +  usage
> +  exit 1
> +fi
> +
> +readonly rootdir=$1; shift
> +
> +if [[ ! -d "$rootdir" ]]; then
> +  echo "Directory '$rootdir' does not exist!" >&2
> +  exit 1
> +fi
> +
> +node_hostname() {
> +  local -r number="$1"
> +
> +  echo "node$((number + 1))"
> +}
> +
> +node_ipaddr() {
> +  local -r number="$1"
> +
> +  echo "$networkprefix.$((number + 10))"
> +}
> +
> +setup_node() {
> +  local -r number="$1"
> +  local -r nodedir=$rootdir/$(node_hostname $number)
> +
> +  if [[ ! -d $nodedir ]]; then
> +    mkdir $nodedir
> +  fi
> +
> +  mkdir -vp \
> +    $nodedir/etc/default \
> +    $nodedir/var/lock\
> +    $nodedir/var/{lib,log,run}/ganeti
> +
> +  GANETI_HOSTNAME=$(node_hostname $number) \
> +  GANETI_ROOTDIR=$nodedir \
> +  $ensure_dirs
> +
> +  local -r daemon_args="-b $(node_ipaddr $number)"
> +
> +  cat > $nodedir/etc/default/ganeti <<EOF
> +  # Default settings for virtual node $i
> +  NODED_ARGS='$daemon_args'
> +  MASTERD_ARGS=''
> +  RAPI_ARGS='$daemon_args'
> +  CONFD_ARGS='$daemon_args'
> +
> +  export GANETI_ROOTDIR='$nodedir'
> +  export GANETI_HOSTNAME='$(node_hostname $number)'
> +EOF
> +
> +  cat > $nodedir/cmd <<EOF
> +#!/bin/bash
> +
> +export GANETI_ROOTDIR='$nodedir'
> +export GANETI_HOSTNAME='$(node_hostname $number)'
> +
> +bash -c "\$*"
> +EOF
> +  chmod +x $nodedir/cmd
> +}
> +
> +setup_all_nodes() {
> +  for ((i=0; i < nodecount; ++i)); do
> +    setup_node $i
> +  done
> +}
> +
> +setup_etc_hosts() {
> +  local -r tmpfile=/etc/hosts.vcluster.$$.$RANDOM
> +  {
> +    egrep -v "^$networkprefix.[[:digit:]]+[[:space:]]" /etc/hosts
> +    echo "$networkprefix.1 cluster"
> +    for ((i=0; i < nodecount; ++i)); do
> +      echo "$(node_ipaddr $i) $(node_hostname $i)"
> +    done
> +    for ((i=1; i < 10; ++i)); do
> +      echo "$networkprefix.$((i + 50)) instance$i"
> +    done
> +  } > $tmpfile && \
> +  chmod 0644 $tmpfile && \
> +  mv -v $tmpfile /etc/hosts
> +}
> +
> +setup_network_interfaces() {
> +  local ipaddr
> +
> +  #ip addr del "$networkprefix.1" dev eth0 || :
> +  #ip addr add "$networkprefix.1" dev eth0

Left overs from tests?

> +
> +  for ((i=0; i < nodecount; ++i)); do
> +    ipaddr="$(node_ipaddr $i)/32"
> +    ip addr del "$ipaddr" dev eth0 || :
> +    ip addr add "$ipaddr" dev eth0
> +  done
> +}
> +
> +#set -x

This as well?

Rest LGTM

René

Reply via email to