~lutostag/ubuntu/trusty/maas/1.5.2

1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
1
python := python2.7
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
2
3
# Network activity can be suppressed by setting offline=true (or any
4
# non-empty string) at the command-line.
5
ifeq ($(offline),)
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
6
buildout := bin/buildout
7
virtualenv := virtualenv
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
8
else
9
buildout := bin/buildout buildout:offline=true
10
virtualenv := virtualenv --never-download
11
endif
12
13
# If offline has been selected, attempt to further block HTTP/HTTPS
14
# activity by setting bogus proxies in the environment.
15
ifneq ($(offline),)
16
export http_proxy := broken
17
export https_proxy := broken
18
endif
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
19
20
# Python enum modules.
21
py_enums := $(wildcard src/*/enum.py)
22
# JavaScript enum module (not modules).
23
js_enums := src/maasserver/static/js/enums.js
24
25
# Prefix commands with this when they need access to the database.
26
# Remember to add a dependency on bin/database from the targets in
27
# which those commands appear.
28
dbrun := bin/database --preserve run --
29
30
# For things that care, postgresfixture for example, we always want to
31
# use the "maas" databases.
32
export PGDATABASE := maas
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
33
34
build: \
35
    bin/buildout \
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
36
    bin/database \
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
37
    bin/maas-region-admin bin/test.maas \
38
    bin/maas bin/test.maascli \
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
39
    bin/test.maastesting \
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
40
    bin/twistd.pserv bin/test.pserv \
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
41
    bin/test.config \
1.2.17 by Andres Rodriguez
Import upstream version 1.4+bzr1789+dfsg
42
    bin/maas-probe-dhcp \
1.1.3 by Andres Rodriguez
Import upstream version 0.1+bzr295+dfsg
43
    bin/twistd.txlongpoll \
1.2.18 by Andres Rodriguez
Import upstream version 1.4+bzr1817+dfsg
44
    bin/celeryd.cluster bin/celeryd.region \
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
45
    bin/py bin/ipy \
46
    $(js_enums)
47
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
48
all: build doc
49
1.1.17 by Andres Rodriguez
Import upstream version 0.1+bzr971+dfsg
50
# Install all packages required for MAAS development & operation on
51
# the system. This may prompt for a password.
52
install-dependencies:
53
	sudo DEBIAN_FRONTEND=noninteractive apt-get -y \
1.2.14 by Andres Rodriguez
Import upstream version 1.4+bzr1655+dfsg
54
	    --no-install-recommends install $(shell sort -u \
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
55
	        $(addprefix required-packages/,base build dev doc))
56
	sudo DEBIAN_FRONTEND=noninteractive apt-get -y \
57
	    purge $(shell sort -u required-packages/forbidden)
1.1.17 by Andres Rodriguez
Import upstream version 0.1+bzr971+dfsg
58
1.2.20 by Dustin Kirkland
Import upstream version 1.4+bzr1853+dfsg
59
bin/python:
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
60
	$(virtualenv) --python=$(python) --system-site-packages $(CURDIR)
61
1.2.20 by Dustin Kirkland
Import upstream version 1.4+bzr1853+dfsg
62
bin/buildout: bin/python bootstrap/zc.buildout-1.5.2.tar.gz
63
	bin/python -m pip --quiet install --ignore-installed \
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
64
	    --no-dependencies bootstrap/zc.buildout-1.5.2.tar.gz
65
	$(RM) -f README.txt  # zc.buildout installs an annoying README.txt.
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
66
	@touch --no-create $@  # Ensure it's newer than its dependencies.
67
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
68
bin/database: bin/buildout buildout.cfg versions.cfg setup.py
69
	$(buildout) install database
70
	@touch --no-create $@
71
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
72
bin/maas-region-admin bin/celeryd.region: \
1.2.18 by Andres Rodriguez
Import upstream version 1.4+bzr1817+dfsg
73
    bin/buildout buildout.cfg versions.cfg setup.py $(js_enums)
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
74
	$(buildout) install maas
75
	@touch --no-create $@
76
77
bin/test.maas: bin/buildout buildout.cfg versions.cfg setup.py $(js_enums)
78
	$(buildout) install maas-test
79
	@touch --no-create $@
80
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
81
bin/maas: bin/buildout buildout.cfg versions.cfg setup.py
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
82
	$(buildout) install maascli
83
	@touch --no-create $@
84
85
bin/test.maascli: bin/buildout buildout.cfg versions.cfg setup.py
86
	$(buildout) install maascli-test
87
	@touch --no-create $@
88
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
89
bin/test.maastesting: bin/buildout buildout.cfg versions.cfg setup.py
90
	$(buildout) install maastesting-test
91
	@touch --no-create $@
92
1.2.18 by Andres Rodriguez
Import upstream version 1.4+bzr1817+dfsg
93
bin/maas-provision bin/twistd.pserv bin/celeryd.cluster: \
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
94
    bin/buildout buildout.cfg versions.cfg setup.py
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
95
	$(buildout) install pserv
96
	@touch --no-create $@
97
98
bin/test.pserv: bin/buildout buildout.cfg versions.cfg setup.py
99
	$(buildout) install pserv-test
100
	@touch --no-create $@
101
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
102
bin/test.config: bin/buildout buildout.cfg versions.cfg setup.py
103
	$(buildout) install config-test
104
	@touch --no-create $@
105
1.2.17 by Andres Rodriguez
Import upstream version 1.4+bzr1789+dfsg
106
bin/maas-probe-dhcp: bin/buildout buildout.cfg versions.cfg setup.py
107
	$(buildout) install maas-probe-dhcp
108
	@touch --no-create $@
109
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
110
bin/twistd.txlongpoll: bin/buildout buildout.cfg versions.cfg setup.py
111
	$(buildout) install txlongpoll
112
	@touch --no-create $@
113
114
bin/flake8: bin/buildout buildout.cfg versions.cfg setup.py
115
	$(buildout) install flake8
116
	@touch --no-create $@
117
1.2.2 by Andres Rodriguez
Import upstream version 1.2+bzr1349+dfsg
118
bin/sphinx bin/sphinx-build: bin/buildout buildout.cfg versions.cfg setup.py
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
119
	$(buildout) install sphinx
120
	@touch --no-create $@
121
122
bin/py bin/ipy: bin/buildout buildout.cfg versions.cfg setup.py
123
	$(buildout) install repl
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
124
	@touch --no-create bin/py bin/ipy
125
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
126
test: build
1.1.16 by Andres Rodriguez
Import upstream version 0.1+bzr777+dfsg
127
	echo $(wildcard bin/test.*) | xargs -n1 env
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
128
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
129
lint: lint-py lint-js lint-doc
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
130
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
131
pocketlint = $(call available,pocketlint,python-pocket-lint)
132
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
133
# XXX jtv 2014-02-25: Clean up this lint, then make it part of "make lint".
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
134
lint-css: sources = src/maasserver/static/css
135
lint-css:
136
	@find $(sources) -type f \
137
	    -print0 | xargs -r0 $(pocketlint) --max-length=120
138
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
139
lint-py: sources = $(wildcard *.py contrib/*.py) src templates twisted utilities etc
140
lint-py: bin/flake8
141
	@find $(sources) -name '*.py' ! -path '*/migrations/*' \
142
	    -print0 | xargs -r0 bin/flake8 --ignore=E123 --config=/dev/null
143
144
lint-doc:
145
	@./utilities/doc-lint
146
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
147
lint-js: sources = src/maasserver/static/js
148
lint-js:
149
	@find $(sources) -type f -print0 | xargs -r0 $(pocketlint)
150
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
151
# Apply automated formatting to all Python files.
152
format: sources = $(wildcard *.py contrib/*.py) src templates twisted utilities etc
153
format:
154
	@find $(sources) -name '*.py' -print0 | xargs -r0 ./utilities/format-imports
155
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
156
check: clean test
157
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
158
docs/api.rst: bin/maas-region-admin src/maasserver/api.py syncdb
159
	bin/maas-region-admin generate_api_doc > $@
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
160
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
161
sampledata: bin/maas-region-admin bin/database syncdb
162
	$(dbrun) bin/maas-region-admin loaddata src/maasserver/fixtures/dev_fixture.yaml
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
163
164
doc: bin/sphinx docs/api.rst
165
	bin/sphinx
166
1.2.2 by Andres Rodriguez
Import upstream version 1.2+bzr1349+dfsg
167
man: $(patsubst docs/man/%.rst,man/%,$(wildcard docs/man/*.rst))
168
169
man/%: docs/man/%.rst | bin/sphinx-build
170
	bin/sphinx-build -b man docs man $^
171
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
172
enums: $(js_enums)
173
174
$(js_enums): bin/py src/maasserver/utils/jsenums.py $(py_enums)
175
	 bin/py -m src/maasserver/utils/jsenums $(py_enums) > $@
176
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
177
clean:
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
178
	$(MAKE) -C acceptance $@
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
179
	find . -type f -name '*.py[co]' -print0 | xargs -r0 $(RM)
180
	find . -type f -name '*~' -print0 | xargs -r0 $(RM)
1.2.5 by Andres Rodriguez
Import upstream version 1.3+bzr1452+dfsg
181
	find . -type f -name dropin.cache -print0 | xargs -r0 $(RM)
1.1.3 by Andres Rodriguez
Import upstream version 0.1+bzr295+dfsg
182
	$(RM) -r media/demo/* media/development
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
183
	$(RM) $(js_enums)
184
	$(RM) *.log
185
	$(RM) docs/api.rst
1.2.5 by Andres Rodriguez
Import upstream version 1.3+bzr1452+dfsg
186
	$(RM) -r docs/_autosummary docs/_build
1.2.2 by Andres Rodriguez
Import upstream version 1.2+bzr1349+dfsg
187
	$(RM) -r man/.doctrees
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
188
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
189
distclean: clean stop
190
	$(RM) -r bin include lib local
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
191
	$(RM) -r eggs develop-eggs
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
192
	$(RM) -r build dist logs/* parts
1 by Julian Edwards
Import upstream version 0.1~bzr146+dfsg
193
	$(RM) tags TAGS .installed.cfg
194
	$(RM) -r *.egg *.egg-info src/*.egg-info
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
195
	$(RM) -r run/* services/*/supervise
196
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
197
harness: bin/maas-region-admin bin/database
198
	$(dbrun) bin/maas-region-admin shell --settings=maas.demo
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
199
200
dbharness: bin/database
201
	bin/database --preserve shell
202
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
203
syncdb: bin/maas-region-admin bin/database
204
	$(dbrun) bin/maas-region-admin syncdb --noinput
205
	$(dbrun) bin/maas-region-admin migrate maasserver --noinput
206
	$(dbrun) bin/maas-region-admin migrate metadataserver --noinput
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
207
208
define phony_targets
209
  build
210
  check
211
  clean
212
  dbharness
213
  distclean
214
  doc
215
  enums
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
216
  format
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
217
  harness
1.1.17 by Andres Rodriguez
Import upstream version 0.1+bzr971+dfsg
218
  install-dependencies
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
219
  lint
220
  lint-css
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
221
  lint-doc
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
222
  lint-js
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
223
  lint-py
1.2.2 by Andres Rodriguez
Import upstream version 1.2+bzr1349+dfsg
224
  man
1.2.24 by Andres Rodriguez
Import upstream version 1.5+bzr1976
225
  package
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
226
  sampledata
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
227
  source_package
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
228
  syncdb
229
  test
230
endef
231
232
#
233
# Development services.
234
#
235
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
236
service_names_region := database dns region-worker reloader txlongpoll web webapp
237
service_names_cluster := cluster-worker pserv reloader
238
service_names_all := $(service_names_region) $(service_names_cluster)
239
240
# The following template is intended to be used with `call`, and it
241
# accepts a single argument: a target name. The target name must
242
# correspond to a service action (see "Pseudo-magic targets" below).
243
# A region- and cluster-specific variant of the target will be
244
# created, in addition to the target itself. These can be used to
245
# apply the service action to the region services, the cluster
246
# services, or all services, at the same time.
247
define service_template
248
$(1)-region: $(patsubst %,services/%/@$(1),$(service_names_region))
249
$(1)-cluster: $(patsubst %,services/%/@$(1),$(service_names_cluster))
250
$(1): $(1)-region $(1)-cluster
251
phony_services_targets += $(1)-region $(1)-cluster $(1)
252
endef
253
254
# Expand out aggregate service targets using `service_template`.
255
$(eval $(call service_template,pause))
256
$(eval $(call service_template,restart))
257
$(eval $(call service_template,start))
258
$(eval $(call service_template,status))
259
$(eval $(call service_template,stop))
260
$(eval $(call service_template,supervise))
261
262
# The `run` targets do not fit into the mould of the others.
263
run-region:
264
	@services/run $(service_names_region)
265
run-cluster:
266
	@services/run $(service_names_cluster)
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
267
run:
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
268
	@services/run $(service_names_all)
269
270
phony_services_targets += run-region run-cluster run
271
272
# This one's for the rapper, yo.
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
273
run+webapp:
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
274
	@services/run $(service_names_region) +webapp
275
276
phony_services_targets += run+webapp
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
277
278
# Convenient variables and functions for service control.
279
280
setlock = $(call available,setlock,daemontools)
281
supervise = $(call available,supervise,daemontools)
282
svc = $(call available,svc,daemontools)
283
svok = $(call available,svok,daemontools)
284
svstat = $(call available,svstat,daemontools)
285
286
service_lock = $(setlock) -n /run/lock/maas.dev.$(firstword $(1))
287
288
# Pseudo-magic targets for controlling individual services.
289
290
services/%/@run: services/%/@stop services/%/@deps
291
	@$(call service_lock, $*) services/$*/run
292
293
services/%/@start: services/%/@supervise
294
	@$(svc) -u $(@D)
295
296
services/%/@pause: services/%/@supervise
297
	@$(svc) -d $(@D)
298
299
services/%/@status:
300
	@$(svstat) $(@D)
301
302
services/%/@restart: services/%/@supervise
303
	@$(svc) -du $(@D)
304
305
services/%/@stop:
306
	@if $(svok) $(@D); then $(svc) -dx $(@D); fi
307
	@while $(svok) $(@D); do sleep 0.1; done
308
309
services/%/@supervise: services/%/@deps
310
	@mkdir -p logs/$*
311
	@touch $(@D)/down
312
	@if ! $(svok) $(@D); then \
313
	    logdir=$(CURDIR)/logs/$* \
314
	        $(call service_lock, $*) $(supervise) $(@D) & fi
315
	@while ! $(svok) $(@D); do sleep 0.1; done
316
317
# Dependencies for individual services.
318
1.1.14 by Andres Rodriguez
Import upstream version 0.1+bzr740+dfsg
319
services/dns/@deps: bin/py
320
1.2.18 by Andres Rodriguez
Import upstream version 1.4+bzr1817+dfsg
321
services/cluster-worker/@deps: bin/celeryd.cluster
1.1.18 by Andres Rodriguez
Import upstream version 0.1+bzr1223+dfsg
322
1.2.18 by Andres Rodriguez
Import upstream version 1.4+bzr1817+dfsg
323
services/region-worker/@deps: bin/celeryd.region
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
324
325
services/database/@deps: bin/database
326
327
services/pserv/@deps: bin/twistd.pserv
328
329
services/reloader/@deps:
330
331
services/txlongpoll/@deps: bin/twistd.txlongpoll
332
333
services/web/@deps:
334
1.2.22 by Andres Rodriguez
Import upstream version 1.5+bzr1948
335
services/webapp/@deps: bin/maas-region-admin
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
336
337
#
1.2.24 by Andres Rodriguez
Import upstream version 1.5+bzr1976
338
# Package building
339
#
340
# This ought to be as simple as using bzr builddeb --export-upstream but it
341
# has a bug and always considers apt-source tarballs before the specified
342
# branch.  So instead, export to a local tarball which is always found.
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
343
# Make sure debhelper and dh-apport packages are installed before using this.
344
PACKAGING := $(CURDIR)/../packaging.trunk
345
PACKAGING_BRANCH := lp:~maas-maintainers/maas/packaging
346
347
package_branch:
348
	@echo Downloading/refreshing packaging branch...
349
	@if [ ! -d $(PACKAGING) ]; then \
350
		bzr branch $(PACKAGING_BRANCH) $(PACKAGING); \
351
		else bzr pull -d $(PACKAGING); fi
352
353
# Make sure an orig tarball generated from the current branch is placed in the
354
# build area.
355
package_export: VER = $(shell dpkg-parsechangelog -l$(PACKAGING)/debian/changelog | sed -rne 's,^Version: ([^-]+).*,\1,p')
356
package_export: TARBALL = maas_$(VER).orig.tar.gz
357
package_export: package_branch
358
	@$(RM) -f ../build-area/$(TARBALL)
359
	@mkdir -p ../build-area
360
	@bzr export --root=maas-$(VER).orig ../build-area/$(TARBALL) $(CURDIR)
361
362
package: package_export
1.2.24 by Andres Rodriguez
Import upstream version 1.5+bzr1976
363
	bzr bd --merge $(PACKAGING) -- -uc -us
1.2.26 by Andres Rodriguez
Import upstream version 1.5+bzr2204
364
	@echo Binary packages built, see parent directory.
365
366
source_package: package_export
367
	bzr bd --merge $(PACKAGING) -- -S -uc -us
368
	@echo Source package built, see parent directory.
1.2.24 by Andres Rodriguez
Import upstream version 1.5+bzr1976
369
370
#
1.1.13 by Andres Rodriguez
Import upstream version 0.1+bzr709+dfsg
371
# Phony stuff.
372
#
373
374
define phony
375
  $(phony_services_targets)
376
  $(phony_targets)
377
endef
378
379
phony := $(sort $(strip $(phony)))
380
381
.PHONY: $(phony)
382
383
#
384
# Functions.
385
#
386
387
# Check if a command is found on PATH. Raise an error if not, citing
388
# the package to install. Return the command otherwise.
389
# Usage: $(call available,<command>,<package>)
390
define available
391
  $(if $(shell which $(1)),$(1),$(error $(1) not found; \
392
    install it with 'sudo apt-get install $(2)'))
393
endef