source ./functions.sh
 
 populate_cache "$rdo_images_uri/overcloud-full.tar"
+populate_cache "$openstack_congress"
 
 if [ ! -d images/ ]; then mkdir images; fi
 tar -xf cache/overcloud-full.tar -C images/
   dpdk_pkg_str+=" --upload $package:/root/dpdk_rpms"
 done
 
+# tar up the congress puppet module
+rm -rf puppet-congress
+git clone https://github.com/radez/puppet-congress
+pushd puppet-congress > /dev/null
+git archive --format=tar.gz --prefix=congress/ origin/stable/mitaka > ../puppet-congress.tar.gz
+popd > /dev/null
+
 # installing forked opnfv-puppet-tripleo
 # enable connection tracking for protocal sctp
 # upload dpdk rpms but do not install
+# enable connection tracking for protocal sctp
+# install the congress rpms
+# upload and explode the congress puppet module
 LIBGUESTFS_BACKEND=direct virt-customize \
     --upload ../opnfv-puppet-tripleo.tar.gz:/etc/puppet/modules \
     --run-command "sed -i 's/^#UseDNS.*$/UseDNS no/' /etc/ssh/sshd_config" \
     --run-command "yum remove -y qemu-system-x86" \
     --upload ../os-net-config.tar.gz:/usr/lib/python2.7/site-packages \
     --run-command "cd /usr/lib/python2.7/site-packages/ && rm -rf os_net_config && tar xzf os-net-config.tar.gz" \
+    --install "$openstack_congress" \
+    --install "python2-congressclient" \
+    --upload puppet-congress.tar.gz:/etc/puppet/modules/ \
+    --run-command "cd /etc/puppet/modules/ && tar xzf puppet-congress.tar.gz" \
     -a overcloud-full_build.qcow2
 
 mv -f overcloud-full_build.qcow2 overcloud-full.qcow2
 
 # enabling ceph OSDs to live on the controller
 # OpenWSMan package update supports the AMT Ironic driver for the TealBox
 # seeding configuration files specific to OPNFV
+# add congress password to python-triploclient
 LIBGUESTFS_BACKEND=direct virt-customize \
     --upload ../opnfv-tht.tar.gz:/usr/share \
     --run-command "cd /usr/share && rm -rf openstack-tripleo-heat-templates && tar xzf opnfv-tht.tar.gz" \
     --run-command "cp /usr/share/instack-undercloud/undercloud.conf.sample /home/stack/undercloud.conf && chown stack:stack /home/stack/undercloud.conf" \
     --upload ../opnfv-environment.yaml:/home/stack/ \
     --upload ../virtual-environment.yaml:/home/stack/ \
+    --install "python2-congressclient" \
+    --run-command "sed -i '/SERVICE_LIST/a\\    \x27congress\x27: {\x27password_field\x27: \x27OVERCLOUD_CONGRESS_PASSWORD\x27},' /usr/lib/python2.7/site-packages/tripleoclient/constants.py" \
+    --run-command "sed -i '/PASSWORD_NAMES =/a\\    \"OVERCLOUD_CONGRESS_PASSWORD\",' /usr/lib/python2.7/site-packages/tripleoclient/utils.py" \
+    --run-command "sed -i '/AodhPassword/a\\        parameters\[\x27CongressPassword\x27\] = passwords\[\x27OVERCLOUD_CONGRESS_PASSWORD\x27\]' /usr/lib/python2.7/site-packages/tripleoclient/v1/overcloud_deploy.py" \
+    --run-command "sed -i '/^SERVICES/a\    \x27congress\x27: {\x27description\x27: \x27Congress Service\x27, \x27type\x27: \x27policy\x27, \x27path\x27: \x27/\x27, \x27port\x27: 1789 },' /usr/lib/python2.7/site-packages/os_cloud_config/keystone.py" \
     -a undercloud_build.qcow2
 
 # Add custom IPA to allow kernel params
 
 onos_release_file=onos-1.6.0-rc2.tar.gz
 onos_jdk_uri=https://www.dropbox.com/s/qyujpib8zyhzeev
 onos_ovs_uri=https://www.dropbox.com/s/gm6o6k80l56pf0o
-
+openstack_congress=https://radez.fedorapeople.org/openstack-congress-2016.1-1.fc24.noarch.rpm
 
 dpdk_uri_base=http://artifacts.opnfv.org/ovsnfv
 dpdk_rpms=(
 
 openstack endpoint delete \$swift_endpoint_id
 openstack service delete \$swift_service_id
 
+if [ "${deploy_options_array['congress']}" == 'True' ]; then
+    for s in nova neutronv2 ceilometer cinder glancev2 keystone; do
+        openstack congress datasource create \$s "\$s" \\
+            --config username=\$OS_USERNAME \\
+            --config tenant_name=\$OS_TENANT_NAME \\
+            --config password=\$OS_PASSWORD \\
+            --config auth_url=\$OS_AUTH_URL
+    done
+fi
 EOI
 
   echo -e "${blue}INFO: Checking if OVS bridges have IP addresses...${reset}"