From c4e5eac710afd783f9f2c46f3272f3931154e506 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Sat, 8 Mar 2014 21:22:48 -0300 Subject: New actions --- TODO.md | 3 +- share/config/templates/node/node.example.org.yaml | 2 + share/config/templates/node/node.pp | 3 + share/hydra/folder | 23 +++++++ share/hydra/newnode | 79 +++++++++++++++++++++++ share/hydractl/puppet-initialize | 20 ++++++ share/hydractl/puppet-reset-agent | 3 +- share/hydractl/puppet-setup-stored | 24 +++++++ 8 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 share/config/templates/node/node.example.org.yaml create mode 100644 share/config/templates/node/node.pp create mode 100755 share/hydra/folder create mode 100755 share/hydra/newnode create mode 100755 share/hydractl/puppet-initialize create mode 100755 share/hydractl/puppet-setup-stored diff --git a/TODO.md b/TODO.md index 0f16ed9..0d4933a 100644 --- a/TODO.md +++ b/TODO.md @@ -5,10 +5,9 @@ Hydra ----- - bootless: properly support `$subdevice` in parted or always use first device (like `/dev/sdb1`). - - puppet-setup-stored: configure storeconfigs database. Hydractl -------- - provision: config parser using a custom function with `include` directive, avoiding `source`. - - backup-restore-site: fix parameters + - puppet-setup-stored: configure storeconfigs database. diff --git a/share/config/templates/node/node.example.org.yaml b/share/config/templates/node/node.example.org.yaml new file mode 100644 index 0000000..56d0213 --- /dev/null +++ b/share/config/templates/node/node.example.org.yaml @@ -0,0 +1,2 @@ +--- +nodo::role: 'vserver' diff --git a/share/config/templates/node/node.pp b/share/config/templates/node/node.pp new file mode 100644 index 0000000..976316b --- /dev/null +++ b/share/config/templates/node/node.pp @@ -0,0 +1,3 @@ +node 'node.example.org' { + include nodo +} diff --git a/share/hydra/folder b/share/hydra/folder new file mode 100755 index 0000000..20f0bbe --- /dev/null +++ b/share/hydra/folder @@ -0,0 +1,23 @@ +#!/bin/bash +# +# Display hydra folder. +# +# 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 + +# Display folder +echo $HYDRA_FOLDER 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 +# . + +# 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 " + 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 +) diff --git a/share/hydractl/puppet-initialize b/share/hydractl/puppet-initialize new file mode 100755 index 0000000..3833e96 --- /dev/null +++ b/share/hydractl/puppet-initialize @@ -0,0 +1,20 @@ +#!/bin/bash +# +# Make puppet agent first connection with the master node. +# +# 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 +# . + +puppet agent --server puppet.`facter domain` --pluginsync true --waitforcert 60 --digest-sha1 --test \ + --ca_port 8141 --vardir /var/lib/puppet --ssldir /var/lib/puppet/ssl $* diff --git a/share/hydractl/puppet-reset-agent b/share/hydractl/puppet-reset-agent index 1aff2d8..2c7b724 100755 --- a/share/hydractl/puppet-reset-agent +++ b/share/hydractl/puppet-reset-agent @@ -18,5 +18,4 @@ /etc/init.d/puppet stop rm -rf /var/lib/puppet/ssl -puppet agent --server puppet.`facter domain` --waitforcert 60 --test --ca_port 8141 \ - --vardir /var/lib/puppet --ssldir /var/lib/puppet/ssl +hydractl puppet-initialize diff --git a/share/hydractl/puppet-setup-stored b/share/hydractl/puppet-setup-stored new file mode 100755 index 0000000..8e04261 --- /dev/null +++ b/share/hydractl/puppet-setup-stored @@ -0,0 +1,24 @@ +#!/bin/bash +# +# Setup puppet stored configs. +# +# 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 + +# TODO +echo "TODO!" -- cgit v1.2.3