@@ -76,28 +76,19 @@ def task_run(dockerfile, configuration, task):
7676 serverspec_opts .extend (['--pattern' , spec_path ])
7777
7878 # serverspec env
79- serverspec_env = {}
80- dockertest_env_condition_list = configuration .get ('dockerTest.env' , {}).to_dict ()
81- for term in dockertest_env_condition_list :
82- if term in dockerfile ['image' ]['fullname' ]:
83- for key in dockertest_env_condition_list [term ]:
84- serverspec_env [key ] = str (dockertest_env_condition_list [term ][key ])
85- serverspec_env ['DOCKER_IMAGE' ] = dockerfile ['image' ]['fullname' ]
86- serverspec_env ['DOCKER_TAG' ] = dockerfile ['image' ]['tag' ]
87- serverspec_env ['DOCKERFILE' ] = os .path .basename (test_dockerfile .name )
79+ serverspec_env = DockerTestServerspecTaskLoader .generate_serverspec_environment (
80+ path = os .path .basename (test_dockerfile .name ),
81+ dockerfile = dockerfile ,
82+ configuration = configuration ,
83+ is_toolimage = is_toolimage
84+ )
8885
8986 # dockerfile content
90- dockerfile_content = []
91- dockerfile_content .append ('FROM %s' % dockerfile ['image' ]['fullname' ])
92- dockerfile_content .append ('COPY conf/ /' )
93-
94- if is_toolimage :
95- dockerfile_content .append ('RUN chmod +x /loop-entrypoint.sh' )
96- dockerfile_content .append ('ENTRYPOINT /loop-entrypoint.sh' )
97-
98- for term in configuration .get ('dockerTest.dockerfile' , {}):
99- if term in dockerfile ['image' ]['fullname' ]:
100- dockerfile_content .extend ( configuration .get ('dockerTest.dockerfile' ).get (term ))
87+ dockerfile_content = DockerTestServerspecTaskLoader .generate_dockerfile (
88+ dockerfile = dockerfile ,
89+ configuration = configuration ,
90+ is_toolimage = is_toolimage
91+ )
10192
10293 # DryRun
10394 if configuration .get ('dryRun' ):
@@ -114,7 +105,7 @@ def task_run(dockerfile, configuration, task):
114105 print ''
115106 print 'Dockerfile:'
116107 print '-----------'
117- print ' \n ' . join ( dockerfile_content )
108+ print dockerfile_content
118109
119110 os .remove (test_dockerfile .name )
120111 return True
@@ -134,15 +125,16 @@ def task_run(dockerfile, configuration, task):
134125
135126 # create Dockerfile
136127 with open (test_dockerfile .name , mode = 'w' , buffering = 0 ) as f :
137- f .write (' \n ' . join ( dockerfile_content ) )
128+ f .write (dockerfile_content )
138129 f .flush ()
139130 f .close ()
140131
141132 test_status = False
142133 for retry_count in range (0 , configuration .get ('retry' )):
143134 try :
144135 test_status = Command .execute (cmd , cwd = configuration .get ('serverspecPath' ), env = env )
145- except Exception :
136+ except Exception as e :
137+ print e
146138 pass
147139
148140 if test_status :
@@ -155,6 +147,49 @@ def task_run(dockerfile, configuration, task):
155147 os .remove (test_dockerfile .name )
156148 return test_status
157149
150+ @staticmethod
151+ def generate_serverspec_environment (path , dockerfile , configuration , is_toolimage = False ):
152+ ret = {}
153+
154+ # add default vars
155+ default_env_list = configuration .get ('dockerTest.environment.default' , False )
156+ if default_env_list :
157+ ret = default_env_list .to_dict ()
158+
159+ # add docker image specific vars
160+ image_env_list = configuration .get ('dockerTest.environment.image' )
161+ if image_env_list :
162+ image_env_list = image_env_list .to_dict ()
163+ for term in image_env_list :
164+ if term in dockerfile ['image' ]['fullname' ]:
165+ for key in image_env_list [term ]:
166+ ret [key ] = str (image_env_list [term ][key ])
167+
168+ # add spec specific vars
169+ ret ['DOCKER_IMAGE' ] = dockerfile ['image' ]['fullname' ]
170+ ret ['DOCKER_TAG' ] = dockerfile ['image' ]['tag' ]
171+ ret ['DOCKERFILE' ] = path
172+ ret ['DOCKER_IS_TOOLIMAGE' ] = str (int (is_toolimage ))
173+
174+ return ret
175+
176+
177+ @staticmethod
178+ def generate_dockerfile (dockerfile , configuration , is_toolimage = False ):
179+ ret = []
180+
181+ ret .append ('FROM %s' % dockerfile ['image' ]['fullname' ])
182+ ret .append ('COPY conf/ /' )
183+
184+ if is_toolimage :
185+ ret .append ('RUN chmod +x /loop-entrypoint.sh' )
186+ ret .append ('ENTRYPOINT /loop-entrypoint.sh' )
187+
188+ for term in configuration .get ('dockerTest.dockerfile' , {}):
189+ if term in dockerfile ['image' ]['fullname' ]:
190+ ret .extend ( configuration .get ('dockerTest.dockerfile' ).get (term ))
191+ return '\n ' .join (ret )
192+
158193 @staticmethod
159194 def task_title (task ):
160195 """
0 commit comments