diff options
Diffstat (limited to 'share/hydra/newnode')
-rwxr-xr-x | share/hydra/newnode | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/share/hydra/newnode b/share/hydra/newnode new file mode 100755 index 0000000..e6da2ad --- /dev/null +++ b/share/hydra/newnode @@ -0,0 +1,79 @@ +#!/bin/bash +# +# Create new node configuration. +# +# 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 +# <http://www.gnu.org/licenses/>. + +# Load. +source $APP_BASE/lib/hydra/functions || exit 1 +hydra_config_load + +# Parameters +BASENAME="`basename $0`" +NODE="$1" +NODES="$HYDRA_FOLDER/puppet/manifests/nodes.pp" + +# Check configuration and parameters +if [ -z "$NODE" ]; then + echo "usage: hydra $BASENAME <node>" + exit 1 +elif [ ! -e "$HYDRA_FOLDER/config/domain" ]; then + echo "fatal: please configure your domain at $HYDRA_FOLDER/config/domain" + exit 1 +elif [ ! -f "$NODES" ]; then + echo "fatal: nodes.pp not found" + exit 1 +elif grep -qe "^import \"nodes/$NODE.pp\"$" $NODES &> /dev/null; then + echo "fatal: node $NODE already defined" + exit 1 +fi + +# Domain +DOMAIN="`cat $HYDRA_FOLDER/config/domain`" + +# Create node +echo "import \"nodes/$NODE.pp\"" >> $NODES + +# Set YAML template +if [ -e "$HYDRA_FOLDER/config/templates/node/node.example.org.yaml" ]; then + YAML="$HYDRA_FOLDER/config/templates/node/node.example.org.yaml" +else + YAML="$APP_BASE/share/config/templates/node/node.example.org.yaml" +fi + +# Set node template +if [ -e "$HYDRA_FOLDER/config/templates/node/node.pp" ]; then + PP="$HYDRA_FOLDER/config/templates/node/node.pp" +else + PP="$APP_BASE/share/config/templates/node/node.pp" +fi + +# Copy YAML template +mkdir -p $HYDRA_FOLDER/puppet/hiera/production/domain/$DOMAIN/node +cp $YAML $HYDRA_FOLDER/puppet/hiera/production/domain/$DOMAIN/node/$NODE.$DOMAIN.yaml + +# Copy node template +mkdir -p $HYDRA_FOLDER/puppet/manifests/nodes +cp $PP $HYDRA_FOLDER/puppet/manifests/nodes/$NODE.pp + +# Edit the template +sed -i -e "s/node/$NODE/g" $HYDRA_FOLDER/puppet/manifests/nodes/$NODE.pp +sed -i -e "s/example.org/$DOMAIN/g" $HYDRA_FOLDER/puppet/manifests/nodes/$NODE.pp + +# Add to git +( + cd $HYDRA_FOLDER/puppet + git add manifests/site.pp manifests/nodes/$NODE.pp hiera/production/domain/$DOMAIN/node/$NODE.$DOMAIN.yaml +) |