#!/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" #DEPENDENCIES="keyringer" # 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 # Check for dependencies #for dependency in $DEPENDENCIES; do # if ! which $dependency &> /dev/null; then # echo "Please install $dependency" # exit 1 # fi #done # Clone configuration repository or setup a new hydra if [ ! -z "$REMOTE" ]; then # Try to clone the superproject first if git ls-remote $REMOTE &> /dev/null; then git clone $REMOTE $BASEDIR fi ( mkdir -p $BASEDIR cd $BASEDIR # Initialize only the required repositories for repo in $BASEREPOS; do if [ -e "$HYDRA_FOLDER/config/repository/ignore/$repo" ]; then continue fi # There is a superproject, so we try to initialize submodules if [ -e '.gitmodules' ] && git submodule | grep -q " $repo$"; then git submodule update --init --recursive $repo else # No superproject, so we clone each repository REMOTE="`echo $REMOTE | sed -e 's|/$||'`" if git ls-remote ${REMOTE}/$repo &> /dev/null; then git clone --recursive ${REMOTE}/$repo `basename $repo .git` else echo "Skipping unavailable ${REMOTE}/$repo..." fi 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 https://git.fluxo.info/puppet-bootstrap $BASEDIR/puppet # Config puppet echo "Configuring puppet repository..." hydra_bootstrap_config $BASEDIR/puppet fi # Create ansible repository mkdir -p $BASEDIR/ansible cp -r $APP_BASE/share/ansible $BASEDIR/ansible hydra_git_init $BASEDIR/ansible 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