#!/bin/bash # # Register an existing hydra # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public # License along with this program. If not, see # . # Load source $APP_BASE/lib/hydra/functions || exit 1 hydra_config_load # Command line arguments BASEDIR="$1" REMOTE="$2" # Validation if [ -z "$BASEDIR" ]; then echo "Usage: hydra [hydra] init [remote]" exit 1 elif grep -q -e "^$HYDRA=" $CONFIG &> /dev/null; then echo "Hydra $HYDRA already registered" exit 1 elif [ -d "$BASEDIR" ]; then echo "Folder $BASEDIR already exists, maybe you want to run 'hydra $HYDRA register'?" exit 1 fi # Clone configuration repository or setup a new hydra if [ ! -z "$REMOTE" ]; then # Try to clone the superproject first git clone $REMOTE $BASEDIR 2> /dev/null ( mkdir -p $BASEDIR cd $BASEDIR # Initialize only the required repositories for repo in $BASEREPOS; do if [ -e '.gitmodules' ] && grep -q \"config\" .gitmodules; then git submodule update --init $repo else git clone ${REMOTE}/$repo `basename $repo .git` fi done ) else # Create the superproject mkdir -p $BASEDIR # Optional: version control in the superproject #hydra_git_init $BASEDIR # Create config repository if [ ! -d "$BASEDIR/config" ]; then # Setup repository from template cp -r $APP_BASE/share/config $BASEDIR/config hydra_git_init $BASEDIR/config fi # Create doc repository if [ ! -d "$BASEDIR/doc" ]; then mkdir -p "$BASEDIR/doc" echo "Use this repository for notes about Hydra $HYDRA" > $BASEDIR/doc/README.md hydra_git_init $BASEDIR/doc fi # Create bootless repository if [ ! -d "$BASEDIR/bootless" ]; then echo "Initializing bootless repository..." hydra $HYDRA bootless init fi # Create puppet repository if [ ! -d "$BASEDIR/puppet" ]; then echo "Cloning initial puppet repository..." git clone git://git.fluxo.info/puppet-bootstrap.git $BASEDIR/puppet # Config puppet echo "Configuring puppet repository..." hydra_bootstrap_config $BASEDIR/puppet fi fi # Reparse basedir to force absolute folder BASEDIR="`cd $BASEDIR && pwd`" # Add entry echo "Registering hydra $HYDRA..." chmod 700 $BASEDIR echo "$HYDRA=\"$BASEDIR\"" >> $CONFIG cat<<-EOF Hydra suite relies heavilly in the address in the form of "admin.example.org" as the repository server which hosts configuration. So make sure you have the following in your ~/.ssh/config: Host admin.example.org HostName server.example.org Port 22 Replace HostName by the address of the git repository server and Port by it's SSH port. While HostName and Port might change in the future if you move your repository for another server, having a fixed alias helps to keep your git remotes always updated. EOF # Prompt echo "Press any key to continue, Ctrl-C to abort." read response # Sync repositories hydra $HYDRA sync