aboutsummaryrefslogtreecommitdiff
path: root/share/hydra/newnode
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2014-03-08 21:22:48 -0300
committerSilvio Rhatto <rhatto@riseup.net>2014-03-08 21:22:48 -0300
commitc4e5eac710afd783f9f2c46f3272f3931154e506 (patch)
tree78e0e9e4af8ad97fb517ccb96a6dc18b325c5d7a /share/hydra/newnode
parent61969d022aeeaa39822758ba5eadf5a37ef4ec20 (diff)
downloadhydra-c4e5eac710afd783f9f2c46f3272f3931154e506.tar.gz
hydra-c4e5eac710afd783f9f2c46f3272f3931154e506.tar.bz2
New actions
Diffstat (limited to 'share/hydra/newnode')
-rwxr-xr-xshare/hydra/newnode79
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
+)