summaryrefslogtreecommitdiff
path: root/share/hydra/init
blob: 2caf1c58062dc226199869ad7440add007b74615 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/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
# <http://www.gnu.org/licenses/>.

# 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 <path> [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
  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 '.gitmodules' ] && grep -q \"config\" .gitmodules; then
        git submodule update --init $repo
      else
        if git ls-remote ${REMOTE}/$repo &> /dev/null; then
          git clone ${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 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