#!/usr/bin/make -f

include /usr/share/openstack-pkg-tools/pkgos.make
export OSLO_PACKAGE_VERSION=$(shell dpkg-parsechangelog | grep Version: | cut -d' ' -f2 | sed -e 's/^[[:digit:]]*://' -e 's/[-].*//' -e 's/~/.0/' | head -n 1)

PYTHONS:=$(shell pyversions -vr)

%:
	dh $@ --buildsystem=python_distutils --with python2,systemd

override_dh_auto_install:
	echo "Do nothing"

override_dh_install:
	rm -rf $(CURDIR)/debian/tmp
	python2.7 setup.py install --install-layout=deb --root=$(CURDIR)/debian/tmp
	cp -auxf neutron $(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages
	rm -rf $(CURDIR)/debian/tmp/usr/etc

	# dhcp_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron/dhcp_agent.ini \
		--wrap-width 140 \
		--namespace neutron.base.agent \
		--namespace neutron.dhcp.agent \
		--namespace oslo.log
	sed -i 's|^[ #\t]*interface_driver[ \t]*=.*|interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver|' $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron/dhcp_agent.ini
	sed -i 's|^[ #\t]*ovs_integration_bridge[ \t]*=.*|ovs_integration_bridge = br-int|' $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron/dhcp_agent.ini
	sed -i 's|^[ #\t]*dhcp_driver[ \t]*=.*|dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq|' $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron/dhcp_agent.ini
	sed -i 's|^[ #\t]*enable_isolated_metadata[ \t]*=.*|enable_isolated_metadata = False|' $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron/dhcp_agent.ini
	sed -i 's|^[ #\t]*dnsmasq_config_file[ \t]*=.*|dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf|' $(CURDIR)/debian/neutron-dhcp-agent/etc/neutron/dhcp_agent.ini

	# l3_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-l3-agent/etc/neutron
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-l3-agent/etc/neutron/l3_agent.ini \
		--wrap-width 140 \
		--namespace neutron.base.agent \
		--namespace neutron.l3.agent \
		--namespace oslo.log
	sed -i 's|^[ #\t]*interface_driver[ \t]*=.*|interface_driver = openvswitch|' $(CURDIR)/debian/neutron-l3-agent/etc/neutron/l3_agent.ini
	sed -i 's|^[ #\t]*handle_internal_only_routers[ \t]*=.*|handle_internal_only_routers = True|' $(CURDIR)/debian/neutron-l3-agent/etc/neutron/l3_agent.ini
	sed -i 's|^[ #\t]*external_network_bridge[ \t]*=.*|external_network_bridge = br-ex|' $(CURDIR)/debian/neutron-l3-agent/etc/neutron/l3_agent.ini
	sed -i 's|^[ #\t]*enable_metadata_proxy[ \t]*=.*|enable_metadata_proxy = True|' $(CURDIR)/debian/neutron-l3-agent/etc/neutron/l3_agent.ini
	sed -i 's|^[ #\t]*agent_mode[ \t]*=.*|agent_mode = legacy|' $(CURDIR)/debian/neutron-l3-agent/etc/neutron/l3_agent.ini

	# linuxbridge_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-linuxbridge-agent/etc/neutron/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-linuxbridge-agent/etc/neutron/plugins/ml2/linuxbridge_agent.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.linuxbridge.agent \
		--namespace oslo.log

	# metadata_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-metadata-agent/usr/share/neutron-metadata-agent
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-metadata-agent/usr/share/neutron-metadata-agent/metadata_agent.ini \
		--wrap-width 140 \
		--namespace neutron.metadata.agent \
		--namespace oslo.log
	sed -i 's|^[ #\t]*nova_metadata_protocol[ \t]*=.*|nova_metadata_protocol = http|' $(CURDIR)/debian/neutron-metadata-agent/usr/share/neutron-metadata-agent/metadata_agent.ini
	sed -i 's|^[ #\t]*nova_metadata_ip[ \t]*=.*|nova_metadata_ip = 127.0.0.1|' $(CURDIR)/debian/neutron-metadata-agent/usr/share/neutron-metadata-agent/metadata_agent.ini

	# metering_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-metering-agent/etc/neutron
	PYTHONPATH=$(CURDIR)/debian/tmp oslo-config-generator --output-file $(CURDIR)/debian/neutron-metering-agent/etc/neutron/metering_agent.ini \
		--wrap-width 140 \
		--namespace neutron.metering.agent \
		--namespace oslo.log

	# ml2_conf.ini
	mkdir -p $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini \
		--wrap-width 140 \
		--namespace neutron.ml2 \
		--namespace oslo.log
	sed -i 's|^[ #\t]*type_drivers[ \t]*=.*|type_drivers = flat,gre|' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	sed -i 's|^[ #\t]*tenant_network_types[ \t]*=.*|tenant_network_types = gre|' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	sed -i 's|^[ #\t]*mechanism_drivers[ \t]*=.*|mechanism_drivers = openvswitch,l2population|' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	sed -i 's|^[ #\t]*flat_networks[ \t]*=.*|flat_networks = external|' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	sed -i 's|^[ #\t]*tunnel_id_ranges[ \t]*=.*|tunnel_id_ranges = 1:1000|' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	sed -i 's|^[ #\t]*enable_security_group[ \t]*=.*|enable_security_group = True|' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	sed -i 's|^[ #\t]*enable_ipset[ \t]*=.*|enable_ipset = True |' $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security,qos
	

	# ml2_conf_sriov.ini
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/ml2_conf_sriov.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.sriov \
		--namespace oslo.log

	# neutron.conf
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf \
		--wrap-width 140 \
		--namespace neutron \
		--namespace neutron.agent \
		--namespace neutron.db \
		--namespace neutron.extensions \
		--namespace neutron.qos \
		--namespace nova.auth \
		--namespace oslo.log \
		--namespace oslo.db \
		--namespace oslo.policy \
		--namespace oslo.concurrency \
		--namespace oslo.messaging \
		--namespace oslo.middleware.cors \
		--namespace oslo.service.sslutils \
		--namespace oslo.service.wsgi \
		--namespace keystonemiddleware.auth_token
	sed -i 's|^[ #\t]*core_plugin[ \t]*=.*|core_plugin = ml2|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*service_plugins[ \t]*=.*|service_plugins = router,metering,qos|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*auth_strategy[ \t]*=.*|auth_strategy = keystone|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*allow_overlapping_ips[ \t]*=.*|allow_overlapping_ips = True|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*notify_nova_on_port_status_changes[ \t]*=.*|notify_nova_on_port_status_changes = True |' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*rpc_backend[ \t]*=.*|rpc_backend = rabbit|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*root_helper[ \t]*=.*|root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*connection[ \t]*=.*|connection = sqlite:///var/lib/neutron/neutrondb|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*region_name[ \t]*=.*|region_name = regionOne|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*rabbit_host[ \t]*=.*|rabbit_host = localhost|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*rabbit_userid[ \t]*=.*|rabbit_userid = guest|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's|^[ #\t]*rabbit_password[ \t]*=.*|rabbit_password = guest|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	sed -i 's/^[ \t#]*auth_protocol[ \t]*=[ \t].*/auth_protocol = http/' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf oslo_concurrency lock_path /var/lock/neutron

	# Fix v3 auth for the [nova] section
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova auth_type v3password
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova user_domain_id default
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova project_name admin
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova auth_url http://127.0.0.1:5000/v3
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova tenant_name admin
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova username admin
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova user_domain_name default
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf nova project_domain_name default


	# openvswitch_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.ovs.agent \
		--namespace oslo.log
	sed -i 's|^[ #\t]*integration_bridge[ \t]*=.*|integration_bridge = br-int|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*bridge_mappings[ \t]*=.*|bridge_mappings = external:br-ex|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*polling_interval[ \t]*=.*|polling_interval = 15|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*tunnel_types[ \t]*=.*|tunnel_types = gre|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*l2_population[ \t]*=.*|l2_population = True|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*arp_responder[ \t]*=.*|arp_responder = False|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*enable_distributed_routing[ \t]*=.*|enable_distributed_routing = False|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini
	sed -i 's|^[ #\t]*firewall_driver[ \t]*=.*|firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver|' $(CURDIR)/debian/neutron-common/usr/share/neutron-common/openvswitch_agent.ini

	# sriov_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python2.7/dist-packages oslo-config-generator --output-file $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2/sriov_agent.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.sriov.agent \
		--namespace oslo.log

	dh_install --fail-missing -X/usr/etc
	
override_dh_auto_clean:
	find . -type f -name "*.pyc" | xargs rm -fr
	rm -rf build neutron.egg-info
	rm -f debian/neutron-common.config \
		debian/neutron-common.postinst \
		debian/neutron-server.config \
		debian/neutron-server.postinst \
		debian/neutron-dhcp-agent.postinst \
		debian/neutron-metadata-agent.config \
		debian/neutron-metadata-agent.postinst
	rm -f debian/*.init debian/*.service debian/*.upstart

override_dh_clean:
	dh_clean
	find . -type f -name "*.pyc" -delete

override_dh_auto_test:
ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
#	echo "No unit tests: currently broken."
	python2-ostestr --pretty --color --slowest
#	@echo "===> Running tests"
#	set -e ; set -x ; for i in 2.7 ; do \
#		PYMAJOR=`echo $$i | cut -d'.' -f1` ; \
#		echo "===> Testing with python$$i (python$$PYMAJOR)" ; \
#		rm -rf .testrepository ; \
#		testr-python$$PYMAJOR init ; \
#		TEMP_REZ=`mktemp -t` ; \
#		PYTHONPATH=$(CURDIR) PYTHON=python$$i testr-python$$PYMAJOR run --subunit 'neutron\.tests\.unit.*' | tee $$TEMP_REZ | subunit2pyunit ; \
#		cat $$TEMP_REZ | subunit-filter -s --no-passthrough | subunit-stats ; \
#		rm -f $$TEMP_REZ ; \
#		testr-python$$PYMAJOR slowest ; \
#	done
#	#PYTHONPATH=build/* ./run_tests.sh -N -P
endif

override_dh_auto_build:
	dh_auto_build -O--buildsystem=python_distutils

	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-common.config
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-common.postinst
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-server.config
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-server.postinst
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-dhcp-agent.postinst
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-metadata-agent.postinst
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-metadata-agent.config
