aboutsummaryrefslogtreecommitdiff
path: root/share/hydra/init
blob: 3cf3074e1ebe7f35d6a42f56c7dd63ade3b84a60 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/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"
#DEPENDENCIES="keyringer"

# 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

# 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