Skip to content

Commit 7cb1ee4

Browse files
committed
Merge branch 'release/1.3.5'
2 parents 2c020ba + c6ec16a commit 7cb1ee4

File tree

221 files changed

+440
-436
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

221 files changed

+440
-436
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
All notable changes to this project will be documented in this file.
33
This project adheres to [WebDevOps.io Dockerfile](https://github.com/webdevops/Dockerfile).
44

5+
## [1.3.5] - 2017-02-12
6+
- Improve and fix parallel run of serverspec
7+
- Reduced python subprocess wait loop cpu time
8+
59
## [1.3.4] - 2017-02-03
610
- Add serverspec wrapper (do not run tests if Dockerfile isn't set or available)
711

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ requirements:
3636
cd tests/serverspec && bundle install --path=vendor
3737

3838
test:
39-
python bin/console test:serverspec --threads=auto/2 -v
39+
python bin/console test:serverspec --threads=auto -v
4040

4141
baselayout:
4242
python bin/console generate:provision --baselayout

bin/webdevops/Command.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
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, subprocess, tempfile
21+
import os, subprocess, tempfile, copy, time
2222

2323
def execute(cmd, cwd=False, env=None):
2424
"""
@@ -27,9 +27,20 @@ def execute(cmd, cwd=False, env=None):
2727

2828
print 'Execute: %s' % ' '.join(cmd)
2929

30-
# remove _ from env (prevent errors)
31-
if env is not None and '_' in env:
32-
del env['_']
30+
if env is not None:
31+
env = copy.deepcopy(env)
32+
env['PWD'] = os.environ['PWD']
33+
env['LC_CTYPE'] = os.environ['LC_CTYPE']
34+
env['SHELL'] = os.environ['SHELL']
35+
36+
if '_' in env:
37+
del env['_']
38+
39+
# add system env vars
40+
system_env_vars = ['PWD', 'PATH', 'LC_CTYPE', 'SHELL', 'DOCKER_HOST', 'DOCKER_CERT_PATH', 'DOCKER_MACHINE_NAME', 'DOCKER_TLS_VERIFY']
41+
for var_name in system_env_vars:
42+
if not var_name in env and var_name in os.environ:
43+
env[var_name] = os.environ[var_name]
3344

3445
# set current working directory
3546
path_current = os.getcwd()
@@ -51,7 +62,7 @@ def execute(cmd, cwd=False, env=None):
5162

5263
# wait for process end
5364
while proc.poll() is None:
54-
pass
65+
time.sleep(1)
5566

5667
# output stdout
5768
with open(file_stdout.name, 'r') as f:

bin/webdevops/command/DoitCommand.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def run_doit(self, task_loader, configuration):
2828
extra_configuration = {}
2929

3030
if 'threads' in configuration and configuration.get('threads') > 1:
31-
arguments.extend(['-n', str(configuration.get('threads'))])
31+
arguments.extend(['-n', str(configuration.get('threads')), '--parallel-type', 'process'])
3232

3333
if 'doitConfig' in configuration:
3434
extra_configuration = configuration.get('doitConfig')

bin/webdevops/taskloader/DockerBuildTaskLoader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def generate_task_list(self, dockerfileList):
3939
}
4040

4141
if dockerfile['dependency']:
42-
task['task_dep'].append('DockerBuild|%s' % dockerfile['dependency']);
42+
task['task_dep'].append('DockerBuild|%s' % dockerfile['dependency'])
4343

4444
tasklist.append(task)
4545

bin/webdevops/taskloader/DockerTestServerspecTaskLoader.py

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
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
2222
from webdevops import Command
2323
from .BaseDockerTaskLoader import BaseDockerTaskLoader
2424
from .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')

bin/webdevops/taskloader/DockerTestTestinfraTaskLoader.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ def generate_task_list(self, dockerfile_list):
4040
'actions': [(BaseTaskLoader.task_runner, [DockerTestTestinfraTaskLoader.task_run, [dockerfile, self.configuration]])],
4141
'task_dep': []
4242
}
43+
44+
if dockerfile['dependency']:
45+
task['task_dep'].append('DockerTestTestinfra|%s' % dockerfile['dependency'])
46+
4347
tasklist.append(task)
4448

4549
# task = {

conf/console.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ imagePath: 'documentation/docs/resources/images/'
77
baselayoutPath: 'baselayout'
88
testinfraPath: 'tests/testinfra'
99
serverspecPath: 'tests/serverspec'
10+
testDockerfilePath: 'tests/dockerfile'
1011
blacklistFile: 'BLACKLIST'
1112

1213
docker:
@@ -35,7 +36,7 @@ dockerTest:
3536
'/varnish':
3637
- 'ENV VARNISH_BACKEND_HOST webdevops.io'
3738

38-
environment:
39+
configuration:
3940
default:
4041
OS_FAMILY: 'ubuntu'
4142
OS_VERSION: '16.04'

docker/ansible/alpine-3/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ FROM webdevops/bootstrap:alpine-3
88
99
LABEL vendor=WebDevOps.io
1010
LABEL io.webdevops.layout=8
11-
LABEL io.webdevops.version=1.3.4
11+
LABEL io.webdevops.version=1.3.5

docker/ansible/centos-7/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ FROM webdevops/bootstrap:centos-7
88
99
LABEL vendor=WebDevOps.io
1010
LABEL io.webdevops.layout=8
11-
LABEL io.webdevops.version=1.3.4
11+
LABEL io.webdevops.version=1.3.5

0 commit comments

Comments
 (0)