#!/usr/bin/make -f

include /usr/share/openstack-pkg-tools/pkgos.make

DHCP_CONF=$(CURDIR)/debian/neutron-common/usr/share/neutron-common/dhcp_agent.ini
L3_CONF=$(CURDIR)/debian/neutron-common/usr/share/neutron-common/l3_agent.ini
ML2_CONF=$(CURDIR)/debian/neutron-common/usr/share/neutron-common/plugins/ml2/ml2_conf.ini
OVS_CONF=$(CURDIR)/debian/neutron-common/usr/share/neutron-common/plugins/ml2/openvswitch_agent.ini
N_CONF=$(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf

%:
	dh $@ --buildsystem=pybuild --with python3,sphinxdoc

override_dh_auto_clean:
	python3 setup.py clean
	rm -f debian/neutron-common.config \
		debian/neutron-common.postinst \
		debian/neutron-api.config \
		debian/neutron-api.postinst \
		debian/neutron-dhcp-agent.postinst \
		debian/neutron-metadata-agent.config \
		debian/neutron-metadata-agent.postinst \
		debian/neutron-common.postrm
	rm -f debian/*.init debian/*.service debian/*.upstart debian/neutron-common.templates debian/neutron-openvswitch-agent.postinst debian/neutron-openvswitch-agent.config debian/neutron-api.templates
	find . -type f -name "*.pyc" -delete
	rm -f AUTHORS ChangeLog doc/source/_static/neutron.policy.yaml.sample
	rm -rf build .stestr *.egg-info .pytest_cache docs/_build/ doc/source/_static/config-samples
	find . -iname '*.pyc' -delete
	for i in $$(find . -type d -iname __pycache__) ; do rm -rf $$i ; done
	rm -rf debian/po

override_dh_auto_build:
	cp -auxf debian/po.in debian/po
	/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-api.config
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-api.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
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-openvswitch-agent.postinst
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_func neutron-openvswitch-agent.config
	/usr/share/openstack-pkg-tools/pkgos_insert_include pkgos_postrm neutron-common.postrm
	pkgos-merge-templates neutron-api neutron endpoint
	pkgos-merge-templates neutron-common neutron db rabbit ksat

override_dh_auto_test:
	echo "Doing nothing..."

override_dh_auto_install:
	echo "Do nothing..."

override_dh_install:
	python3 setup.py install --install-layout=deb --root=$(CURDIR)/debian/tmp

ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages pkgos-dh_auto_test --no-py2 'neutron\.tests\.unit\.(?!(.*test_wsgi.*|.*agent\.dhcp\.test_agent\.TestDhcpAgent\.test_dhcp_agent_manager.*|.*common\.test_utils\.TestDelayedStringRenderer\.test_not_called_with_low_log_level.*|.*services\.trunk\.drivers\.openvswitch\.agent\.test_ovsdb_handler\.TestOVSDBHandler\.test_handle_trunk_remove_trunk_manager_failure.*|.*agent\.l3\.test_agent\.TestBasicRouterOperations\.test_interface_driver_init.*|.*plugins\.ml2\.drivers\.openvswitch\.agent\.test_ovs_tunnel\.TunnelTestUseVethIntercoOSKen\.test_daemon_loop.*|.*plugins\.ml2\.drivers\.openvswitch\.agent\.test_ovs_tunnel\.TunnelTestOSKen\.test_daemon_loop.*|.*plugins\.ml2\.drivers\.openvswitch\.agent\.test_ovs_tunnel\.TunnelTestWithMTUOSKen\.test_daemon_loop.*|.*plugins\.ml2\.drivers\.openvswitch\.agent\.test_ovs_neutron_agent\.TestOvsNeutronAgentOSKen\.test_fdb_add_flows.*|.*plugins\.ml2\.drivers\.openvswitch\.agent\.test_ovs_neutron_agent\.TestOvsNeutronAgentOSKen\.test_fdb_del_flows.*|.*test_manager\.NeutronManagerTestCase\.test_service_plugin_is_loaded.*|.*plugins\.ml2\.drivers\.ovn\.mech_driver\.ovsdb\.test_ovsdb_monitor\.TestOvnIdlDistributedLock.*|plugins\.ml2\.drivers\.ovn\.mech_driver\.test_mech_driver\.TestOVNMechanismDriver\.test_enable_subnet_dhcp_options_in_ovn_ipv6|plugins\.ml2\.drivers\.ovn\.mech_driver\.test_mech_driver\.TestOVNMechanismDriver\.test_update_subnet_dhcp_options_in_ovn_ipv6_not_change|.*plugins\.ml2\.drivers\.ovn\.mech_driver\.TestOVNMechanismDriverSecurityGroup.*|.*services\.ovn_l3\.test_plugin\.OVNL3ExtrarouteTests.*))'
endif

	cp -auxf neutron $(CURDIR)/debian/tmp/usr/lib/python3/dist-packages
	rm -rf $(CURDIR)/debian/tmp/usr/etc

	# dhcp_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/dhcp_agent.ini \
		--wrap-width 140 \
		--namespace neutron.az.agent \
		--namespace neutron.base.agent \
		--namespace neutron.dhcp.agent \
		--namespace oslo.log

	pkgos-fix-config-default $(DHCP_CONF) DEFAULT interface_driver openvswitch
	pkgos-fix-config-default $(DHCP_CONF) DEFAULT enable_isolated_metadata True

	# l3_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/l3_agent.ini \
		--wrap-width 140 \
		--namespace neutron.az.agent \
		--namespace neutron.base.agent \
		--namespace neutron.l3.agent \
		--namespace oslo.log

	pkgos-fix-config-default $(L3_CONF) DEFAULT interface_driver openvswitch
	pkgos-fix-config-default $(L3_CONF) DEFAULT external_network_bridge br-ex
	pkgos-fix-config-default $(L3_CONF) DEFAULT ovs_use_veth False

	# linuxbridge_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-linuxbridge-agent/etc/neutron/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/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

	# macvtap_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-macvtap-agent/etc/neutron/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-macvtap-agent/etc/neutron/plugins/ml2/macvtap_agent.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.macvtap.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/python3/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 \
		--namespace oslo.cache
#	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/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-metering-agent/etc/neutron/metering_agent.ini \
		--wrap-width 140 \
		--namespace neutron.base.agent \
		--namespace neutron.metering.agent \
		--namespace oslo.log

	# ml2_conf.ini
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/plugins/ml2/ml2_conf.ini \
		--wrap-width 140 \
		--namespace neutron.ml2 \
		--namespace neutron.ml2.ovn \
		--namespace oslo.log

	pkgos-fix-config-default $(ML2_CONF) ml2 type_drivers flat,vxlan
	pkgos-fix-config-default $(ML2_CONF) ml2 tenant_network_types vxlan
	pkgos-fix-config-default $(ML2_CONF) ml2 mechanism_drivers openvswitch,l2population
	pkgos-fix-config-default $(ML2_CONF) ml2_type_flat flat_networks external
	pkgos-fix-config-default $(ML2_CONF) ml2_type_vxlan vni_ranges 1:1000
	pkgos-fix-config-default $(ML2_CONF) securitygroup enable_security_group True
	pkgos-fix-config-default $(ML2_CONF) securitygroup enable_ipset True
	pkgos-fix-config-default $(ML2_CONF) ml2 extension_drivers port_security,qos
	
	# neutron.conf
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/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.experimental \
		--namespace neutron.extensions \
		--namespace nova.auth \
		--namespace ironic.auth \
		--namespace placement.auth \
		--namespace designate.auth \
		--namespace oslo.log \
		--namespace oslo.cache \
		--namespace oslo.db \
		--namespace oslo.policy \
		--namespace oslo.privsep \
		--namespace oslo.concurrency \
		--namespace oslo.messaging \
		--namespace oslo.middleware.cors \
		--namespace oslo.middleware.healthcheck \
		--namespace oslo.middleware.http_proxy_to_wsgi \
		--namespace oslo.reports \
		--namespace oslo.service.periodic_task \
		--namespace oslo.service.service \
		--namespace oslo.service.sslutils \
		--namespace oslo.service.wsgi \
		--namespace oslo.versionedobjects \
		--namespace keystonemiddleware.auth_token \
		--namespace osprofiler

	pkgos-readd-keystone-authtoken-missing-options $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf keystone_authtoken neutron

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

	# Config default for neutron.conf

	pkgos-fix-config-default $(N_CONF) DEFAULT core_plugin ml2
	pkgos-fix-config-default $(N_CONF) oslo_concurrency lock_path /var/lock/neutron
	pkgos-fix-config-default $(N_CONF) DEFAULT interface_driver openvswitch

	pkgos-fix-config-default $(N_CONF) DEFAULT service_plugins router,metering,qos
	pkgos-fix-config-default $(N_CONF) DEFAULT auth_strategy keystone
	pkgos-fix-config-default $(N_CONF) DEFAULT allow_overlapping_ips True
	pkgos-fix-config-default $(N_CONF) DEFAULT notify_nova_on_port_status_changes True
	pkgos-fix-config-default $(N_CONF) DEFAULT notify_nova_on_port_data_changes True
	pkgos-fix-config-default $(N_CONF) database connection sqlite:///var/lib/neutron/neutrondb
	pkgos-fix-config-default $(N_CONF) oslo_policy policy_file /etc/neutron/policy.json
	pkgos-fix-config-default $(N_CONF) nova auth_type password
	pkgos-fix-config-default $(N_CONF) nova project_domain_name default
	pkgos-fix-config-default $(N_CONF) nova user_domain_name default
	# Workaround, as pkgos-fix-config-default don't support more than one word
	sed -i 's|^[ #\t]*root_helper[ \t]*=.*|root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf|' $(N_CONF)

	# Add a [designate] configuration example
	cat debian/designate-addition.txt >> $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf

	# neutron_ovn_metadata_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-ovn-metadata-agent/etc/neutron
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-ovn-metadata-agent/etc/neutron/neutron_ovn_metadata_agent.ini \
		--wrap-width 140 \
		--namespace neutron.ovn.metadata.agent \
		--namespace oslo.log

	# openvswitch_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/plugins/ml2/openvswitch_agent.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.ovs.agent \
		--namespace oslo.log

	pkgos-fix-config-default ${OVS_CONF} agent tunnel_types vxlan
	pkgos-fix-config-default ${OVS_CONF} ovs bridge_mappings external:br-ex
	pkgos-fix-config-default ${OVS_CONF} ovs integration_bridge br-int
	pkgos-fix-config-default ${OVS_CONF} ovs tunnel_bridge br-tun
	pkgos-fix-config-default ${OVS_CONF} securitygroup firewall_driver openvswitch
	pkgos-fix-config-default ${OVS_CONF} securitygroup enable_security_group True
	pkgos-fix-config-default ${OVS_CONF} securitygroup enable_ipset True

	# ovn.ini
	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/neutron-common
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslo-config-generator \
		--output-file $(CURDIR)/debian/neutron-common/usr/share/neutron-common/ovn.ini \
		--wrap-width 140 \
		--namespace neutron.ml2.ovn \
		--namespace oslo.log

	# sriov_agent.ini
	mkdir -p $(CURDIR)/debian/neutron-common/etc/neutron/plugins/ml2
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/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

	# policy.json
	mkdir -p $(CURDIR)/debian/neutron-common/etc/neutron/policy.d
	PYTHONPATH=$(CURDIR)/debian/tmp/usr/lib/python3/dist-packages oslopolicy-sample-generator \
		--output-file $(CURDIR)/debian/neutron-common/etc/neutron/policy.d/00_default_policy.yaml \
		--format yaml \
		--namespace neutron

	# Comment out deprecated policies, otherwise, Nova doesn't work
	sed -i 's/^"/#"/' $(CURDIR)/debian/neutron-common/etc/neutron/policy.d/00_default_policy.yaml

	# Use the policy.d folder
	pkgos-fix-config-default $(CURDIR)/debian/neutron-common/usr/share/neutron-common/neutron.conf oslo_policy policy_dirs /etc/neutron/policy.d


	# Install neutron-plugin-manage maintainer script
	mkdir -p $(CURDIR)/debian/neutron-common/usr/bin
	cp debian/neutron-plugin-manage $(CURDIR)/debian/neutron-common/usr/bin/neutron-plugin-manage
	dh_install
	# This is a TripleO stuff, we don't care about it
	rm -f $(CURDIR)/neutron-common/usr/bin/ovn_migration.sh
	rm -rf $(CURDIR)/neutron-common/usr/share/ansible

	dh_missing --fail-missing -X/usr/etc

# Disable this until oslo.config is fixed for bash completion.
#	echo "Generating bash completion..."
#	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/bash-completion/completions
#	mkdir -p $(CURDIR)/debian/neutron-common/usr/share/zsh/vendor-completions
#	set -e ; set -x ; for i in status db-manage ipset-cleanup ovn-db-sync-util usage-audit ; do \
#		echo "neutron-$$i" ; \
#		PYTHONPATH=$(CURDIR)/debian/python3-neutron/usr/lib/python3/dist-packages $(CURDIR)/debian/neutron-common/usr/bin/neutron-$$i --shell_completion bash >$(CURDIR)/debian/neutron-common/usr/share/bash-completion/completions/neutron-$$i ; \
#		PYTHONPATH=$(CURDIR)/debian/python3-neutron/usr/lib/python3/dist-packages $(CURDIR)/debian/neutron-common/usr/bin/neutron-$$i --shell_completion zsh >$(CURDIR)/debian/neutron-common/usr/share/zsh/vendor-completions/_neutron-$$i ; \
#	done

override_dh_sphinxdoc:
ifeq (,$(findstring nodoc, $(DEB_BUILD_OPTIONS)))
	PYTHONPATH=. python3 -m sphinx -b html doc/source $(CURDIR)/debian/neutron-doc/usr/share/doc/neutron-doc/html
	dh_sphinxdoc
endif

override_dh_python3:
	dh_python3 --shebang=/usr/bin/python3
