1818# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
1919# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2020
21- import os , re , tempfile , json
21+ import os , re , tempfile , json , base64
2222from webdevops import Command
2323from .BaseDockerTaskLoader import BaseDockerTaskLoader
2424from .BaseTaskLoader import BaseTaskLoader
@@ -40,6 +40,10 @@ def generate_task_list(self, dockerfile_list):
4040 'actions' : [(BaseTaskLoader .task_runner , [DockerTestServerspecTaskLoader .task_run , [dockerfile , self .configuration ]])],
4141 'task_dep' : []
4242 }
43+
44+ if dockerfile ['dependency' ]:
45+ task ['task_dep' ].append ('DockerTestServerspec|%s' % dockerfile ['dependency' ])
46+
4347 tasklist .append (task )
4448
4549 # task = {
@@ -71,18 +75,18 @@ def task_run(dockerfile, configuration, task):
7175 tmp_suffix = '.%s_%s_%s.tmp' % (dockerfile ['image' ]['repository' ], dockerfile ['image' ]['imageName' ], dockerfile ['image' ]['tag' ])
7276 test_dockerfile = tempfile .NamedTemporaryFile (prefix = 'Dockerfile.' , suffix = tmp_suffix , dir = configuration .get ('serverspecPath' ), bufsize = 0 , delete = False )
7377
74- # serverspec options
75- serverspec_opts = []
76- serverspec_opts .extend (['--pattern' , spec_path ])
77-
78- # serverspec env
79- serverspec_env = DockerTestServerspecTaskLoader .generate_serverspec_environment (
78+ # serverspec conf
79+ serverspec_conf = DockerTestServerspecTaskLoader .generate_serverspec_configuration (
8080 path = os .path .basename (test_dockerfile .name ),
8181 dockerfile = dockerfile ,
8282 configuration = configuration ,
8383 is_toolimage = is_toolimage
8484 )
8585
86+ # serverspec options
87+ serverspec_opts = []
88+ serverspec_opts .extend ([spec_path , dockerfile ['image' ]['fullname' ], base64 .b64encode (json .dumps (serverspec_conf )), os .path .basename (test_dockerfile .name )])
89+
8690 # dockerfile content
8791 dockerfile_content = DockerTestServerspecTaskLoader .generate_dockerfile (
8892 dockerfile = dockerfile ,
@@ -99,15 +103,13 @@ def task_run(dockerfile, configuration, task):
99103 print ' path: %s' % (spec_path )
100104 print ' args: %s' % (' ' .join (serverspec_opts ))
101105 print ''
102- print 'environment :'
103- print '------------'
104- print json .dumps (serverspec_env , indent = 4 , sort_keys = True )
106+ print 'spec configuration :'
107+ print '------------------- '
108+ print json .dumps (serverspec_conf , indent = 4 , sort_keys = True )
105109 print ''
106110 print 'Dockerfile:'
107111 print '-----------'
108112 print dockerfile_content
109-
110- os .remove (test_dockerfile .name )
111113 return True
112114
113115 # check if we have any tests
@@ -119,10 +121,6 @@ def task_run(dockerfile, configuration, task):
119121 cmd = ['bash' , 'serverspec.sh' ]
120122 cmd .extend (serverspec_opts )
121123
122- # Set environment variables
123- env = os .environ .copy ()
124- env .update (serverspec_env )
125-
126124 # create Dockerfile
127125 with open (test_dockerfile .name , mode = 'w' , buffering = 0 ) as f :
128126 f .write (dockerfile_content )
@@ -133,7 +131,7 @@ def task_run(dockerfile, configuration, task):
133131 test_status = False
134132 for retry_count in range (0 , configuration .get ('retry' )):
135133 try :
136- test_status = Command .execute (cmd , cwd = configuration .get ('serverspecPath' ), env = env )
134+ test_status = Command .execute (cmd , cwd = configuration .get ('serverspecPath' ))
137135 except Exception as e :
138136 print e
139137 pass
@@ -145,25 +143,24 @@ def task_run(dockerfile, configuration, task):
145143 else :
146144 print ' failed, giving up'
147145
148- os .remove (test_dockerfile .name )
149146 return test_status
150147
151148 @staticmethod
152- def generate_serverspec_environment (path , dockerfile , configuration , is_toolimage = False ):
149+ def generate_serverspec_configuration (path , dockerfile , configuration , is_toolimage = False ):
153150 """
154- Generate serverspec environment dict
151+ Generate serverspec configuration dict
155152 """
156153 ret = {}
157154
158155 # add default vars
159- default_env_list = configuration .get ('dockerTest.environment .default' , False )
156+ default_env_list = configuration .get ('dockerTest.configuration .default' , False )
160157 if default_env_list :
161- ret = default_env_list .to_dict ()
158+ ret = default_env_list .to_dict (). copy ()
162159
163160 # add docker image specific vars
164- image_env_list = configuration .get ('dockerTest.environment .image' )
161+ image_env_list = configuration .get ('dockerTest.configuration .image' )
165162 if image_env_list :
166- image_env_list = image_env_list .to_dict ()
163+ image_env_list = image_env_list .to_dict (). copy ()
167164 for term in image_env_list :
168165 if term in dockerfile ['image' ]['fullname' ]:
169166 for key in image_env_list [term ]:
@@ -187,6 +184,7 @@ def generate_dockerfile(dockerfile, configuration, is_toolimage=False):
187184
188185 ret .append ('FROM %s' % dockerfile ['image' ]['fullname' ])
189186 ret .append ('COPY conf/ /' )
187+ ret .append ('RUN echo "%s" > /DOCKER.IMAGENAME' % dockerfile ['image' ]['fullname' ])
190188
191189 if is_toolimage :
192190 ret .append ('RUN chmod +x /loop-entrypoint.sh' )
0 commit comments