Skip to content

Commit 4ececd1

Browse files
committed
Fix serverspec environment settings
Now we have a default and image specific environment variables
1 parent dad69db commit 4ececd1

2 files changed

Lines changed: 133 additions & 90 deletions

File tree

bin/webdevops/taskloader/DockerTestServerspecTaskLoader.py

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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
"""

conf/console.yml

Lines changed: 75 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -34,72 +34,80 @@ dockerTest:
3434
dockerfile:
3535
'/varnish':
3636
- 'ENV VARNISH_BACKEND_HOST webdevops.io'
37-
env:
38-
':alpine':
39-
OS_FAMILY: 'alpine'
40-
OS_VERSION: '3'
41-
PHP_MHASH: '0'
42-
':ubuntu-12.04':
43-
OS_FAMILY: 'ubuntu'
44-
OS_VERSION: '12.04'
45-
PHP_REDIS: '0'
46-
PHP_APCU: '0'
47-
':ubuntu-14.04':
48-
OS_FAMILY: 'ubuntu'
49-
OS_VERSION: '14.04'
50-
':ubuntu-15.04':
51-
OS_FAMILY: 'ubuntu'
52-
OS_VERSION: '15.04'
53-
':ubuntu-15.10':
54-
OS_FAMILY: 'ubuntu'
55-
OS_VERSION: '15.10'
56-
':ubuntu-16.04':
57-
OS_FAMILY: 'ubuntu'
58-
OS_VERSION: '16.04'
59-
':debian-7':
60-
OS_FAMILY: 'debian'
61-
OS_VERSION: '7'
62-
PHP_REDIS: '0'
63-
PHP_APCU: '0'
64-
':debian-8':
65-
OS_FAMILY: 'debian'
66-
OS_VERSION: '8'
67-
':debian-8-php7':
68-
OS_FAMILY: 'debian'
69-
OS_VERSION: '8'
70-
PHP_XDEBUG: '0'
71-
':debian-9':
72-
OS_FAMILY: 'debian'
73-
OS_VERSION: 'testing'
74-
':centos-7':
75-
OS_FAMILY: 'redhat'
76-
OS_VERSION: '7'
77-
':centos-7-php56':
78-
OS_FAMILY: 'redhat'
79-
OS_VERSION: '7'
80-
PHP_APCU: '0'
81-
PHP_REDIS: '0'
82-
'/ssh':
83-
OS_FAMILY: 'ubuntu'
84-
OS_VERSION: '16.04'
85-
'/vsftp':
86-
OS_FAMILY: 'ubuntu'
87-
OS_VERSION: '16.04'
88-
'/postfix':
89-
OS_FAMILY: 'ubuntu'
90-
OS_VERSION: '16.04'
91-
'/mail-sandbox':
37+
38+
environment:
39+
default:
9240
OS_FAMILY: 'ubuntu'
9341
OS_VERSION: '16.04'
94-
'/liquibase':
95-
OS_FAMILY: 'alpine'
96-
OS_VERSION: '3'
97-
'/certbot':
98-
OS_FAMILY: 'alpine'
99-
OS_VERSION: '3'
100-
'/sphinx':
101-
OS_FAMILY: 'alpine'
102-
OS_VERSION: '3'
103-
'/varnish':
104-
OS_FAMILY: 'alpine'
105-
OS_VERSION: '3'
42+
image:
43+
':alpine':
44+
OS_FAMILY: 'alpine'
45+
OS_VERSION: '3'
46+
PHP_MHASH: '0'
47+
':ubuntu-12.04':
48+
OS_FAMILY: 'ubuntu'
49+
OS_VERSION: '12.04'
50+
PHP_REDIS: '0'
51+
PHP_APCU: '0'
52+
':ubuntu-14.04':
53+
OS_FAMILY: 'ubuntu'
54+
OS_VERSION: '14.04'
55+
':ubuntu-15.04':
56+
OS_FAMILY: 'ubuntu'
57+
OS_VERSION: '15.04'
58+
':ubuntu-15.10':
59+
OS_FAMILY: 'ubuntu'
60+
OS_VERSION: '15.10'
61+
':ubuntu-16.04':
62+
OS_FAMILY: 'ubuntu'
63+
OS_VERSION: '16.04'
64+
':debian-7':
65+
OS_FAMILY: 'debian'
66+
OS_VERSION: '7'
67+
PHP_REDIS: '0'
68+
PHP_APCU: '0'
69+
':debian-8':
70+
OS_FAMILY: 'debian'
71+
OS_VERSION: '8'
72+
':debian-8-php7':
73+
OS_FAMILY: 'debian'
74+
OS_VERSION: '8'
75+
PHP_XDEBUG: '0'
76+
':debian-9':
77+
OS_FAMILY: 'debian'
78+
OS_VERSION: 'testing'
79+
':centos-7':
80+
OS_FAMILY: 'redhat'
81+
OS_VERSION: '7'
82+
':centos-7-php56':
83+
OS_FAMILY: 'redhat'
84+
OS_VERSION: '7'
85+
PHP_APCU: '0'
86+
PHP_REDIS: '0'
87+
'/ssh':
88+
OS_FAMILY: 'ubuntu'
89+
OS_VERSION: '16.04'
90+
'/vsftp':
91+
OS_FAMILY: 'ubuntu'
92+
OS_VERSION: '16.04'
93+
'/postfix':
94+
OS_FAMILY: 'ubuntu'
95+
OS_VERSION: '16.04'
96+
'/mail-sandbox':
97+
OS_FAMILY: 'ubuntu'
98+
OS_VERSION: '16.04'
99+
'/liquibase':
100+
OS_FAMILY: 'alpine'
101+
OS_VERSION: '3'
102+
'/certbot':
103+
OS_FAMILY: 'alpine'
104+
OS_VERSION: '3'
105+
'/sphinx':
106+
OS_FAMILY: 'alpine'
107+
OS_VERSION: '3'
108+
'/varnish':
109+
OS_FAMILY: 'alpine'
110+
OS_VERSION: '3'
111+
'/samson-deployment':
112+
OS_FAMILY: 'debian'
113+
OS_VERSION: '8'

0 commit comments

Comments
 (0)