summaryrefslogtreecommitdiffstats
path: root/auth/docker/dbuild.sh
blob: e768904bd2f96364bcb1a18beef1b7039d3ae05f (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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#########
#  ============LICENSE_START====================================================
#  org.onap.aaf
#  ===========================================================================
#  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
#  ===========================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#  ============LICENSE_END====================================================
#
# Docker Building Script.  Reads all the components generated by install, on per-version basis
#

# Pull in Variables from d.props
if [ ! -e ./d.props ]; then
    cp d.props.init d.props
fi

. ./d.props

# Remove "SNAPSHOT" from AAF Jars in Containers
JAR_VERSION=${VERSION/-SNAPSHOT/}

function SCP() {
  SANS=${1/-SNAPSHOT/}
  echo $1 = $SANS
  if [ -e $SANS ]; then
    cp $SANS $2
  else 
 
    ln $1 $SANS
    cp $SANS $2
    rm $SANS
  fi
}

# process input. originally, an optional positional parameter is used to designate a component.
# A flagged parameter has been added to optionally indicate docker pull registry. Ideally, options
# would be flagged but we're avoiding ripple effect of changing original usage
if [ $# -gt 0 ]; then
    if [ "$1" == "-r" ]; then
        DOCKER_PULL_REGISTRY=$2
    else
        AAF_COMPONENTS=$1
        if [[ $# -gt 1 && $2 == "-r" ]]; then
            # If docker.io is indicated, registry var is void as that is docker default
            if [ $3 == "docker.io" ]; then
                DOCKER_PULL_REGISTRY=''
            else
                DOCKER_PULL_REGISTRY=$3
            fi
	   shift
        fi
    fi
fi

grep -v '#' d.props | grep '=' | grep -v -e "=$"

DOCKER=${DOCKER:=docker}

########
# Preliminary: if Cass exists, build that first
if [[ -z "$1" || "$1" = "cass" ]]; then
  echo "#### Delegate to Cassandra build"
  echo "Building Containers for aaf components, version $VERSION"
  # AAF_cass now needs a version...
  echo "### Build Cass"
  cd ../auth-cass/docker
  bash ./dbuild.sh $DOCKER_PULL_REGISTRY
  cd -
fi

if [[ -z "$1" || "$1" = "base" ]]; then
  ########
  # First, build a AAF Base version - set the core image, etc
  echo "### Build Base"
  sed -e 's/${AAF_VERSION}/'${VERSION}'/g' \
      -e 's/${JAR_VERSION}/'${JAR_VERSION}'/g' \
      -e 's/${DUSER}/'${DUSER}'/g' \
      -e 's/${REGISTRY}/'${DOCKER_PULL_REGISTRY}'/g' \
      Dockerfile.base > Dockerfile
  $DOCKER build -t ${ORG}/${PROJECT}/aaf_base:${VERSION} .
  $DOCKER tag ${ORG}/${PROJECT}/aaf_base:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_base:${VERSION}
  $DOCKER tag ${ORG}/${PROJECT}/aaf_base:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_base:latest
  rm Dockerfile
fi  
  
# Common copies
cd ..
SCP ../cadi/aaf/target/aaf-cadi-aaf-${VERSION}-full.jar sample/bin

if [[ -z "$1" || "$1" = "config" ]]; then
  ########
  # Second, Create the AAF Config (Security) Images
  # Note: only 2 jars each in Agent/Config
  SCP auth-cmd/target/aaf-auth-cmd-$VERSION-full.jar sample/bin
  SCP auth-batch/target/aaf-auth-batch-$VERSION-full.jar sample/bin
  SCP ../cadi/servlet-sample/target/aaf-cadi-servlet-sample-${VERSION}-sample.jar sample/bin
  cp -Rf ../conf/CA sample
  
  # AAF Config image (for AAF itself)
  echo "### Build Config"
  sed -e 's/${AAF_VERSION}/'${VERSION}'/g' \
      -e 's/${JAR_VERSION}/'${JAR_VERSION}'/g' \
      -e 's/${AAF_COMPONENT}/'${AAF_COMPONENT}'/g' \
      -e 's/${DOCKER_REPOSITORY}/'${DOCKER_REPOSITORY}'/g' \
      -e 's/${DUSER}/'${DUSER}'/g' \
      docker/Dockerfile.config > sample/Dockerfile
  # Note: do Config as Root, to get directories correct
  $DOCKER build -t ${ORG}/${PROJECT}/aaf_config:${VERSION} sample
  $DOCKER tag ${ORG}/${PROJECT}/aaf_config:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_config:${VERSION}
  $DOCKER tag ${ORG}/${PROJECT}/aaf_config:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_config:latest
fi  

if [[ -z "$1" || "$1" = "agent" ]]; then
  # AAF Agent Image (for Clients)
  echo "### Build Agent"
  sed -e 's/${AAF_VERSION}/'${VERSION}'/g' \
      -e 's/${JAR_VERSION}/'${JAR_VERSION}'/g' \
      -e 's/${AAF_COMPONENT}/'${AAF_COMPONENT}'/g' \
      -e 's/${DOCKER_REPOSITORY}/'${DOCKER_REPOSITORY}'/g' \
      -e 's/${DUSER}/'${DUSER}'/g' \
      docker/Dockerfile.agent > sample/Dockerfile
  #if [ -n "$DUSER" ]; then
  # echo "USER $DUSER" >> sample/Dockerfile
  #fi
  $DOCKER build -t ${ORG}/${PROJECT}/aaf_agent:${VERSION} sample
  $DOCKER tag ${ORG}/${PROJECT}/aaf_agent:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_agent:${VERSION}
  $DOCKER tag ${ORG}/${PROJECT}/aaf_agent:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_agent:latest

fi

# Clean up 
rm -Rf sample/Dockerfile sample/bin/aaf-*-*.jar sample/CA
cd -

########
# Third Copy AAF Executables to a BUILD Directory, for easy Cleanup
echo "### Copy to aaf_DBUILD"
if [ -e "../aaf_$VERSION" ]; then
  cp -Rf ../aaf_$VERSION ../aaf_DBUILD
elif [ -e "../aaf_$JAR_VERSION" ]; then
  cp -Rf ../aaf_$JAR_VERSION ../aaf_DBUILD
else
  echo "ERROR: No AAF Built.  use Maven"
  exit
fi
if [ ! "$VERSION" = "$JAR_VERSION" ]; then 
  START_DIR=$(pwd)
  # Convert SNAPSHOT issues
  cp -Rf ../aaf_$VERSION ../aaf_DBUILD
  cd ../aaf_DBUILD/lib
  # If Built Jars are "SNAPSHOT", convert to NON SNAPSHOT
  for J in $(ls *-SNAPSHOT*); do mv $J ${J/-SNAPSHOT/}; done
  cd ../bin
  rm *.bat
  for S in $(ls); do
     sed -e "/$VERSION/s/$VERSION/$JAR_VERSION/g" $S > tmp
     mv tmp $S
  done
  cd ${START_DIR}
fi
cp ../sample/bin/pod_wait.sh  ../aaf_DBUILD/bin

if [[ -z "$1" || "$1" = "core" ]]; then
  ########
  # Fourth, build a core Docker Image to be used for all AAF Components
  # Apply currrent Properties to Docker file, and put in place.
  sed -e 's/${AAF_VERSION}/'${VERSION}'/g' \
      -e 's/${JAR_VERSION}/'${JAR_VERSION}'/g' \
      -e 's/${AAF_COMPONENT}/'${AAF_COMPONENT}'/g' \
      -e 's/${DOCKER_REPOSITORY}/'${DOCKER_REPOSITORY}'/g' \
      -e 's/${DUSER}/'${DUSER}'/g' \
      Dockerfile.core >../aaf_DBUILD/Dockerfile
  if [ -n "$DUSER" ]; then
    echo "USER $DUSER" >> ../aaf_DBUILD/Dockerfile
  fi
  cd ..

  $DOCKER build -t ${ORG}/${PROJECT}/aaf_core:${VERSION} aaf_DBUILD
  $DOCKER tag ${ORG}/${PROJECT}/aaf_core:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_core:${VERSION}
  $DOCKER tag ${ORG}/${PROJECT}/aaf_core:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_core:latest
  rm aaf_DBUILD/Dockerfile
 
  cd -
fi

if [[ -z "$1" || "$1" = "hello" ]]; then
  ########
  # Fifth, do Hello
  # Apply currrent Properties to Docker file, and put in place.
  echo "### Building Hello"
  cp ../sample/bin/client.sh  ../aaf_DBUILD/bin
  cp ../sample/hello/init.sh  ../aaf_DBUILD/bin/hello_init.sh
  SCP ../../cadi/aaf/target/aaf-cadi-aaf-${VERSION}-full.jar ../aaf_DBUILD/bin

  sed -e 's/${AAF_VERSION}/'${VERSION}'/g' \
      -e 's/${JAR_VERSION}/'${JAR_VERSION}'/g' \
      -e 's/${DOCKER_REPOSITORY}/'${DOCKER_REPOSITORY}'/g' \
      -e 's/${DUSER}/'${DUSER}'/g' \
      Dockerfile.hello >../aaf_DBUILD/Dockerfile
  #if [ -n "$DUSER" ]; then
  #  echo "USER $DUSER" >> ../aaf_DBUILD/Dockerfile
  #fi

  cd ..
  cp -Rf sample/etc aaf_DBUILD
  cp -Rf sample/logs aaf_DBUILD
  cp -Rf sample/cert aaf_DBUILD
  
  for C in cass certman cmd deforg fs gui locate oauth service; do
     rm aaf_DBUILD/lib/aaf-auth-$C-*
  done

  $DOCKER build -t ${ORG}/${PROJECT}/aaf_hello:${VERSION} aaf_DBUILD
  if [ -n ${DOCKER_REPOSITORY} ]; then
    $DOCKER tag ${ORG}/${PROJECT}/aaf_hello:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_hello:${VERSION}
    $DOCKER tag ${ORG}/${PROJECT}/aaf_hello:${VERSION} ${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/aaf_hello:latest
  fi
  cd -
fi
# Final cleanup
rm -Rf ../aaf_DBUILD