From 19d9e5d1951d2477ac2836bcfec6f5fa789744bb Mon Sep 17 00:00:00 2001 From: Jannis Pohl Date: Thu, 12 Nov 2015 23:10:32 +0100 Subject: [PATCH 001/178] fix(database): bail out if unable to check for existing backups --- database/bin/boot | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/database/bin/boot b/database/bin/boot index d66ba147eb..01d36b722b 100755 --- a/database/bin/boot +++ b/database/bin/boot @@ -75,7 +75,8 @@ if [[ "$(cat $PG_DATA_DIR/initialized 2> /dev/null)" != "$INIT_ID" ]]; then echo "database: no existing database found or it is outdated." # check if there are any backups -- if so, let's restore # we could probably do better than just testing number of lines -- one line is just a heading, meaning no backups - if [[ $(envdir /etc/wal-e.d/env wal-e --terse backup-list | wc -l) -gt "1" ]]; then + BACKUP_LIST=$(envdir /etc/wal-e.d/env wal-e --terse backup-list) # if this fails, this script will exit + if [[ $(echo "$BACKUP_LIST" | wc -l) -gt "1" ]]; then echo "database: restoring from backup..." rm -rf $PG_DATA_DIR sudo -u postgres envdir /etc/wal-e.d/env wal-e backup-fetch $PG_DATA_DIR LATEST From a5dc5bf83fb958062f1d528899efbc0d077cc719 Mon Sep 17 00:00:00 2001 From: Ian Coffey Date: Fri, 4 Dec 2015 14:50:54 -0500 Subject: [PATCH 002/178] feat(contrib): graceful shutdown for non-ceph nodes - Ability to handle removing etcd membership on nodes not running Ceph. - Fixes etcd IP logic --- contrib/coreos/user-data.example | 132 +++++++++++++++---------- docs/managing_deis/add_remove_host.rst | 38 +++++-- 2 files changed, 108 insertions(+), 62 deletions(-) diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index dec1ba0f2f..bd3d8582a9 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -59,22 +59,41 @@ coreos: content: | [Service] ExecStartPre=-/usr/bin/etcdctl mk /coreos.com/network/config '{"Network": "10.244.0.0/16", "SubnetLen": 24, "SubnetMin": "10.244.0.0", "Backend": {"Type": "vxlan"}}' - - name: graceful-deis-shutdown.service + - name: graceful-ceph-shutdown.service content: | [Unit] - Description=Clean up + Description=Ceph node clean up for Deis DefaultDependencies=no - After=fleet.service etcd2.service docker.service docker.socket deis-store-admin.service deis-store-daemon.service deis-store-volume.service deis-store-monitor.service - Requires=fleet.service etcd2.service deis-store-admin.service deis-store-daemon.service deis-store-volume.service docker.service docker.socket deis-store-monitor.service + After=fleet.service etcd2.service docker.service docker.socket deis-store-admin.service deis-store-daemon.service deis-store-volume.service deis-store-monitor.service graceful-etcd-shutdown.service + Requires=fleet.service etcd2.service docker.service docker.socket deis-store-admin.service deis-store-daemon.service deis-store-volume.service deis-store-monitor.service graceful-etcd-shutdown.service + RefuseManualStop=true [Install] WantedBy=shutdown.target halt.target reboot.target [Service] - ExecStop=/opt/bin/graceful-shutdown.sh --really + ExecStart=/usr/bin/docker exec deis-store-admin ceph -s + ExecStop=/opt/bin/graceful-shutdown.sh --ceph Type=oneshot TimeoutSec=1200 RemainAfterExit=yes + - name: graceful-etcd-shutdown.service + content: | + [Unit] + Description=etcd clean up for Deis + DefaultDependencies=no + After=fleet.service etcd2.service docker.service docker.socket + Requires=fleet.service etcd2.service docker.service docker.socket + RefuseManualStop=true + + [Install] + WantedBy=shutdown.target halt.target reboot.target + + [Service] + ExecStop=/opt/bin/graceful-shutdown.sh --etcd + Type=oneshot + TimeoutSec=120 + RemainAfterExit=yes - name: install-deisctl.service command: start content: | @@ -187,58 +206,67 @@ write_files: permissions: '0755' content: | #!/usr/bin/bash - if [ "$1" != '--really' ]; then - echo "command must be run as: $0 --really" - exit 1 - fi - # procedure requires the store-admin - ADMIN_RUNNING=$(docker inspect --format="{{ .State.Running }}" deis-store-admin) - if [ $? -eq 1 ] || [ "$ADMIN_RUNNING" == "false" ]; then - echo "deis-store-admin container is required for graceful shutdown" - exit 2 - fi - set -e -x -o pipefail - # determine osd id - CURRENT_STATUS=$(docker exec deis-store-admin ceph health | awk '{print $1}') - OSD_HOSTS=($(etcdctl ls /deis/store/hosts/| awk -F'/' '{print $5}')) - for HOST in "${OSD_HOSTS[@]}" - do - PUBLIC_IP=$(fleetctl list-machines -fields="machine,ip" -full -no-legend| grep `cat /etc/machine-id` | awk '{print $2}') - if [ "$HOST" = "$PUBLIC_IP" ] ; then - OSD_ID=$(etcdctl get /deis/store/osds/$PUBLIC_IP) - break - fi - done - # if we own an osd and its healthy, try to gracefully remove it - if [ ! -z "$OSD_ID" ] && [[ "$CURRENT_STATUS" == *"HEALTH_OK"* ]] && [ ${#OSD_HOSTS[@]} -gt "3" ]; then - docker exec deis-store-admin ceph osd out $OSD_ID - sleep 30 - TIMEWAITED=0 - until [[ $(docker exec deis-store-admin ceph health) == *"HEALTH_OK"* ]] + ceph_shutdown () { + # determine osd id + OSD_HOSTS=($(etcdctl ls /deis/store/hosts/| awk -F'/' '{print $5}')) + for HOST in "${OSD_HOSTS[@]}" do - if [ $TIMEWAITED -gt "1200" ] - then - echo "ceph graceful removal timeout exceeded" + PUBLIC_IP=$(etcdctl member list|grep `cat /etc/machine-id`| awk '{print $3}'| grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}') + if [ "$HOST" = "$PUBLIC_IP" ] ; then + OSD_ID=$(etcdctl get /deis/store/osds/$PUBLIC_IP) break fi - echo "waiting" && sleep 5 - TIMEWAITED=$((TIMEWAITED+5)) done - docker stop deis-store-daemon - docker exec deis-store-admin ceph osd crush remove osd.$OSD_ID - docker exec deis-store-admin ceph auth del osd.$OSD_ID - docker exec deis-store-admin ceph osd rm $OSD_ID - etcdctl rm /deis/store/osds/$PUBLIC_IP - etcdctl rm /deis/store/hosts/$PUBLIC_IP && sleep 10 - # remove ceph mon - docker stop deis-store-monitor || true - docker exec deis-store-admin ceph mon remove `hostname -f` # fixme - docker stop deis-store-metadata || true - fi + # if we own an osd and its healthy, try to gracefully remove it + if [ ! -z "$OSD_ID" ] && [ ${#OSD_HOSTS[@]} -gt "3" ]; then + ADMIN_RUNNING=$(docker inspect --format="{{ .State.Running }}" deis-store-admin) + if [ $? -eq 1 ] || [ "$ADMIN_RUNNING" == "false" ]; then + echo "deis-store-admin container is required for graceful shutdown" + exit 2 + fi + set -e -x -o pipefail + CURRENT_STATUS=$(docker exec deis-store-admin ceph health | awk '{print $1}') + if [[ "$CURRENT_STATUS" != *"HEALTH_OK"* ]]; then + echo "Ceph cluster must be healthy to perform graceful removal" + exit 3 + fi - # removing the node from etcd - NODE=$(etcdctl member list | grep `cat /etc/machine-id` | cut -d ':' -f 1) - etcdctl member remove $NODE + docker exec deis-store-admin ceph osd out $OSD_ID + sleep 30 + TIMEWAITED=0 + until [[ $(docker exec deis-store-admin ceph health) == *"HEALTH_OK"* ]] + do + if [ $TIMEWAITED -gt "1200" ] + then + echo "ceph graceful removal timeout exceeded" + break + fi + echo "waiting" && sleep 5 + TIMEWAITED=$((TIMEWAITED+5)) + done + docker stop deis-store-daemon + docker exec deis-store-admin ceph osd crush remove osd.$OSD_ID + docker exec deis-store-admin ceph auth del osd.$OSD_ID + docker exec deis-store-admin ceph osd rm $OSD_ID + etcdctl rm /deis/store/osds/$PUBLIC_IP + etcdctl rm /deis/store/hosts/$PUBLIC_IP && sleep 10 + # remove ceph mon + docker stop deis-store-monitor || true + docker exec deis-store-admin ceph mon remove `hostname -f` # fixme + docker stop deis-store-metadata || true + fi + } + etcd_shutdown () { + set -e -x -o pipefail + # removing the node from etcd + NODE=$(etcdctl member list | grep `cat /etc/machine-id` | cut -d ':' -f 1) + etcdctl member remove $NODE + } + if [ "$1" == "--ceph" ]; then + ceph_shutdown + elif [ "$1" == "--etcd" ]; then + etcd_shutdown + fi - path: /opt/bin/wupiao permissions: '0755' content: | diff --git a/docs/managing_deis/add_remove_host.rst b/docs/managing_deis/add_remove_host.rst index 9e5c996c3d..914fc04e36 100644 --- a/docs/managing_deis/add_remove_host.rst +++ b/docs/managing_deis/add_remove_host.rst @@ -288,24 +288,42 @@ This can be achieved by making a request to the etcd API. See `remove machines`_ Automatic Host Removal ====================== -The ``contrib/user-data.example`` provides a unit which provides some experimental logic to clean-up a Deis -node's Ceph and etcd membership before reboot, shutdown or halt events. Currently, the procedure will -also be triggered if it is manually stopped via systemctl. +The ``contrib/user-data.example`` provides 2 units, ``graceful-etcd-shutdown.service`` and +``graceful-ceph-shutdown.service``, that contain some experimental logic to clean-up a Deis node's +cluster membership before reboot, shutdown or halt events. The units can be used independently or +together. -The unit requires that the optional ``deis-store-admin`` component is installed. +The ``graceful-etcd-shutdown`` unit is useful for any Deis node running its own etcd. To be used, it +must be enabled and started. + +.. code-block:: console + + root@deis-1:/# systemctl enable graceful-etcd-shutdown + root@deis-1:/# systemctl start graceful-etcd-shutdown + +The ``graceful-ceph-shutdown`` script is only useful for nodes running deis-store components. To be used, +the unit requires that the optional ``deis-store-admin`` component is installed. .. code-block:: console root@deis-1:/# deisctl install store-admin root@deis-1:/# deisctl start store-admin -To enable the feature you must enable and start the unit: +Then the unit should be enabled and started. .. code-block:: console - root@deis-1:/# systemctl enable graceful-deis-shutdown - root@deis-1:/# systemctl start graceful-deis-shutdown + root@deis-1:/# systemctl enable graceful-ceph-shutdown + root@deis-1:/# systemctl start graceful-ceph-shutdown + +At this point your node is ready to be gracefully removed whenever a halt, shutdown or reboot event occurs. +The graceful shutdown units insert themselves ahead of the etcd and Ceph units in the shutdown order. This +allows them to perform preemptive actions on etcd and Ceph while they are still healthy and in the cluster. + +The units make use of the script ``/opt/bin/graceful-shutdown.sh`` to remove the node from the cluster. For +Ceph, this means determining if the Ceph cluster is healthy and has enough nodes to return to health - if it +does, it will remove its OSD and wait for the Ceph cluster to return to health. Once it is healthy, it will +remove its monitor and continue to shut down Ceph components. The end result should be a Ceph cluster that +returns its status as ``health_ok``. -The unit is now active and will now be stopped ahead of the store components, Docker and etcd. -The script ``/opt/bin/graceful-shutdown.sh`` will determine if the Ceph cluster is healthy, and attempt -to remove this node from the Deis store components if there are greater than 3 Ceph nodes in the cluster. +For etcd, the script remove its etcd member and delete itself from the CoreOS discovery url. From 7c93ef110b1e3906987d6443ddcf807e304e7a37 Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Sun, 27 Dec 2015 08:09:07 +0900 Subject: [PATCH 003/178] docs(installing_deis): add Ubuntu instructions for Azure --- docs/installing_deis/azure.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/installing_deis/azure.rst b/docs/installing_deis/azure.rst index b6bccd37ad..f00127b34e 100644 --- a/docs/installing_deis/azure.rst +++ b/docs/installing_deis/azure.rst @@ -20,11 +20,19 @@ This script uses PyYAML, a Python library, to do its work. If you haven't already, install these on your development machine: +For OSX users: + .. code-block:: console $ brew install python $ sudo pip install pyyaml +For Ubuntu users: + +.. code-block:: console + + $ sudo apt-get install -y python-yaml + Additionally, we'll also need to install the `Azure CLI`_ from Microsoft. Create CoreOS Cluster From 373fad368726a2f6f75d75cd1b0201ca81ea906c Mon Sep 17 00:00:00 2001 From: Dan van den Berg Date: Mon, 4 Jan 2016 12:51:01 -0500 Subject: [PATCH 004/178] feat(router) make vhost_traffic_status_zone configurable This change makes the size in the `vhost_traffic_status_zone` directive configurable. See also https://github.com/deis/deis/issues/4828. --- docs/customizing_deis/router_settings.rst | 1 + router/rootfs/etc/confd/templates/nginx.conf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/customizing_deis/router_settings.rst b/docs/customizing_deis/router_settings.rst index cb9c5cccdf..a2da4e4fd0 100644 --- a/docs/customizing_deis/router_settings.rst +++ b/docs/customizing_deis/router_settings.rst @@ -78,6 +78,7 @@ setting description /deis/router/sslSessionTickets nginx ssl_session_tickets setting (default: on) /deis/router/sslSessionTimeout nginx ssl_session_timeout setting (default: 10m) /deis/router/sslBufferSize nginx ssl_buffer_size setting (default: 4k) +/deis/router/trafficStatusZoneSize nginx vhost_traffic_status_zone size setting (default: 1m) /deis/router/workerProcesses nginx number of worker processes to start (default: auto i.e. available CPU cores) /deis/router/proxyProtocol nginx PROXY protocol enabled /deis/router/proxyRealIpCidr nginx IP with CIDR used by the load balancer in front of deis-router (default: 10.0.0.0/8) diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 7a8420b19a..9c94571690 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -13,7 +13,7 @@ events { http { # basic settings - vhost_traffic_status_zone; + vhost_traffic_status_zone shared:vhost_traffic_status:{{ or (getv "/deis/router/trafficStatusZoneSize") "1m" }}; sendfile on; tcp_nopush on; From 3635f2f027313f319240248833393509b0e1774b Mon Sep 17 00:00:00 2001 From: Seth Goings Date: Thu, 7 Jan 2016 13:24:43 -0700 Subject: [PATCH 005/178] docs(roadmap): add January 2016 meeting + archive --- docs/roadmap/planning.rst | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index d74ddeae11..c3a0255c56 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,32 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -January 2016 -~~~~~~~~~~~~ +February 2016 +~~~~~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, January 7th** at **12pm MDT/1900 GMT**. The `event`_ can be added +**Thursday, February 4th** at **12pm MST/1900 UTC**. The `event`_ can be added directly to your calendar. +January 2016 (Deis 1.x LTS release and Deis v2 Alpha) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +We're still taking feedback and suggestions on what our users would like to +see in the 1.x LTS release. Feel free to provide your input on the +`LTS release issue`_ on GitHub. + +Over the last month we've been hard at work on Deis v2 which puts the Deis +workflow people have come to know and love on top of the `Kubernetes`_ platform. +Aaron demoed what we've done so far with the release of Deis v2 Alpha. +(`v2 alpha walkthrough cheatsheet`_) + +If you've tried out v2 alpha, let us know what you think via the +`v2 alpha feedback`_ GitHub issue! + +You can also take a look at our `v2 beta milestone`_ goals and chime in there. + +Archive: https://www.youtube.com/watch?v=8LNVluUFh1M + December 2015 (Deis 1.x LTS release) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -107,3 +126,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`event`: https://goo.gl/iFvIv6 .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md +.. _`Kubernetes`: http://kubernetes.io/ +.. _`v2 alpha feedback`: https://github.com/deis/deis/issues/4827 +.. _`v2 alpha walkthrough cheatsheet`: https://gist.github.com/arschles/5b7a75a50938913d3eb1 +.. _`v2 beta milestone`: https://github.com/deis/deis/issues/4809 From 8feb36760cf6b79c2be00d23ffa5d0ce89b3f5fe Mon Sep 17 00:00:00 2001 From: Grant Sherrick Date: Thu, 7 Jan 2016 21:46:10 -0700 Subject: [PATCH 006/178] feat(contrib/linode): add plane metadata to cloud-init template. Allows for placement of deis planes on different machines when provisioning a cluster on linode. --- contrib/linode/linode-user-data-template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/linode/linode-user-data-template.yaml b/contrib/linode/linode-user-data-template.yaml index d4bc052706..83aa54181f 100644 --- a/contrib/linode/linode-user-data-template.yaml +++ b/contrib/linode/linode-user-data-template.yaml @@ -2,7 +2,7 @@ hostname: $hostname coreos: fleet: - metadata: name=%H + metadata: name=%H,controlPlane=true,dataPlane=true,routerMesh=true units: - name: 00-eth0.network runtime: true From 8b842ca894130527b415d4221b2b4e57a6945ce3 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 6 Jan 2016 16:27:25 +0800 Subject: [PATCH 007/178] ref(contrib/aws): improve timeout messages --- contrib/aws/provision-aws-cluster.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/aws/provision-aws-cluster.sh b/contrib/aws/provision-aws-cluster.sh index daa0c6be52..765132193b 100755 --- a/contrib/aws/provision-aws-cluster.sh +++ b/contrib/aws/provision-aws-cluster.sh @@ -62,7 +62,7 @@ COUNTER=1 INSTANCE_IDS="" until [ $(wc -w <<< $INSTANCE_IDS) -eq $DEIS_NUM_INSTANCES -a "$STACK_STATUS" = "CREATE_COMPLETE" ]; do if [ $COUNTER -gt $ATTEMPTS ]; then - echo "Provisioning instances failed (timeout, $(wc -w <<< $INSTANCE_IDS) of $DEIS_NUM_INSTANCES provisioned after 10m)" + echo "Provisioning instances failed (timeout, $(wc -w <<< $INSTANCE_IDS) of $DEIS_NUM_INSTANCES provisioned after $(expr $ATTEMPTS * $SLEEPTIME)s)" echo "Destroying stack $STACK_NAME" bailout exit 1 @@ -85,7 +85,7 @@ until [ $(wc -w <<< $INSTANCE_IDS) -eq $DEIS_NUM_INSTANCES -a "$STACK_STATUS" = --output text \ $EXTRA_AWS_CLI_ARGS) - echo "Waiting for instances to be provisioned ($STACK_STATUS, $(expr 61 - $COUNTER)0s) ..." + echo "Waiting for instances to be provisioned ($STACK_STATUS, $(expr $ATTEMPTS + 1 - $COUNTER)0s) ..." sleep $SLEEPTIME let COUNTER=COUNTER+1 @@ -96,14 +96,14 @@ COUNTER=1 INSTANCE_STATUSES="" until [ `wc -w <<< $INSTANCE_STATUSES` -eq $DEIS_NUM_INSTANCES ]; do if [ $COUNTER -gt $ATTEMPTS ]; - then echo "Health checks not passed after 10m, giving up" + then echo "Health checks not passed after $(expr $ATTEMPTS * $SLEEPTIME)s, giving up" echo "Destroying stack $STACK_NAME" bailout exit 1 fi if [ $COUNTER -ne 1 ]; then sleep $SLEEPTIME; fi - echo "Waiting for instances to pass initial health checks ($(expr 61 - $COUNTER)0s) ..." + echo "Waiting for instances to pass initial health checks ($(expr $ATTEMPTS + 1 - $COUNTER)0s) ..." INSTANCE_STATUSES=$(aws ec2 describe-instance-status \ --filters Name=instance-status.reachability,Values=passed \ --instance-ids $INSTANCE_IDS \ From 7cc287ddcf5c1df52c02d5b47b715440b123ed01 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 9 Jan 2016 02:17:18 +0800 Subject: [PATCH 008/178] docs(installing_deis): clarify steps after a failure with aws --- docs/installing_deis/aws.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/installing_deis/aws.rst b/docs/installing_deis/aws.rst index 5c2f8fec5b..ea6b039d31 100644 --- a/docs/installing_deis/aws.rst +++ b/docs/installing_deis/aws.rst @@ -234,6 +234,25 @@ Install Deis Platform Now that you've finished provisioning a cluster, please refer to :ref:`install_deis_platform` to start installing the platform. +In case of failures +------------------- + +Though it is uncommon, provisioning may fail for a few reasons. In these cases, +``provision-aws-cluster.sh`` will automatically attempt to rollback its changes. + +If it fails to do so, you can clean up the AWS resources manually. Do this by logging into the AWS +console, and under CloudFormation, simply delete the ``deis`` stack it created. + +If you wish to retry, you'll need to take note of a few caveats: + +- The ``deis`` CloudFormation stack may be in the process of being deleted. In this case, you can't + provision another CloudFormation stack with the same name. You can simply wait for the stack to + clean itself up, or provision a stack under a different name by doing ``./provision-aws-cluster.sh + ``. + +- In most cases, it's not a good idea to re-use the same discovery URL of a failed provisioning. + Generate a new discovery URL before attempting to provision a new stack. + CloudFormation Updates ---------------------- From e4bd8a29a98d2f186b44216540d9b473a2d97833 Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Mon, 18 Jan 2016 15:03:21 +0900 Subject: [PATCH 009/178] docs(installing_deis): Add parameter description about publicDomainName. All deployments will be failed if publicDomainName was brank. --- docs/installing_deis/azure.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/installing_deis/azure.rst b/docs/installing_deis/azure.rst index f00127b34e..bae91d8df4 100644 --- a/docs/installing_deis/azure.rst +++ b/docs/installing_deis/azure.rst @@ -70,7 +70,8 @@ Generate a new discovery URL for the deployment so the hosts can find each other $ ./create-azure-user-data $(curl -s https://discovery.etcd.io/new) Next, edit ``parameters.json`` to configure the parameters required for the -cluster. For ``sshKeyData``, use the public key material for the SSH key you'd like +cluster. For ``publicDomainName``, specify the prefix of domain name (like ``deisNode``). +For ``sshKeyData``, use the public key material for the SSH key you'd like to use to log into the hosts. For ``customData``, you'll need to supply the base64-encoded version of ``azure-user-data``. This can be generated using ``base64``: From fa492337fa86a7bff60c4ba3994af838494467c7 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 22 Jan 2016 09:15:38 -0700 Subject: [PATCH 010/178] ref(controller): remove scheduler previews --- controller/registry/dockerclient.py | 3 +- controller/scheduler/k8s.py | 686 ------------------ controller/scheduler/mesos_marathon.py | 115 --- controller/scheduler/swarm.py | 124 ---- controller/templates/confd_settings.py | 12 +- deisctl/cmd/cmd.go | 29 +- deisctl/cmd/cmd_test.go | 53 -- deisctl/cmd/k8s.go | 88 --- deisctl/cmd/mesos.go | 131 ---- deisctl/cmd/swarm.go | 70 -- .../deis-kube-apiserver.service.decorator | 3 - ...-kube-controller-manager.service.decorator | 3 - .../deis-kube-kubelet.service.decorator | 1 - .../deis-kube-proxy.service.decorator | 1 - .../deis-kube-scheduler.service.decorator | 3 - .../deis-mesos-marathon.service.decorator | 2 - .../deis-mesos-master.service.decorator | 3 - .../deis-mesos-slave.service.decorator | 2 - .../deis-swarm-manager.service.decorator | 3 - .../deis-swarm-node.service.decorator | 1 - .../deis-zookeeper.service.decorator | 2 - deisctl/units/deis-kube-apiserver.service | 33 - .../deis-kube-controller-manager.service | 21 - deisctl/units/deis-kube-kubelet.service | 17 - deisctl/units/deis-kube-proxy.service | 15 - deisctl/units/deis-kube-scheduler.service | 19 - deisctl/units/deis-mesos-marathon.service | 23 - deisctl/units/deis-mesos-master.service | 19 - deisctl/units/deis-mesos-slave.service | 21 - deisctl/units/deis-swarm-manager.service | 15 - deisctl/units/deis-swarm-node.service | 18 - deisctl/units/deis-zookeeper.service | 22 - deisctl/units/units.go | 11 - .../customizing_deis/choosing-a-scheduler.rst | 248 ------- docs/customizing_deis/controller_settings.rst | 1 - docs/customizing_deis/index.rst | 1 - docs/installing_deis/system-requirements.rst | 7 +- docs/managing_deis/isolating-planes.rst | 10 - docs/reference/server/scheduler.rst | 6 - docs/reference/terms/scheduler.rst | 9 +- docs/understanding_deis/components.rst | 2 +- mesos/Makefile | 134 ---- mesos/README.md | 23 - mesos/build-marathon | 16 - mesos/build-marathon-jar.sh | 40 - mesos/build-marathon.sh | 30 - mesos/build-mesos.sh | 27 - mesos/marathon | 15 - mesos/master | 5 - mesos/pkg/boot/extpoints/extpoints.go | 177 ----- mesos/pkg/boot/extpoints/interfaces.go | 42 -- mesos/pkg/boot/main.go | 248 ------- .../marathon/bash/update-hosts-file.bash | 8 - mesos/pkg/boot/mesos/marathon/main.go | 116 --- mesos/pkg/boot/mesos/master/main.go | 106 --- mesos/pkg/boot/mesos/slave/main.go | 104 --- mesos/pkg/boot/zookeeper/bash/add-node.bash | 20 - .../pkg/boot/zookeeper/bash/remove-node.bash | 18 - mesos/pkg/boot/zookeeper/main/boot.go | 130 ---- mesos/pkg/boot/zookeeper/zookeeper_map.go | 115 --- mesos/pkg/boot/zookeeper/zookeeper_server.go | 36 - mesos/pkg/confd/confd.go | 119 --- mesos/pkg/confd/confd_test.go | 66 -- mesos/pkg/etcd/etcd.go | 163 ----- mesos/pkg/etcd/etcd_test.go | 110 --- mesos/pkg/etcd/lock.go | 16 - mesos/pkg/etcd/lock_test.go | 42 -- mesos/pkg/fleet/machine.go | 39 - mesos/pkg/fleet/machine_test.go | 20 - mesos/pkg/fleet/machines.go | 61 -- mesos/pkg/fleet/machines_test.go | 53 -- mesos/pkg/log/log.go | 35 - mesos/pkg/log/stdout_formatter.go | 20 - mesos/pkg/net/net.go | 69 -- mesos/pkg/net/net_test.go | 46 -- mesos/pkg/os/os.go | 131 ---- mesos/pkg/os/os_test.go | 73 -- mesos/pkg/types/command.go | 13 - mesos/pkg/types/cron.go | 7 - mesos/pkg/types/current-boot.go | 23 - mesos/pkg/types/script.go | 8 - mesos/pkg/types/service-daemon.go | 7 - mesos/slave | 5 - mesos/template | 9 - mesos/zookeeper/Dockerfile | 18 - mesos/zookeeper/build.sh | 74 -- mesos/zookeeper/conf.d/dynamic-cfg.toml | 6 - mesos/zookeeper/conf.d/server-list.toml | 6 - mesos/zookeeper/templates/server.list | 1 - mesos/zookeeper/templates/zoo_cfg.dynamic | 2 - mesos/zookeeper/zoo.cfg | 7 - swarm/Dockerfile | 12 - swarm/Makefile | 76 -- swarm/README.md | 23 - swarm/image/Dockerfile | 12 - swarm/swarm.go | 115 --- 96 files changed, 12 insertions(+), 4738 deletions(-) delete mode 100644 controller/scheduler/k8s.py delete mode 100644 controller/scheduler/mesos_marathon.py delete mode 100644 controller/scheduler/swarm.py delete mode 100644 deisctl/cmd/k8s.go delete mode 100644 deisctl/cmd/mesos.go delete mode 100644 deisctl/cmd/swarm.go delete mode 100644 deisctl/units/decorators/deis-kube-apiserver.service.decorator delete mode 100644 deisctl/units/decorators/deis-kube-controller-manager.service.decorator delete mode 100644 deisctl/units/decorators/deis-kube-kubelet.service.decorator delete mode 100644 deisctl/units/decorators/deis-kube-proxy.service.decorator delete mode 100644 deisctl/units/decorators/deis-kube-scheduler.service.decorator delete mode 100644 deisctl/units/decorators/deis-mesos-marathon.service.decorator delete mode 100644 deisctl/units/decorators/deis-mesos-master.service.decorator delete mode 100644 deisctl/units/decorators/deis-mesos-slave.service.decorator delete mode 100644 deisctl/units/decorators/deis-swarm-manager.service.decorator delete mode 100644 deisctl/units/decorators/deis-swarm-node.service.decorator delete mode 100644 deisctl/units/decorators/deis-zookeeper.service.decorator delete mode 100644 deisctl/units/deis-kube-apiserver.service delete mode 100644 deisctl/units/deis-kube-controller-manager.service delete mode 100644 deisctl/units/deis-kube-kubelet.service delete mode 100644 deisctl/units/deis-kube-proxy.service delete mode 100644 deisctl/units/deis-kube-scheduler.service delete mode 100644 deisctl/units/deis-mesos-marathon.service delete mode 100644 deisctl/units/deis-mesos-master.service delete mode 100644 deisctl/units/deis-mesos-slave.service delete mode 100644 deisctl/units/deis-swarm-manager.service delete mode 100644 deisctl/units/deis-swarm-node.service delete mode 100644 deisctl/units/deis-zookeeper.service delete mode 100644 docs/customizing_deis/choosing-a-scheduler.rst delete mode 100644 mesos/Makefile delete mode 100644 mesos/README.md delete mode 100644 mesos/build-marathon delete mode 100755 mesos/build-marathon-jar.sh delete mode 100755 mesos/build-marathon.sh delete mode 100755 mesos/build-mesos.sh delete mode 100644 mesos/marathon delete mode 100644 mesos/master delete mode 100644 mesos/pkg/boot/extpoints/extpoints.go delete mode 100644 mesos/pkg/boot/extpoints/interfaces.go delete mode 100644 mesos/pkg/boot/main.go delete mode 100755 mesos/pkg/boot/mesos/marathon/bash/update-hosts-file.bash delete mode 100644 mesos/pkg/boot/mesos/marathon/main.go delete mode 100644 mesos/pkg/boot/mesos/master/main.go delete mode 100644 mesos/pkg/boot/mesos/slave/main.go delete mode 100755 mesos/pkg/boot/zookeeper/bash/add-node.bash delete mode 100755 mesos/pkg/boot/zookeeper/bash/remove-node.bash delete mode 100644 mesos/pkg/boot/zookeeper/main/boot.go delete mode 100644 mesos/pkg/boot/zookeeper/zookeeper_map.go delete mode 100644 mesos/pkg/boot/zookeeper/zookeeper_server.go delete mode 100644 mesos/pkg/confd/confd.go delete mode 100644 mesos/pkg/confd/confd_test.go delete mode 100644 mesos/pkg/etcd/etcd.go delete mode 100644 mesos/pkg/etcd/etcd_test.go delete mode 100644 mesos/pkg/etcd/lock.go delete mode 100644 mesos/pkg/etcd/lock_test.go delete mode 100644 mesos/pkg/fleet/machine.go delete mode 100644 mesos/pkg/fleet/machine_test.go delete mode 100644 mesos/pkg/fleet/machines.go delete mode 100644 mesos/pkg/fleet/machines_test.go delete mode 100644 mesos/pkg/log/log.go delete mode 100644 mesos/pkg/log/stdout_formatter.go delete mode 100644 mesos/pkg/net/net.go delete mode 100644 mesos/pkg/net/net_test.go delete mode 100644 mesos/pkg/os/os.go delete mode 100644 mesos/pkg/os/os_test.go delete mode 100644 mesos/pkg/types/command.go delete mode 100644 mesos/pkg/types/cron.go delete mode 100644 mesos/pkg/types/current-boot.go delete mode 100644 mesos/pkg/types/script.go delete mode 100644 mesos/pkg/types/service-daemon.go delete mode 100644 mesos/slave delete mode 100644 mesos/template delete mode 100644 mesos/zookeeper/Dockerfile delete mode 100755 mesos/zookeeper/build.sh delete mode 100644 mesos/zookeeper/conf.d/dynamic-cfg.toml delete mode 100644 mesos/zookeeper/conf.d/server-list.toml delete mode 100644 mesos/zookeeper/templates/server.list delete mode 100644 mesos/zookeeper/templates/zoo_cfg.dynamic delete mode 100644 mesos/zookeeper/zoo.cfg delete mode 100644 swarm/Dockerfile delete mode 100644 swarm/Makefile delete mode 100644 swarm/README.md delete mode 100644 swarm/image/Dockerfile delete mode 100644 swarm/swarm.go diff --git a/controller/registry/dockerclient.py b/controller/registry/dockerclient.py index 0bc2b2d5ba..1557142f47 100644 --- a/controller/registry/dockerclient.py +++ b/controller/registry/dockerclient.py @@ -92,8 +92,7 @@ def check_blacklist(repo): blacklisted = [ # NOTE: keep this list up to date! 'builder', 'cache', 'controller', 'database', 'logger', 'logspout', 'publisher', 'registry', 'router', 'store-admin', 'store-daemon', - 'store-gateway', 'store-metadata', 'store-monitor', 'swarm', 'mesos-master', - 'mesos-marathon', 'mesos-slave', 'zookeeper', + 'store-gateway', 'store-metadata', 'store-monitor', ] if any("deis/{}".format(c) in repo for c in blacklisted): raise PermissionDenied("Repository name {} is not allowed".format(repo)) diff --git a/controller/scheduler/k8s.py b/controller/scheduler/k8s.py deleted file mode 100644 index b0878deb11..0000000000 --- a/controller/scheduler/k8s.py +++ /dev/null @@ -1,686 +0,0 @@ -import copy -import httplib -import json -import random -import re -import string -import time - -from django.conf import settings -from docker import Client -from .states import JobState -from . import AbstractSchedulerClient - - -POD_TEMPLATE = '''{ - "kind": "Pod", - "apiVersion": "$version", - "metadata": { - "name": "$id" - }, - "spec": { - "containers": [ - { - "name": "$id", - "image": "$image" - } - ], - "restartPolicy":"Never" - } -}''' - -RC_TEMPLATE = '''{ - "kind":"ReplicationController", - "apiVersion":"$version", - "metadata":{ - "name":"$name", - "labels":{ - "name":"$id" - } - }, - "spec":{ - "replicas":$num, - "selector":{ - "name":"$id", - "version":"$appversion", - "type":"$type" - }, - "template":{ - "metadata":{ - "labels":{ - "name":"$id", - "version":"$appversion", - "type":"$type" - } - }, - "spec":{ - "containers":[ - { - "name":"$containername", - "image":"$image" - } - ] - } - } - } -}''' - -SERVICE_TEMPLATE = '''{ - "kind":"Service", - "apiVersion":"$version", - "metadata":{ - "name":"$name", - "labels":{ - "name":"$label" - } - }, - "spec":{ - "ports": [ - { - "port":80, - "targetPort":$port, - "protocol":"TCP" - } - ], - "selector":{ - "name":"$label", - "type":"$type" - } - } -}''' - -POD_DELETE = '''{ -}''' - - -RETRIES = 3 -MATCH = re.compile( - r'(?P[a-z0-9-]+)_?(?Pv[0-9]+)?\.?(?P[a-z-_]+)') - - -class KubeHTTPClient(AbstractSchedulerClient): - - def __init__(self, target, auth, options, pkey): - super(KubeHTTPClient, self).__init__(target, auth, options, pkey) - self.target = settings.K8S_MASTER - self.port = "8080" - self.registry = settings.REGISTRY_HOST+":"+settings.REGISTRY_PORT - self.apiversion = "v1" - self.conn = httplib.HTTPConnection(self.target+":"+self.port) - - def _get_old_rc(self, name, app_type): - con_app = httplib.HTTPConnection(self.target+":"+self.port) - con_app.request('GET', '/api/'+self.apiversion + - '/namespaces/'+name+'/replicationcontrollers') - resp = con_app.getresponse() - data = resp.read() - reason = resp.reason - status = resp.status - con_app.close() - if not 200 <= status <= 299: - errmsg = "Failed to get Replication Controllers: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - parsed_json = json.loads(data) - exists = False - prev_rc = [] - for rc in parsed_json['items']: - if('name' in rc['metadata']['labels'] and name == rc['metadata']['labels']['name'] and - 'type' in rc['spec']['selector'] and app_type == rc['spec']['selector']['type']): - exists = True - prev_rc = rc - break - if exists: - return prev_rc - else: - return 0 - - def _get_rc_status(self, name, namespace): - conn_rc = httplib.HTTPConnection(self.target+":"+self.port) - conn_rc.request('GET', '/api/'+self.apiversion+'/' + - 'namespaces/'+namespace+'/replicationcontrollers/'+name) - resp = conn_rc.getresponse() - status = resp.status - conn_rc.close() - return status - - def _get_rc_(self, name, namespace): - conn_rc_resver = httplib.HTTPConnection(self.target+":"+self.port) - conn_rc_resver.request('GET', '/api/'+self.apiversion+'/' + - 'namespaces/'+namespace+'/replicationcontrollers/'+name) - resp = conn_rc_resver.getresponse() - data = resp.read() - reason = resp.reason - status = resp.status - conn_rc_resver.close() - if not 200 <= status <= 299: - errmsg = "Failed to get Replication Controller:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - parsed_json = json.loads(data) - return parsed_json - - def deploy(self, name, image, command, **kwargs): - app_name = kwargs.get('aname', {}) - app_type = name.split(".")[1] - old_rc = self._get_old_rc(app_name, app_type) - new_rc = self._create_rc(name, image, command, **kwargs) - desired = int(old_rc["spec"]["replicas"]) - old_rc_name = old_rc["metadata"]["name"] - new_rc_name = new_rc["metadata"]["name"] - try: - count = 1 - while desired >= count: - new_rc = self._scale_app(new_rc_name, count, app_name) - old_rc = self._scale_app(old_rc_name, desired-count, app_name) - count += 1 - except Exception as e: - self._scale_app(new_rc["metadata"]["name"], 0, app_name) - self._delete_rc(new_rc["metadata"]["name"], app_name) - self._scale_app(old_rc["metadata"]["name"], desired, app_name) - err = '{} (deploy): {}'.format(name, e) - raise RuntimeError(err) - self._delete_rc(old_rc_name, app_name) - - def _get_events(self, namespace): - con_get = httplib.HTTPConnection(self.target+":"+self.port) - con_get.request('GET', '/api/'+self.apiversion+'/namespaces/'+namespace+'/events') - resp = con_get.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_get.close() - if not 200 <= status <= 299: - errmsg = "Failed to get events: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - return (status, data, reason) - - def _get_schedule_status(self, name, num, namespace): - pods = [] - for _ in xrange(120): - count = 0 - pods = [] - status, data, reason = self._get_pods(namespace) - parsed_json = json.loads(data) - for pod in parsed_json['items']: - if pod['metadata']['generateName'] == name+'-': - count += 1 - pods.append(pod['metadata']['name']) - if count == num: - break - time.sleep(1) - for _ in xrange(120): - count = 0 - status, data, reason = self._get_events(namespace) - parsed_json = json.loads(data) - for event in parsed_json['items']: - if(event['involvedObject']['name'] in pods and - event['source']['component'] == 'scheduler'): - if event['reason'] == 'scheduled': - count += 1 - else: - raise RuntimeError(event['message']) - if count == num: - break - time.sleep(1) - - def _scale_rc(self, rc, namespace): - name = rc['metadata']['name'] - num = rc["spec"]["replicas"] - headers = {'Content-Type': 'application/json'} - conn_scalepod = httplib.HTTPConnection(self.target+":"+self.port) - conn_scalepod.request('PUT', '/api/'+self.apiversion+'/namespaces/'+namespace+'/' + - 'replicationcontrollers/'+name, headers=headers, body=json.dumps(rc)) - resp = conn_scalepod.getresponse() - data = resp.read() - reason = resp.reason - status = resp.status - conn_scalepod.close() - if not 200 <= status <= 299: - errmsg = "Failed to scale Replication Controller:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - resource_ver = rc['metadata']['resourceVersion'] - for _ in xrange(30): - js_template = self._get_rc_(name, namespace) - if js_template["metadata"]["resourceVersion"] != resource_ver: - break - time.sleep(1) - self._get_schedule_status(name, num, namespace) - for _ in xrange(120): - count = 0 - status, data, reason = self._get_pods(namespace) - parsed_json = json.loads(data) - for pod in parsed_json['items']: - if(pod['metadata']['generateName'] == name+'-' and - pod['status']['phase'] == 'Running'): - count += 1 - if count == num: - break - time.sleep(1) - - def _scale_app(self, name, num, namespace): - js_template = self._get_rc_(name, namespace) - js_template["spec"]["replicas"] = num - self._scale_rc(js_template, namespace) - - def scale(self, name, image, command, **kwargs): - app_name = kwargs.get('aname', {}) - rc_name = name.replace(".", "-") - rc_name = rc_name.replace("_", "-") - if not 200 <= self._get_rc_status(rc_name, app_name) <= 299: - self.create(name, image, command, **kwargs) - return - name = name.replace(".", "-") - name = name.replace("_", "-") - num = kwargs.get('num', {}) - js_template = self._get_rc_(name, app_name) - old_replicas = js_template["spec"]["replicas"] - try: - self._scale_app(name, num, app_name) - except Exception as e: - self._scale_app(name, old_replicas, app_name) - err = '{} (Scale): {}'.format(name, e) - raise RuntimeError(err) - - def _create_rc(self, name, image, command, **kwargs): - container_fullname = name - app_name = kwargs.get('aname', {}) - app_type = name.split(".")[1] - container_name = app_name+"-"+app_type - name = name.replace(".", "-") - name = name.replace("_", "-") - args = command.split() - - num = kwargs.get('num', {}) - l = {} - l["name"] = name - l["id"] = app_name - l["appversion"] = kwargs.get('version', {}) - l["version"] = self.apiversion - l["image"] = self.registry+"/"+image - l['num'] = num - l['containername'] = container_name - l['type'] = app_type - template = string.Template(RC_TEMPLATE).substitute(l) - js_template = json.loads(template) - containers = js_template["spec"]["template"]["spec"]["containers"] - containers[0]['args'] = args - loc = locals().copy() - loc.update(re.match(MATCH, container_fullname).groupdict()) - mem = kwargs.get('memory', {}).get(loc['c_type']) - cpu = kwargs.get('cpu', {}).get(loc['c_type']) - if mem or cpu: - containers[0]["resources"] = {"limits": {}} - if mem: - if mem[-2:-1].isalpha() and mem[-1].isalpha(): - mem = mem[:-1] - mem = mem+"i" - containers[0]["resources"]["limits"]["memory"] = mem - if cpu: - cpu = float(cpu)/1024 - containers[0]["resources"]["limits"]["cpu"] = cpu - headers = {'Content-Type': 'application/json'} - conn_rc = httplib.HTTPConnection(self.target+":"+self.port) - conn_rc.request('POST', '/api/'+self.apiversion+'/namespaces/'+app_name+'/' + - 'replicationcontrollers', headers=headers, body=json.dumps(js_template)) - resp = conn_rc.getresponse() - data = resp.read() - reason = resp.reason - status = resp.status - conn_rc.close() - if not 200 <= status <= 299: - errmsg = "Failed to create Replication Controller:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - create = False - for _ in xrange(30): - if not create and self._get_rc_status(name, app_name) == 404: - time.sleep(1) - continue - create = True - rc = self._get_rc_(name, app_name) - if ("observedGeneration" in rc["status"] - and rc["metadata"]["generation"] == rc["status"]["observedGeneration"]): - break - time.sleep(1) - return json.loads(data) - - def create(self, name, image, command, **kwargs): - """Create a container.""" - self._create_rc(name, image, command, **kwargs) - app_type = name.split(".")[1] - name = name.replace(".", "-") - name = name.replace("_", "-") - app_name = kwargs.get('aname', {}) - try: - self._create_service(name, app_name, app_type) - except Exception as e: - self._scale_app(name, 0, app_name) - self._delete_rc(name, app_name) - err = '{} (create): {}'.format(name, e) - raise RuntimeError(err) - - def _get_service(self, name, namespace): - con_get = httplib.HTTPConnection(self.target+":"+self.port) - con_get.request('GET', '/api/'+self.apiversion+'/namespaces/'+namespace+'/services/'+name) - resp = con_get.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_get.close() - if not 200 <= status <= 299: - errmsg = "Failed to get Service: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - return (status, data, reason) - - def _create_service(self, name, app_name, app_type): - random.seed(app_name) - app_id = random.randint(1, 100000) - appname = "app-"+str(app_id) - actual_pod = {} - for _ in xrange(300): - status, data, reason = self._get_pods(app_name) - parsed_json = json.loads(data) - for pod in parsed_json['items']: - if('generateName' in pod['metadata'] and - pod['metadata']['generateName'] == name+'-'): - actual_pod = pod - break - if actual_pod and actual_pod['status']['phase'] == 'Running': - break - time.sleep(1) - container_id = actual_pod['status']['containerStatuses'][0]['containerID'].split("//")[1] - ip = actual_pod['status']['hostIP'] - docker_cli = Client("tcp://{}:2375".format(ip), timeout=1200, version='1.17') - container = docker_cli.inspect_container(container_id) - port = int(container['Config']['ExposedPorts'].keys()[0].split("/")[0]) - l = {} - l["version"] = self.apiversion - l["label"] = app_name - l["port"] = port - l['type'] = app_type - l["name"] = appname - template = string.Template(SERVICE_TEMPLATE).substitute(l) - headers = {'Content-Type': 'application/json'} - conn_serv = httplib.HTTPConnection(self.target+":"+self.port) - conn_serv.request('POST', '/api/'+self.apiversion+'/namespaces/'+app_name+'/services', - headers=headers, body=copy.deepcopy(template)) - resp = conn_serv.getresponse() - data = resp.read() - reason = resp.reason - status = resp.status - conn_serv.close() - if status == 409: - status, data, reason = self._get_service(appname, app_name) - srv = json.loads(data) - if srv['spec']['selector']['type'] == 'web': - return - srv['spec']['selector']['type'] = app_type - srv['spec']['ports'][0]['targetPort'] = port - headers = {'Content-Type': 'application/json'} - conn_scalepod = httplib.HTTPConnection(self.target+":"+self.port) - conn_scalepod.request('PUT', '/api/'+self.apiversion+'/namespaces/'+app_name+'/' + - 'services/'+appname, headers=headers, body=json.dumps(srv)) - resp = conn_scalepod.getresponse() - data = resp.read() - reason = resp.reason - status = resp.status - conn_scalepod.close() - if not 200 <= status <= 299: - errmsg = "Failed to update the Service:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - elif not 200 <= status <= 299: - errmsg = "Failed to create Service:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - - def start(self, name): - """Start a container.""" - pass - - def stop(self, name): - """Stop a container.""" - pass - - def _delete_rc(self, name, namespace): - headers = {'Content-Type': 'application/json'} - con_dest = httplib.HTTPConnection(self.target+":"+self.port) - con_dest.request('DELETE', '/api/'+self.apiversion+'/namespaces/'+namespace+'/' + - 'replicationcontrollers/'+name, headers=headers, body=POD_DELETE) - resp = con_dest.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_dest.close() - if not 200 <= status <= 299: - errmsg = "Failed to delete Replication Controller:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - - def destroy(self, name): - """Destroy a container.""" - appname = name.split("_")[0] - name = name.split(".") - name = name[0]+'-'+name[1] - name = name.replace("_", "-") - - headers = {'Content-Type': 'application/json'} - con_dest = httplib.HTTPConnection(self.target+":"+self.port) - con_dest.request('DELETE', '/api/'+self.apiversion+'/namespaces/'+appname+'/' + - 'replicationcontrollers/'+name, headers=headers, body=POD_DELETE) - resp = con_dest.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_dest.close() - if status == 404: - return - if not 200 <= status <= 299: - errmsg = "Failed to delete Replication Controller:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - - random.seed(appname) - app_id = random.randint(1, 100000) - app_name = "app-"+str(app_id) - con_serv = httplib.HTTPConnection(self.target+":"+self.port) - con_serv.request('DELETE', '/api/'+self.apiversion + - '/namespaces/'+appname+'/services/'+app_name) - resp = con_serv.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_serv.close() - if status != 404 and not 200 <= status <= 299: - errmsg = "Failed to delete service:{} {} {} - {}".format( - name, status, reason, data) - raise RuntimeError(errmsg) - - status, data, reason = self._get_pods(appname) - parsed_json = json.loads(data) - for pod in parsed_json['items']: - if 'generateName' in pod['metadata'] and pod['metadata']['generateName'] == name+'-': - self._delete_pod(pod['metadata']['name'], appname) - con_ns = httplib.HTTPConnection(self.target+":"+self.port) - con_ns.request('DELETE', '/api/'+self.apiversion+'/namespaces/'+appname) - resp = con_ns.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_ns.close() - if not 200 <= status <= 299: - errmsg = "Failed to delete namespace:{} {} {} - {}".format( - appname, status, reason, data) - raise RuntimeError(errmsg) - - def _get_pod(self, name, namespace): - conn_pod = httplib.HTTPConnection(self.target+":"+self.port) - conn_pod.request('GET', '/api/'+self.apiversion+'/namespaces/'+namespace+'/pods/'+name) - resp = conn_pod.getresponse() - status = resp.status - data = resp.read() - reason = resp.reason - conn_pod.close() - return (status, data, reason) - - def _get_pods(self, namespace): - con_get = httplib.HTTPConnection(self.target+":"+self.port) - con_get.request('GET', '/api/'+self.apiversion+'/namespaces/'+namespace+'/pods') - resp = con_get.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_get.close() - if not 200 <= status <= 299: - errmsg = "Failed to get Pods: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - return (status, data, reason) - - def _delete_pod(self, name, namespace): - headers = {'Content-Type': 'application/json'} - con_dest_pod = httplib.HTTPConnection(self.target+":"+self.port) - con_dest_pod.request('DELETE', '/api/'+self.apiversion+'/namespaces/' + - namespace+'/pods/'+name, headers=headers, body=POD_DELETE) - resp = con_dest_pod.getresponse() - reason = resp.reason - status = resp.status - data = resp.read() - con_dest_pod.close() - if not 200 <= status <= 299: - errmsg = "Failed to delete Pod: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - for _ in xrange(5): - status, data, reason = self._get_pod(name, namespace) - if status != 404: - time.sleep(1) - continue - break - if status != 404: - errmsg = "Failed to delete Pod: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - - def _pod_log(self, name, namespace): - conn_log = httplib.HTTPConnection(self.target+":"+self.port) - conn_log.request('GET', '/api/'+self.apiversion+'/namespaces/' + - namespace+'/pods/'+name+'/log') - resp = conn_log.getresponse() - status = resp.status - data = resp.read() - reason = resp.reason - conn_log.close() - if not 200 <= status <= 299: - errmsg = "Failed to get the log: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - return (status, data, reason) - - def logs(self, name): - appname = name.split("_")[0] - name = name.replace(".", "-") - name = name.replace("_", "-") - status, data, reason = self._get_pods(appname) - parsed_json = json.loads(data) - log_data = '' - for pod in parsed_json['items']: - if name in pod['metadata']['generateName'] and pod['status']['phase'] == 'Running': - status, data, reason = self._pod_log(pod['metadata']['name'], appname) - log_data += data - return log_data - - def run(self, name, image, entrypoint, command): - """Run a one-off command.""" - appname = name.split("_")[0] - name = name.replace(".", "-") - name = name.replace("_", "-") - l = {} - l["id"] = name - l["version"] = self.apiversion - l["image"] = self.registry+"/"+image - template = string.Template(POD_TEMPLATE).substitute(l) - if command.startswith("-c "): - args = command.split(' ', 1) - args[1] = args[1][1:-1] - else: - args = [command[1:-1]] - js_template = json.loads(template) - js_template['spec']['containers'][0]['command'] = [entrypoint] - js_template['spec']['containers'][0]['args'] = args - - con_dest = httplib.HTTPConnection(self.target+":"+self.port) - headers = {'Content-Type': 'application/json'} - con_dest.request('POST', '/api/'+self.apiversion+'/namespaces/'+appname+'/pods', - headers=headers, body=json.dumps(js_template)) - resp = con_dest.getresponse() - data = resp.read() - status = resp.status - reason = resp.reason - con_dest.close() - if not 200 <= status <= 299: - errmsg = "Failed to create a Pod: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - while(1): - parsed_json = {} - status = 404 - reason = '' - data = '' - for _ in xrange(5): - status, data, reason = self._get_pod(name, appname) - if not 200 <= status <= 299: - time.sleep(1) - continue - parsed_json = json.loads(data) - break - if not 200 <= status <= 299: - errmsg = "Failed to create a Pod: {} {} - {}".format( - status, reason, data) - raise RuntimeError(errmsg) - if parsed_json['status']['phase'] == 'Succeeded': - status, data, reason = self._pod_log(name, appname) - self._delete_pod(name, appname) - return 0, data - elif parsed_json['status']['phase'] == 'Failed': - pod_state = parsed_json['status']['containerStatuses'][0]['state'] - err_code = pod_state['terminated']['exitCode'] - self._delete_pod(name, appname) - return err_code, data - time.sleep(1) - return 0, data - - def _get_pod_state(self, name): - try: - appname = name.split("_")[0] - name = name.split(".") - name = name[0]+'-'+name[1] - name = name.replace("_", "-") - for _ in xrange(120): - status, data, reason = self._get_pods(appname) - parsed_json = json.loads(data) - for pod in parsed_json['items']: - if pod['metadata']['generateName'] == name+'-': - actual_pod = pod - break - if actual_pod and actual_pod['status']['phase'] == 'Running': - return JobState.up - time.sleep(1) - return JobState.destroyed - except: - return JobState.destroyed - - def state(self, name): - """Display the given job's running state.""" - try: - return self._get_pod_state(name) - except KeyError: - return JobState.error - except RuntimeError: - return JobState.destroyed - -SchedulerClient = KubeHTTPClient diff --git a/controller/scheduler/mesos_marathon.py b/controller/scheduler/mesos_marathon.py deleted file mode 100644 index 3338c9c503..0000000000 --- a/controller/scheduler/mesos_marathon.py +++ /dev/null @@ -1,115 +0,0 @@ -import re -import time - -from django.conf import settings -from docker import Client -from marathon import MarathonClient -from marathon.models import MarathonApp - -from . import AbstractSchedulerClient -from .fleet import FleetHTTPClient -from .states import JobState - -# turn down standard marathon logging - -MATCH = re.compile( - '(?P[a-z0-9-]+)_?(?Pv[0-9]+)?\.?(?P[a-z-_]+)?.(?P[0-9]+)') -RETRIES = 3 -POLL_ATTEMPTS = 30 -POLL_WAIT = 100 - - -class MarathonHTTPClient(AbstractSchedulerClient): - - def __init__(self, target, auth, options, pkey): - super(MarathonHTTPClient, self).__init__(target, auth, options, pkey) - self.target = settings.MARATHON_HOST - self.registry = settings.REGISTRY_HOST + ':' + settings.REGISTRY_PORT - self.client = MarathonClient('http://'+self.target+':8180') - self.fleet = FleetHTTPClient('/var/run/fleet.sock', auth, options, pkey) - - # helpers - def _app_id(self, name): - return name.replace('_', '.') - - # container api - def create(self, name, image, command='', **kwargs): - """Create a new container""" - app_id = self._app_id(name) - l = locals().copy() - l.update(re.match(MATCH, name).groupdict()) - image = self.registry + '/' + image - mems = kwargs.get('memory', {}).get(l['c_type']) - m = 0 - if mems: - mems = mems.lower() - if mems[-2:-1].isalpha() and mems[-1].isalpha(): - mems = mems[:-1] - m = int(mems[:-1]) - c = 0.5 - cpu = kwargs.get('cpu', {}).get(l['c_type']) - if cpu: - c = cpu - cmd = "docker run --name {name} -P {image} {command}".format(**locals()) - self.client.create_app(app_id, MarathonApp(cmd=cmd, mem=m, cpus=c, instances=0)) - for _ in xrange(POLL_ATTEMPTS): - if self.client.get_app(self._app_id(name)).tasks_running == 0: - return - time.sleep(1) - - def start(self, name): - """Start a container.""" - self.client.scale_app(self._app_id(name), 1, force=True) - for _ in xrange(POLL_ATTEMPTS): - if self.client.get_app(self._app_id(name)).tasks_running == 1: - break - time.sleep(1) - host = self.client.get_app(self._app_id(name)).tasks[0].host - self._waitforcontainer(host, name) - - def destroy(self, name): - """Destroy a container.""" - try: - host = self.client.get_app(self._app_id(name)).tasks[0].host - self.client.delete_app(self._app_id(name), force=True) - self._delete_container(host, name) - except: - self.client.delete_app(self._app_id(name), force=True) - - def _get_container_state(self, host, name): - docker_cli = Client("tcp://{}:2375".format(host), timeout=1200, version='1.17') - try: - if docker_cli.inspect_container(name)['State']['Running']: - return JobState.up - except: - return JobState.destroyed - - def _waitforcontainer(self, host, name): - for _ in xrange(POLL_WAIT): - if self._get_container_state(host, name) == JobState.up: - return - time.sleep(1) - raise RuntimeError("App container Not Started") - - def _delete_container(self, host, name): - docker_cli = Client("tcp://{}:2375".format(host), timeout=1200, version='1.17') - if docker_cli.inspect_container(name)['State']: - docker_cli.remove_container(name, force=True) - - def run(self, name, image, entrypoint, command): # noqa - """Run a one-off command.""" - return self.fleet.run(name, image, entrypoint, command) - - def state(self, name): - """Display the given job's running state.""" - try: - for _ in xrange(POLL_ATTEMPTS): - if self.client.get_app(self._app_id(name)).tasks_running == 1: - return JobState.up - elif self.client.get_app(self._app_id(name)).tasks_running == 0: - return JobState.created - time.sleep(1) - except: - return JobState.destroyed - -SchedulerClient = MarathonHTTPClient diff --git a/controller/scheduler/swarm.py b/controller/scheduler/swarm.py deleted file mode 100644 index 6d4142f4d5..0000000000 --- a/controller/scheduler/swarm.py +++ /dev/null @@ -1,124 +0,0 @@ -import re -import time - -from django.conf import settings -from docker import Client - -from . import AbstractSchedulerClient -from .states import JobState - - -MATCH = re.compile( - r'(?P[a-z0-9-]+)_?(?Pv[0-9]+)?\.?(?P[a-z-_]+)?.(?P[0-9]+)') - - -class SwarmClient(AbstractSchedulerClient): - - def __init__(self, target, auth, options, pkey): - super(SchedulerClient, self).__init__(target, auth, options, pkey) - self.target = settings.SWARM_HOST - # single global connection - self.registry = settings.REGISTRY_HOST + ':' + settings.REGISTRY_PORT - self.docker_cli = Client("tcp://{}:2395".format(self.target), - timeout=1200, version='1.17') - - def create(self, name, image, command='', template=None, **kwargs): - """Create a new container.""" - cimage = self.registry + '/' + image - affinity = "affinity:container!=~/{}*/".format(re.split(r'_v\d.', name)[0]) - l = locals().copy() - l.update(re.match(MATCH, name).groupdict()) - mem = kwargs.get('memory', {}).get(l['c_type']) - if mem: - mem = mem.lower() - if mem[-2:-1].isalpha() and mem[-1].isalpha(): - mem = mem[:-1] - cpu = kwargs.get('cpu', {}).get(l['c_type']) - self.docker_cli.create_container(image=cimage, name=name, - command=command.encode('utf-8'), - mem_limit=mem, - cpu_shares=cpu, - environment=[affinity], - host_config={'PublishAllPorts': True}) - - def start(self, name): - """Start a container.""" - self.docker_cli.start(name) - - def stop(self, name): - """Stop a container.""" - self.docker_cli.stop(name) - - def destroy(self, name): - """Destroy a container.""" - self.stop(name) - self.docker_cli.remove_container(name) - - def run(self, name, image, entrypoint, command): - """Run a one-off command.""" - cimage = self.registry + '/' + image - # use affinity for nodes that already have the image - affinity = "affinity:image==~{}".format(cimage) - self.docker_cli.create_container(image=cimage, name=name, - command=command.encode('utf-8'), - environment=[affinity], - entrypoint=[entrypoint]) - time.sleep(2) - self.start(name) - rc = 0 - while (True): - if self._get_container_state(name) == JobState.created: - break - time.sleep(1) - try: - output = self.docker_cli.logs(name) - return rc, output - except: - rc = 1 - return rc, output - - def _get_container_state(self, name): - try: - if self.docker_cli.inspect_container(name)['State']['Running']: - return JobState.up - else: - return JobState.created - except: - return JobState.destroyed - - def state(self, name): - """Display the given job's running state.""" - try: - for _ in xrange(30): - return self._get_container_state(name) - time.sleep(1) - # FIXME (smothiki): should be able to send JobState.crashed - except KeyError: - return JobState.error - except RuntimeError: - return JobState.destroyed - - def _get_hostname(self, application_name): - hostname = settings.UNIT_HOSTNAME - if hostname == 'default': - return '' - elif hostname == 'application': - # replace underscore with dots, since underscore is not valid in DNS hostnames - dns_name = application_name.replace('_', '.') - return dns_name - elif hostname == 'server': - raise NotImplementedError - else: - raise RuntimeError('Unsupported hostname: ' + hostname) - - def _get_portbindings(self, image): - dictports = self.docker_cli.inspect_image(image)['ContainerConfig']['ExposedPorts'] - for port in dictports: - dictports[port] = None - return dictports - - def _get_ports(self, image): - dictports = self.docker_cli.inspect_image(image)['ContainerConfig']['ExposedPorts'] - return [int(port.split('/')[0]) for port in dictports] - -SchedulerClient = SwarmClient diff --git a/controller/templates/confd_settings.py b/controller/templates/confd_settings.py index fc2e29fb4a..0593d9da79 100644 --- a/controller/templates/confd_settings.py +++ b/controller/templates/confd_settings.py @@ -3,21 +3,13 @@ BUILDER_KEY = '{{ getv "/deis/controller/builderKey" }}' # scheduler settings -SCHEDULER_MODULE = 'scheduler.{{ if exists "/deis/controller/schedulerModule" }}{{ getv "/deis/controller/schedulerModule" }}{{ else }}fleet{{ end }}' -SCHEDULER_TARGET = '{{ if exists "/deis/controller/schedulerTarget" }}{{ getv "/deis/controller/schedulerTarget" }}{{ else }}/var/run/fleet.sock{{ end }}' +SCHEDULER_MODULE = 'scheduler.fleet' +SCHEDULER_TARGET = '/var/run/fleet.sock' try: SCHEDULER_OPTIONS = dict('{{ if exists "/deis/controller/schedulerOptions" }}{{ getv "/deis/controller/schedulerOptions" }}{{ else }}{}{{ end }}') except: SCHEDULER_OPTIONS = {} -# scheduler swarm manager host - -SWARM_HOST = '{{ if exists "/deis/scheduler/swarm/host" }}{{ getv "/deis/scheduler/swarm/host" }}{{ else }}127.0.0.1{{ end }}' - -MARATHON_HOST = '{{ if exists "/deis/scheduler/mesos/marathon" }}{{ getv "/deis/scheduler/mesos/marathon" }}{{ else }}127.0.0.1{{ end }}' - -K8S_MASTER = '{{ if exists "/deis/scheduler/k8s/master" }}{{ getv "/deis/scheduler/k8s/master" }}{{ else }}127.0.0.1{{ end }}' - # base64-encoded SSH private key to facilitate current version of "deis run" SSH_PRIVATE_KEY = """{{ if exists "/deis/platform/sshPrivateKey" }}{{ getv "/deis/platform/sshPrivateKey" }}{{ else }}""{{end}}""" diff --git a/deisctl/cmd/cmd.go b/deisctl/cmd/cmd.go index ce5ed7d624..834845e8ef 100644 --- a/deisctl/cmd/cmd.go +++ b/deisctl/cmd/cmd.go @@ -23,11 +23,8 @@ const ( PlatformCommand string = "platform" // StatelessPlatformCommand is shorthand for the components except store-* and database. StatelessPlatformCommand string = "stateless-platform" - swarm string = "swarm" - mesos string = "mesos" // DefaultRouterMeshSize defines the default number of routers to be loaded when installing the platform. - DefaultRouterMeshSize uint8 = 3 - k8s string = "k8s" + DefaultRouterMeshSize uint8 = 3 ) // ListUnits prints a list of installed units. @@ -84,12 +81,6 @@ func Start(targets []string, b backend.Backend) error { return StartPlatform(b, false) case StatelessPlatformCommand: return StartPlatform(b, true) - case mesos: - return StartMesos(b) - case swarm: - return StartSwarm(b) - case k8s: - return StartK8s(b) } } var wg sync.WaitGroup @@ -195,12 +186,6 @@ func Stop(targets []string, b backend.Backend) error { return StopPlatform(b, false) case StatelessPlatformCommand: return StopPlatform(b, true) - case mesos: - return StopMesos(b) - case swarm: - return StopSwarm(b) - case k8s: - return StopK8s(b) } } @@ -296,12 +281,6 @@ func Install(targets []string, b backend.Backend, cb config.Backend, checkKeys f return InstallPlatform(b, cb, checkKeys, false) case StatelessPlatformCommand: return InstallPlatform(b, cb, checkKeys, true) - case mesos: - return InstallMesos(b) - case swarm: - return InstallSwarm(b) - case k8s: - return InstallK8s(b) } } var wg sync.WaitGroup @@ -360,12 +339,6 @@ func Uninstall(targets []string, b backend.Backend) error { return UninstallPlatform(b, false) case StatelessPlatformCommand: return UninstallPlatform(b, true) - case mesos: - return UninstallMesos(b) - case swarm: - return UnInstallSwarm(b) - case k8s: - return UnInstallK8s(b) } } diff --git a/deisctl/cmd/cmd_test.go b/deisctl/cmd/cmd_test.go index e558fc4341..c84d035a4f 100644 --- a/deisctl/cmd/cmd_test.go +++ b/deisctl/cmd/cmd_test.go @@ -277,19 +277,6 @@ func TestStartStatelessPlatform(t *testing.T) { } } -func TestStartSwarm(t *testing.T) { - t.Parallel() - - b := backendStub{} - expected := []string{"swarm-manager", "swarm-node"} - - Start([]string{"swarm"}, &b) - - if !reflect.DeepEqual(b.startedUnits, expected) { - t.Error(fmt.Errorf("Expected %v, Got %v", expected, b.startedUnits)) - } -} - func TestRollingRestart(t *testing.T) { t.Parallel() @@ -416,18 +403,6 @@ func TestStopStatelessPlatform(t *testing.T) { } } -func TestStopSwarm(t *testing.T) { - t.Parallel() - - b := backendStub{} - expected := []string{"swarm-node", "swarm-manager"} - Stop([]string{"swarm"}, &b) - - if !reflect.DeepEqual(b.stoppedUnits, expected) { - t.Error(fmt.Errorf("Expected %v, Got %v", expected, b.stoppedUnits)) - } -} - func TestRestart(t *testing.T) { t.Parallel() @@ -589,21 +564,6 @@ func TestInstallStatelessPlatform(t *testing.T) { } } -func TestInstallSwarm(t *testing.T) { - t.Parallel() - - b := backendStub{} - cb := mock.ConfigBackend{} - - expected := []string{"swarm-manager", "swarm-node"} - - Install([]string{"swarm"}, &b, &cb, fakeCheckKeys) - - if !reflect.DeepEqual(b.installedUnits, expected) { - t.Error(fmt.Errorf("Expected %v, Got %v", expected, b.installedUnits)) - } -} - func TestUninstall(t *testing.T) { t.Parallel() @@ -645,16 +605,3 @@ func TestUninstallStatelessPlatform(t *testing.T) { t.Error(fmt.Errorf("Expected %v, Got %v", expected, b.uninstalledUnits)) } } - -func TestUninstallSwarm(t *testing.T) { - t.Parallel() - - b := backendStub{} - expected := []string{"swarm-node", "swarm-manager"} - - Uninstall([]string{"swarm"}, &b) - - if !reflect.DeepEqual(b.uninstalledUnits, expected) { - t.Error(fmt.Errorf("Expected %v, Got %v", expected, b.uninstalledUnits)) - } -} diff --git a/deisctl/cmd/k8s.go b/deisctl/cmd/k8s.go deleted file mode 100644 index 42ae633766..0000000000 --- a/deisctl/cmd/k8s.go +++ /dev/null @@ -1,88 +0,0 @@ -package cmd - -import ( - "fmt" - "io" - "sync" - - "github.com/deis/deis/deisctl/backend" - "github.com/deis/deis/pkg/prettyprint" -) - -//InstallK8s Installs K8s -func InstallK8s(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Installing K8s...")) - fmt.Fprintln(Stdout, "K8s control plane...") - b.Create([]string{"kube-apiserver"}, &wg, Stdout, Stderr) - wg.Wait() - b.Create([]string{"kube-controller-manager", "kube-scheduler"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s data plane...") - b.Create([]string{"kube-kubelet"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s router mesh...") - b.Create([]string{"kube-proxy"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please run `deisctl start k8s` to start K8s.") - return nil -} - -//StartK8s starts K8s Schduler -func StartK8s(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Starting K8s...")) - fmt.Fprintln(Stdout, "K8s control plane...") - b.Start([]string{"kube-apiserver"}, &wg, Stdout, Stderr) - wg.Wait() - b.Start([]string{"kube-controller-manager", "kube-scheduler"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s data plane...") - b.Start([]string{"kube-kubelet"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s router mesh...") - b.Start([]string{"kube-proxy"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please run `deisctl config controller set schedulerModule=k8s` to use the K8s scheduler.") - return nil -} - -//StopK8s stops K8s -func StopK8s(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Stopping K8s...")) - fmt.Fprintln(Stdout, "K8s router mesh...") - b.Stop([]string{"kube-proxy"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s data plane...") - b.Stop([]string{"kube-kubelet"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s control plane...") - b.Stop([]string{"kube-controller-manager", "kube-scheduler"}, &wg, Stdout, Stderr) - wg.Wait() - b.Stop([]string{"kube-apiserver"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - return nil -} - -//UnInstallK8s uninstall K8s -func UnInstallK8s(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Uninstalling K8s...")) - fmt.Fprintln(Stdout, "K8s router mesh...") - b.Destroy([]string{"kube-proxy"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s data plane...") - b.Destroy([]string{"kube-kubelet"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "K8s control plane...") - b.Destroy([]string{"kube-controller-manager", "kube-scheduler"}, &wg, Stdout, Stderr) - wg.Wait() - b.Destroy([]string{"kube-apiserver"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - return nil -} diff --git a/deisctl/cmd/mesos.go b/deisctl/cmd/mesos.go deleted file mode 100644 index 9590c5dc8e..0000000000 --- a/deisctl/cmd/mesos.go +++ /dev/null @@ -1,131 +0,0 @@ -package cmd - -import ( - "fmt" - "io" - "sync" - - "github.com/deis/deis/deisctl/backend" - "github.com/deis/deis/pkg/prettyprint" -) - -// InstallMesos loads all Mesos units for StartMesos -func InstallMesos(b backend.Backend) error { - - var wg sync.WaitGroup - - io.WriteString(Stdout, prettyprint.DeisIfy("Installing Mesos/Marathon...")) - - installMesosServices(b, &wg, Stdout, Stderr) - - wg.Wait() - - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please run `deisctl start mesos` to boot up Mesos.") - return nil -} - -func installMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) { - - fmt.Fprintln(out, "Mesos/Marathon control plane...") - b.Create([]string{"zookeeper", "mesos-master"}, wg, out, err) - wg.Wait() - b.Create([]string{"mesos-marathon"}, wg, out, err) - wg.Wait() - - fmt.Fprintln(out, "Mesos/Marathon data plane...") - b.Create([]string{"mesos-slave"}, wg, out, err) - wg.Wait() -} - -// UninstallMesos unloads and uninstalls all Mesos component definitions -func UninstallMesos(b backend.Backend) error { - - var wg sync.WaitGroup - - io.WriteString(Stdout, prettyprint.DeisIfy("Uninstalling Mesos/Marathon...")) - - uninstallMesosServices(b, &wg, Stdout, Stderr) - - wg.Wait() - - fmt.Fprintln(Stdout, "Done.\n ") - return nil -} - -func uninstallMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) error { - - fmt.Fprintln(out, "Mesos/Marathon data plane...") - b.Destroy([]string{"mesos-slave"}, wg, out, err) - wg.Wait() - - fmt.Fprintln(out, "Mesos/Marathon control plane...") - b.Destroy([]string{"mesos-marathon", "mesos-master", "zookeeper"}, wg, out, err) - wg.Wait() - - return nil -} - -// StartMesos activates all Mesos components. -func StartMesos(b backend.Backend) error { - - var wg sync.WaitGroup - - io.WriteString(Stdout, prettyprint.DeisIfy("Starting Mesos/Marathon...")) - - startMesosServices(b, &wg, Stdout, Stderr) - - wg.Wait() - - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please use `deisctl config controller set schedulerModule=mesos_marathon`") - return nil -} - -func startMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) { - - fmt.Fprintln(out, "Mesos/Marathon control plane...") - b.Start([]string{"zookeeper"}, wg, out, err) - wg.Wait() - b.Start([]string{"mesos-master"}, wg, out, err) - wg.Wait() - b.Start([]string{"mesos-marathon"}, wg, out, err) - wg.Wait() - - fmt.Fprintln(out, "Mesos/Marathon data plane...") - b.Start([]string{"mesos-slave"}, wg, out, err) - wg.Wait() - - wg.Wait() -} - -// StopMesos deactivates all Mesos components. -func StopMesos(b backend.Backend) error { - - var wg sync.WaitGroup - - io.WriteString(Stdout, prettyprint.DeisIfy("Stopping Mesos/Marathon...")) - - stopMesosServices(b, &wg, Stdout, Stderr) - - wg.Wait() - - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please run `deisctl start mesos` to restart Mesos.") - return nil -} - -func stopMesosServices(b backend.Backend, wg *sync.WaitGroup, out, err io.Writer) { - - fmt.Fprintln(out, "Mesos/Marathon data plane...") - b.Stop([]string{"mesos-slave"}, wg, out, err) - wg.Wait() - - fmt.Fprintln(out, "Mesos/Marathon control plane...") - b.Stop([]string{"mesos-marathon"}, wg, out, err) - wg.Wait() - b.Stop([]string{"mesos-master"}, wg, out, err) - wg.Wait() - b.Stop([]string{"zookeeper"}, wg, out, err) - wg.Wait() -} diff --git a/deisctl/cmd/swarm.go b/deisctl/cmd/swarm.go deleted file mode 100644 index a1fc314c74..0000000000 --- a/deisctl/cmd/swarm.go +++ /dev/null @@ -1,70 +0,0 @@ -package cmd - -import ( - "fmt" - "io" - "sync" - - "github.com/deis/deis/deisctl/backend" - "github.com/deis/deis/pkg/prettyprint" -) - -//InstallSwarm Installs swarm -func InstallSwarm(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Installing Swarm...")) - fmt.Fprintln(Stdout, "Swarm control plane...") - b.Create([]string{"swarm-manager"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Swarm data plane...") - b.Create([]string{"swarm-node"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please run `deisctl start swarm` to start swarm.") - return nil -} - -//StartSwarm starts Swarm Schduler -func StartSwarm(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Starting Swarm...")) - fmt.Fprintln(Stdout, "Swarm control plane...") - b.Start([]string{"swarm-manager"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Swarm data plane...") - b.Start([]string{"swarm-node"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - fmt.Fprintln(Stdout, "Please run `deisctl config controller set schedulerModule=swarm` to use the swarm scheduler.") - return nil -} - -//StopSwarm stops swarm -func StopSwarm(b backend.Backend) error { - - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Stopping Swarm...")) - fmt.Fprintln(Stdout, "Swarm data plane...") - b.Stop([]string{"swarm-node"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Swarm control plane...") - b.Stop([]string{"swarm-manager"}, &wg, Stdout, Stderr) - wg.Wait() - - fmt.Fprintln(Stdout, "Done.\n ") - return nil -} - -//UnInstallSwarm uninstall Swarm -func UnInstallSwarm(b backend.Backend) error { - var wg sync.WaitGroup - io.WriteString(Stdout, prettyprint.DeisIfy("Uninstalling Swarm...")) - fmt.Fprintln(Stdout, "Swarm data plane...") - b.Destroy([]string{"swarm-node"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Swarm control plane...") - b.Destroy([]string{"swarm-manager"}, &wg, Stdout, Stderr) - wg.Wait() - fmt.Fprintln(Stdout, "Done.\n ") - return nil -} diff --git a/deisctl/units/decorators/deis-kube-apiserver.service.decorator b/deisctl/units/decorators/deis-kube-apiserver.service.decorator deleted file mode 100644 index 1f5e20ea85..0000000000 --- a/deisctl/units/decorators/deis-kube-apiserver.service.decorator +++ /dev/null @@ -1,3 +0,0 @@ - -[X-Fleet] -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/decorators/deis-kube-controller-manager.service.decorator b/deisctl/units/decorators/deis-kube-controller-manager.service.decorator deleted file mode 100644 index 1f5e20ea85..0000000000 --- a/deisctl/units/decorators/deis-kube-controller-manager.service.decorator +++ /dev/null @@ -1,3 +0,0 @@ - -[X-Fleet] -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/decorators/deis-kube-kubelet.service.decorator b/deisctl/units/decorators/deis-kube-kubelet.service.decorator deleted file mode 100644 index 9ba31b5294..0000000000 --- a/deisctl/units/decorators/deis-kube-kubelet.service.decorator +++ /dev/null @@ -1 +0,0 @@ -MachineMetadata="dataPlane=true" diff --git a/deisctl/units/decorators/deis-kube-proxy.service.decorator b/deisctl/units/decorators/deis-kube-proxy.service.decorator deleted file mode 100644 index b19daa48a1..0000000000 --- a/deisctl/units/decorators/deis-kube-proxy.service.decorator +++ /dev/null @@ -1 +0,0 @@ -MachineMetadata="routerMesh=true" diff --git a/deisctl/units/decorators/deis-kube-scheduler.service.decorator b/deisctl/units/decorators/deis-kube-scheduler.service.decorator deleted file mode 100644 index 1f5e20ea85..0000000000 --- a/deisctl/units/decorators/deis-kube-scheduler.service.decorator +++ /dev/null @@ -1,3 +0,0 @@ - -[X-Fleet] -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/decorators/deis-mesos-marathon.service.decorator b/deisctl/units/decorators/deis-mesos-marathon.service.decorator deleted file mode 100644 index 8e4d049edb..0000000000 --- a/deisctl/units/decorators/deis-mesos-marathon.service.decorator +++ /dev/null @@ -1,2 +0,0 @@ - -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/decorators/deis-mesos-master.service.decorator b/deisctl/units/decorators/deis-mesos-master.service.decorator deleted file mode 100644 index 1f5e20ea85..0000000000 --- a/deisctl/units/decorators/deis-mesos-master.service.decorator +++ /dev/null @@ -1,3 +0,0 @@ - -[X-Fleet] -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/decorators/deis-mesos-slave.service.decorator b/deisctl/units/decorators/deis-mesos-slave.service.decorator deleted file mode 100644 index 59b20a4e57..0000000000 --- a/deisctl/units/decorators/deis-mesos-slave.service.decorator +++ /dev/null @@ -1,2 +0,0 @@ - -MachineMetadata="dataPlane=true" diff --git a/deisctl/units/decorators/deis-swarm-manager.service.decorator b/deisctl/units/decorators/deis-swarm-manager.service.decorator deleted file mode 100644 index 1f5e20ea85..0000000000 --- a/deisctl/units/decorators/deis-swarm-manager.service.decorator +++ /dev/null @@ -1,3 +0,0 @@ - -[X-Fleet] -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/decorators/deis-swarm-node.service.decorator b/deisctl/units/decorators/deis-swarm-node.service.decorator deleted file mode 100644 index 9ba31b5294..0000000000 --- a/deisctl/units/decorators/deis-swarm-node.service.decorator +++ /dev/null @@ -1 +0,0 @@ -MachineMetadata="dataPlane=true" diff --git a/deisctl/units/decorators/deis-zookeeper.service.decorator b/deisctl/units/decorators/deis-zookeeper.service.decorator deleted file mode 100644 index 8e4d049edb..0000000000 --- a/deisctl/units/decorators/deis-zookeeper.service.decorator +++ /dev/null @@ -1,2 +0,0 @@ - -MachineMetadata="controlPlane=true" diff --git a/deisctl/units/deis-kube-apiserver.service b/deisctl/units/deis-kube-apiserver.service deleted file mode 100644 index 85353bbf05..0000000000 --- a/deisctl/units/deis-kube-apiserver.service +++ /dev/null @@ -1,33 +0,0 @@ -[Unit] -Description=Kubernetes API Server -Documentation=https://github.com/GoogleCloudPlatform/kubernetes -Requires=fleet.service docker.service flanneld.service -After=fleet.service docker.service flanneld.service - -[Service] -EnvironmentFile=/etc/environment -ExecStartPre=-/bin/sh -c "etcdctl get /deis/scheduler/k8s/master >/dev/null 2>&1 || etcdctl mk /deis/scheduler/k8s/master" -ExecStartPre=/bin/sh -c "etcdctl set /deis/scheduler/k8s/master $COREOS_PRIVATE_IPV4" -ExecStartPre=/bin/bash -c "/opt/bin/download-k8s-binary kube-apiserver" -ExecStartPre=/bin/bash -c "if etcdctl get /kube-serviceaccount >/dev/null 2>&1; then etcdctl get /kube-serviceaccount > /opt/bin/kube-serviceaccount.key; else /bin/openssl genrsa -out /opt/bin/kube-serviceaccount.key 2048 2>/dev/null; etcdctl set /kube-serviceaccount < /opt/bin/kube-serviceaccount.key; fi" -ExecStart=/bin/bash -c "/opt/bin/kube-apiserver \ - --service_account_key_file=/opt/bin/kube-serviceaccount.key \ - --service_account_lookup=false \ - --admission_control=NamespaceLifecycle,NamespaceAutoProvision,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota \ - --allow_privileged=true \ - --insecure_bind_address=0.0.0.0 \ - --insecure_port=8080 \ - --kubelet_https=true \ - --secure_port=6443 \ - --service-cluster-ip-range=10.100.0.0/16 \ - --etcd_servers=$(curl -s 127.0.0.1:4001/v2/machines | sed 's/ //g') \ - --public_address_override=${COREOS_PRIVATE_IPV4} \ - --logtostderr=true \ - --runtime_config=api/v1" -ExecStartPost=/bin/bash -c "fleetctl stop deis-kube-scheduler deis-kube-controller-manager deis-kube-kubelet deis-kube-proxy; sleep 2; fleetctl start deis-kube-scheduler deis-kube-controller-manager deis-kube-kubelet deis-kube-proxy" -Restart=always -RestartSec=10 -SuccessExitStatus=2 - -[Install] -WantedBy=multi-user.target diff --git a/deisctl/units/deis-kube-controller-manager.service b/deisctl/units/deis-kube-controller-manager.service deleted file mode 100644 index aae3f6d2bc..0000000000 --- a/deisctl/units/deis-kube-controller-manager.service +++ /dev/null @@ -1,21 +0,0 @@ -[Unit] -Description=Kubernetes Controller Manager -Documentation=https://github.com/GoogleCloudPlatform/kubernetes -Requires=deis-kube-apiserver.service -After=deis-kube-apiserver.service - -[Service] -EnvironmentFile=/etc/environment -ExecStartPre=/bin/bash -c "/opt/bin/download-k8s-binary kube-controller-manager" -ExecStartPre=/bin/bash -c "/opt/bin/wupiao $(/usr/bin/etcdctl get /deis/scheduler/k8s/master):8080" -ExecStart=/opt/bin/kube-controller-manager \ - --service_account_private_key_file=/opt/bin/kube-serviceaccount.key \ - --master=127.0.0.1:8080 \ - --pod_eviction_timeout=30s \ - --logtostderr=true -Restart=always -RestartSec=10 -SuccessExitStatus=2 - -[X-Fleet] -MachineOf=deis-kube-apiserver.service diff --git a/deisctl/units/deis-kube-kubelet.service b/deisctl/units/deis-kube-kubelet.service deleted file mode 100644 index f594833ec3..0000000000 --- a/deisctl/units/deis-kube-kubelet.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Kubernetes Kubelet -Documentation=https://github.com/GoogleCloudPlatform/kubernetes - -[Service] -EnvironmentFile=/etc/environment -ExecStartPre=/bin/bash -c "/opt/bin/download-k8s-binary kubelet" -ExecStartPre=/bin/bash -c "/opt/bin/wupiao $(/usr/bin/etcdctl get /deis/scheduler/k8s/master):8080" -ExecStartPre=/usr/bin/mkdir -p /opt/kubernetes/manifests/ -ExecStart=/bin/bash -c '/opt/bin/kubelet --address=0.0.0.0 --port=10250 --hostname_override=$COREOS_PRIVATE_IPV4 --api_servers=`/usr/bin/etcdctl get /deis/scheduler/k8s/master`:8080 --allow_privileged=true --cluster_dns=10.100.0.10 --cluster_domain=cluster.local --logtostderr=true --config=/opt/kubernetes/manifests/ --healthz_bind_address=0.0.0.0 --healthz_port=10248' -Restart=always -RestartSec=10 -WorkingDirectory=/root/ -SuccessExitStatus=2 - -[X-Fleet] -Global=true diff --git a/deisctl/units/deis-kube-proxy.service b/deisctl/units/deis-kube-proxy.service deleted file mode 100644 index 1f138de425..0000000000 --- a/deisctl/units/deis-kube-proxy.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=Kubernetes Proxy -Documentation=https://github.com/GoogleCloudPlatform/kubernetes - -[Service] -EnvironmentFile=/etc/environment -ExecStartPre=/bin/bash -c "/opt/bin/download-k8s-binary kube-proxy" -ExecStartPre=/bin/bash -c "/opt/bin/wupiao $(/usr/bin/etcdctl get /deis/scheduler/k8s/master):8080" -ExecStart=/bin/bash -c '/opt/bin/kube-proxy --master=`/usr/bin/etcdctl get /deis/scheduler/k8s/master`:8080 --logtostderr=true --healthz-bind-address=0.0.0.0' -Restart=always -RestartSec=10 -SuccessExitStatus=2 - -[X-Fleet] -Global=true diff --git a/deisctl/units/deis-kube-scheduler.service b/deisctl/units/deis-kube-scheduler.service deleted file mode 100644 index d8f1f46dfb..0000000000 --- a/deisctl/units/deis-kube-scheduler.service +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=Kubernetes Scheduler -Documentation=https://github.com/GoogleCloudPlatform/kubernetes -Requires=deis-kube-apiserver.service -After=deis-kube-apiserver.service - -[Service] -EnvironmentFile=/etc/environment -ExecStartPre=/bin/bash -c "/opt/bin/download-k8s-binary kube-scheduler" -ExecStartPre=/bin/bash -c "/opt/bin/wupiao $(/usr/bin/etcdctl get /deis/scheduler/k8s/master):8080" -ExecStart=/opt/bin/kube-scheduler \ - --master=127.0.0.1:8080 \ - --policy-config-file=/opt/bin/scheduler-policy.json -Restart=always -RestartSec=10 -SuccessExitStatus=2 - -[X-Fleet] -MachineOf=deis-kube-apiserver.service diff --git a/deisctl/units/deis-mesos-marathon.service b/deisctl/units/deis-mesos-marathon.service deleted file mode 100644 index 55de393857..0000000000 --- a/deisctl/units/deis-mesos-marathon.service +++ /dev/null @@ -1,23 +0,0 @@ -[Unit] -Description=Mesosphere Marathon -After=docker.service -Requires=docker.service - -[Service] -EnvironmentFile=/etc/environment -Restart=on-failure -RestartSec=20 -TimeoutStartSec=0 -ExecStartPre=-/bin/sh -c "etcdctl get /deis/scheduler/mesos/marathon >/dev/null 2>&1 || etcdctl mk /deis/scheduler/mesos/marathon" -ExecStartPre=/bin/sh -c "etcdctl set /deis/scheduler/mesos/marathon $COREOS_PRIVATE_IPV4" -ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/mesos-marathon` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE" -ExecStartPre=-/usr/bin/docker kill deis-mesos-marathon -ExecStartPre=-/usr/bin/docker rm deis-mesos-marathon -ExecStart=/usr/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/mesos-marathon` && docker run --name=deis-mesos-marathon --net=host -e HOST=$COREOS_PRIVATE_IPV4 $IMAGE" -ExecStop=-/usr/bin/docker stop deis-mesos-marathon - -[Install] -WantedBy=multi-user.target - -[X-Fleet] -MachineOf=deis-mesos-master.service diff --git a/deisctl/units/deis-mesos-master.service b/deisctl/units/deis-mesos-master.service deleted file mode 100644 index 4c837c8cfb..0000000000 --- a/deisctl/units/deis-mesos-master.service +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=Mesos master -After=docker.service -Requires=docker.service - -[Service] -EnvironmentFile=/etc/environment -Restart=on-failure -RestartSec=20 -TimeoutStartSec=0 -ExecStartPre=-/usr/bin/docker kill deis-mesos-master -ExecStartPre=-/usr/bin/docker rm deis-mesos-master -ExecStartPre=/bin/sh -c "docker inspect deis-mesos-master-data >/dev/null 2>&1 || docker run --name deis-mesos-master-data -v /tmp/mesos-master alpine:3.2 /bin/true" -ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/mesos-master` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE" -ExecStart=/usr/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/mesos-master` && docker run --volumes-from=deis-mesos-master-data --name=deis-mesos-master --privileged --net=host -e HOST=$COREOS_PRIVATE_IPV4 $IMAGE" -ExecStop=-/usr/bin/docker stop deis-mesos-master - -[Install] -WantedBy=multi-user.target diff --git a/deisctl/units/deis-mesos-slave.service b/deisctl/units/deis-mesos-slave.service deleted file mode 100644 index a7203d1301..0000000000 --- a/deisctl/units/deis-mesos-slave.service +++ /dev/null @@ -1,21 +0,0 @@ -[Unit] -Description=Mesos slave -After=docker.service -Requires=docker.service - -[Service] -EnvironmentFile=/etc/environment -Restart=on-failure -RestartSec=20 -TimeoutStartSec=0 -ExecStartPre=-/usr/bin/docker kill deis-mesos-slave -ExecStartPre=-/usr/bin/docker rm deis-mesos-slave -ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/mesos-slave` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE" -ExecStart=/usr/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/mesos-slave` && docker run --name=deis-mesos-slave --net=host --privileged -e HOST=$COREOS_PRIVATE_IPV4 -v /sys:/sys -v /usr/bin/docker:/usr/bin/docker:ro -v /var/run/docker.sock:/var/run/docker.sock -v /lib64/libdevmapper.so.1.02:/lib/libdevmapper.so.1.02:ro $IMAGE" -ExecStop=-/usr/bin/docker stop deis-mesos-slave - -[Install] -WantedBy=multi-user.target - -[X-Fleet] -Global=true diff --git a/deisctl/units/deis-swarm-manager.service b/deisctl/units/deis-swarm-manager.service deleted file mode 100644 index fc8705aa4f..0000000000 --- a/deisctl/units/deis-swarm-manager.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=deis-swarm-manager - -[Service] -EnvironmentFile=/etc/environment -TimeoutStartSec=20m -ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/swarm` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE" -ExecStartPre=/bin/sh -c "docker inspect deis-swarm-manager >/dev/null 2>&1 && docker rm -f deis-swarm-manager >/dev/null 2>&1 || true" -ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/swarm` && docker run --name deis-swarm-manager --rm -p 2395:2375 -e EXTERNAL_PORT=2395 -e HOST=$COREOS_PRIVATE_IPV4 -v /etc/environment_proxy:/etc/environment_proxy $IMAGE manage" -ExecStop=-/usr/bin/docker stop deis-swarm-manager -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target diff --git a/deisctl/units/deis-swarm-node.service b/deisctl/units/deis-swarm-node.service deleted file mode 100644 index 7745a7a03e..0000000000 --- a/deisctl/units/deis-swarm-node.service +++ /dev/null @@ -1,18 +0,0 @@ -[Unit] -Description=deis-swarm-node - -[Service] -EnvironmentFile=/etc/environment -TimeoutStartSec=20m -ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/swarm` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE" -ExecStartPre=/bin/sh -c "docker inspect deis-swarm-node >/dev/null 2>&1 && docker rm -f deis-swarm-node >/dev/null 2>&1 || true" -ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/swarm` && docker run --name deis-swarm-node --rm -e HOST=$COREOS_PRIVATE_IPV4 -v /etc/environment_proxy:/etc/environment_proxy $IMAGE join" -ExecStop=-/usr/bin/docker stop deis-swarm-node -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target - -[X-Fleet] -Global=true diff --git a/deisctl/units/deis-zookeeper.service b/deisctl/units/deis-zookeeper.service deleted file mode 100644 index a0f050b9a3..0000000000 --- a/deisctl/units/deis-zookeeper.service +++ /dev/null @@ -1,22 +0,0 @@ -[Unit] -Description=Zookeeper -After=docker.service -Requires=docker.service - -[Service] -EnvironmentFile=/etc/environment -Restart=on-failure -RestartSec=20 -TimeoutStartSec=0 -ExecStartPre=/bin/sh -c "docker inspect zookeeper-data >/dev/null 2>&1 || docker run --name zookeeper-data -v /opt/zookeeper-data alpine:3.2 /bin/true" -ExecStartPre=-/usr/bin/docker kill deis-zookeeper -ExecStartPre=-/usr/bin/docker rm deis-zookeeper -ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/zookeeper` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE" -ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/zookeeper` && docker run -e EXTERNAL_PORT=2181 -e HOST=$COREOS_PRIVATE_IPV4 -e LOG_LEVEL=debug --net=host --rm --name deis-zookeeper --volumes-from=zookeeper-data $IMAGE" -ExecStop=-/usr/bin/docker stop deis-zookeeper - -[Install] -WantedBy=multi-user.target - -[X-Fleet] -Global=true diff --git a/deisctl/units/units.go b/deisctl/units/units.go index df0c1ab30a..05f67412de 100644 --- a/deisctl/units/units.go +++ b/deisctl/units/units.go @@ -16,17 +16,6 @@ var Names = []string{ "deis-store-metadata", "deis-store-monitor", "deis-store-volume", - "deis-swarm-manager", - "deis-swarm-node", - "deis-mesos-marathon", - "deis-mesos-master", - "deis-mesos-slave", - "deis-zookeeper", - "deis-kube-apiserver", - "deis-kube-controller-manager", - "deis-kube-kubelet", - "deis-kube-proxy", - "deis-kube-scheduler", } // URL is the GitHub url where these units can be refreshed from diff --git a/docs/customizing_deis/choosing-a-scheduler.rst b/docs/customizing_deis/choosing-a-scheduler.rst deleted file mode 100644 index 20757626ba..0000000000 --- a/docs/customizing_deis/choosing-a-scheduler.rst +++ /dev/null @@ -1,248 +0,0 @@ -:title: Choosing a Scheduler -:description: How to choose a scheduler backend for Deis. - - -.. _choosing_a_scheduler: - -Choosing a Scheduler -==================== - -The :ref:`scheduler` creates, starts, stops, and destroys each :ref:`container` -of your app. For example, a command such as ``deis scale web=3`` tells the -scheduler to run three containers from the Docker image for your app. - -Deis defaults to using the :ref:`fleet_scheduler`. Tech previews of schedulers based on -:ref:`Kubernetes `, :ref:`Mesos with Marathon `, and -:ref:`Swarm ` are available for testing. - -.. note:: - - If you are using a scheduler other than fleet, app containers will not be rescheduled if - deis-registry is unavailable. For more information, see `deis-registry issue 3619`_. - -Settings set by scheduler -------------------------- - -The following etcd keys are set by the scheduler module of the controller component. - -Some keys will exist only if a particular ``schedulerModule`` backend is enabled. - -=================================== ========================================================== -setting description -=================================== ========================================================== -/deis/scheduler/swarm/host the swarm manager's host IP address -/deis/scheduler/swarm/node used to identify other nodes in the cluster -/deis/scheduler/mesos/marathon used to identify Marathon framework's host IP address -/deis/scheduler/k8s/master used to identify host IP address of kubernetes ApiService -=================================== ========================================================== - - -Settings used by scheduler --------------------------- - -The following etcd keys are used by the scheduler module of the controller component. - -==================================== =============================================== -setting description -==================================== =============================================== -/deis/controller/schedulerModule scheduler backend, either "fleet" or "swarm" or - "mesos_marathon" or "k8s" (default: "fleet") -==================================== =============================================== - -.. _fleet_scheduler: - -Fleet Scheduler ---------------- - -`fleet`_ is a scheduling backend included with CoreOS: - - fleet ties together systemd and etcd into a distributed init system. Think of - it as an extension of systemd that operates at the cluster level instead of the - machine level. This project is very low level and is designed as a foundation - for higher order orchestration. - -``fleetd`` is already running on the machines provisioned for Deis: no additional -configuration is needed. Commands such as ``deis ps:restart web.1`` or -``deis scale cmd=10`` will use `fleet`_ by default to manage app containers. - -To use the Fleet Scheduler backend explicitly, set the controller's -``schedulerModule`` to "fleet": - -.. code-block:: console - - $ deisctl config controller set schedulerModule=fleet - -.. _k8s_scheduler: - -Kubernetes Scheduler --------------------- - -.. important:: - - The Kubernetes Scheduler is a technology preview and is not recommended for production use. - Since it requires overlay networking, Kubernetes can only be enabled on a new cluster. - -`Kubernetes`_ is an orchestration system for Docker containers: - - Kubernetes (k8s) provides APIs to manage, deploy and scale Docker containers. Kubernetes - deploys containers as `pods`_, providing a unique entity across a cluster, but allowing - containers within the pod to share a namespace. - -Kubernetes requires the `flannel`_ overlay network so each pod receives a unique IP address within -the cluster. Existing Deis clusters cannot simply turn on overlay networking. Instead, provision -a new cluster to enable `flannel`_. - -To test the Kubernetes Scheduler, first install and start the Kubernetes components: - -.. code-block:: console - - $deisctl install k8s && deisctl start k8s - -Then set the controller's ``schedulerModule`` to "k8s": - -.. code-block:: console - - $ deisctl config controller set schedulerModule=k8s - -The Kubernetes scheduler is now active. Commands such as ``deis destroy`` or ``deis scale web=9`` -will use the Kubernetes ApiServer to manage app pods. - -Deis creates a `replication controller`_ to manage pods and a `service`_ which proxies traffic to -the pods for your app. Unlike other Deis schedulers, new app releases on Kubernetes do a rolling -deploy: pods with the new release replace old pods one at a time, until all are replaced (or until -an error forces a rollback to the previous release). - -.. note:: - - **Known Issues** - - - The flannel overlay network is not backward-compatible with earlier Deis clusters, since it - changes Docker networking and requires new units from Deis' user-data file. - - The Kubernetes ApiServer is not HA. If the ApiServer is rescheduled, it will reschedule all - Kubernetes units. - - Kubernetes implements resource-based scheduling. Specifying limits will create a reservation - of that resource on the node. - -.. _mesos_scheduler: - -Mesos with Marathon framework ------------------------------ - -.. important:: - - The Mesos with Marathon framework Scheduler is a technology preview and is not recommended for - production use. - -`Mesos`_ is a distributed system kernel: - - Mesos provides APIs for resource management and scheduling. A framework interacts with Mesos master - and schedules and task. A Zookeeper cluster elects Mesos master node. Mesos slaves are installed on - each node and they communicate to master with available resources. - -`Marathon`_ is a Mesos_ framework for long running applications: - - Marathon provides a Paas like feel for long running applications and features like high-availablilty, host constraints, - service discovery, load balancing and REST API to control your Apps. - -Deis uses the Marathon framework to schedule containers. Since Marathon is a framework for long-running -jobs, Deis uses the :ref:`fleet_scheduler` to run batch processing jobs. ``deisctl`` installs a standalone Mesos -cluster. To install an HA Mesos cluster, follow the directions at `aledbf-mesos`_, and set the etcd key -``/deis/scheduler/mesos/marathon`` to any Marathon node IP address. If a request is received by a regular -Marathon node, it is proxied to the master Marathon node. - -To test the Marathon Scheduler backend, first install and start the mesos components: - -.. code-block:: console - - $ deisctl install mesos && deisctl start mesos - -Then set the controller's ``schedulerModule`` to "mesos_marathon": - -.. code-block:: console - - $ deisctl config controller set schedulerModule=mesos_marathon - -The Marathon framework is now active. Commands such as ``deis destroy`` or -``deis scale web=9`` will use `Marathon`_ to manage app containers. - -Deis starts Marathon on port 8180. You can manage apps through the Marathon UI, which is accessible at http://:8180 - -.. note:: - - **Known Issues** - - - deisctl installs a standalone mesos cluster as fleet doesn't support runtime change to metadata. - You can specify this in cloud-init during the deployment of the node. keep watching `dynamic metadata fleet PR 1077`_. - - If you want to access Marathon UI, you'll have to expose port 8180 in the security group settings. - This is blocked off by default for security purposes. - - Deis does not yet use Marathon's docker container API to create containers. - - CPU shares are integers representing the number of CPUs. Memory limits should be specified in MB. - -.. _swarm_scheduler: - -Swarm Scheduler ---------------- - -.. important:: - - The Swarm Scheduler is a technology preview and is not recommended for - production use. - -`swarm`_ is a scheduling backend for Docker: - - Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts - into a single, virtual host. - -.. - - Swarm serves the standard Docker API, so any tool which already communicates - with a Docker daemon can use Swarm to transparently scale to multiple hosts... - -Deis includes an enhanced version of swarm v0.2.0 with node failover and optimized -locking on container creation. The Swarm Scheduler uses a `soft affinity`_ filter -to spread app containers out among available machines. - -Swarm requires the Docker Remote API to be available at TCP port 2375. If you are -upgrading an earlier installation of Deis, please refer to the CoreOS documentation -to `enable the remote API`_. - -.. note:: - - **Known Issues** - - - It is not yet possible to change the default affinity filter. - -To test the Swarm Scheduler backend, first install and start the swarm components: - -.. code-block:: console - - $ deisctl install swarm && deisctl start swarm - -Then set the controller's ``schedulerModule`` to "swarm": - -.. code-block:: console - - $ deisctl config controller set schedulerModule=swarm - -The Swarm Scheduler is now active. Commands such as ``deis destroy`` or -``deis scale web=9`` will use `swarm`_ to manage app containers. - -To monitor Swarm Scheduler operations, watch the logs of the swarm-manager -component, or spy on Docker events directly on the swarm-manager machine: - - -.. _Kubernetes: http://kubernetes.io/ -.. _Mesos: http://mesos.apache.org -.. _Marathon: https://github.com/mesosphere/marathon -.. _pods: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/user-guide/pods.md -.. _replication controller: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/user-guide/replication-controller.md -.. _service: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/user-guide/services.md -.. _flannel: https://github.com/coreos/flannel -.. _fleet: https://github.com/coreos/fleet#fleet---a-distributed-init-system -.. _swarm: https://github.com/docker/swarm#swarm-a-docker-native-clustering-system -.. _`soft affinity`: https://docs.docker.com/swarm/scheduler/filter/#soft-affinitiesconstraints -.. _`enable the remote API`: https://coreos.com/docs/launching-containers/building/customizing-docker/ -.. _`deis-kubernetes issue 3850`: https://github.com/deis/deis/issues/3850 -.. _`dynamic metadata fleet PR 1077`: https://github.com/coreos/fleet/pull/1077 -.. _`aledbf-mesos`: https://github.com/aledbf/coreos-mesos-zookeeper -.. _`deis-registry issue 3619`: https://github.com/deis/deis/issues/3619 diff --git a/docs/customizing_deis/controller_settings.rst b/docs/customizing_deis/controller_settings.rst index 48f66b63bb..9b34f47cdb 100644 --- a/docs/customizing_deis/controller_settings.rst +++ b/docs/customizing_deis/controller_settings.rst @@ -41,7 +41,6 @@ The following etcd keys are used by the controller component. setting description ==================================== ====================================================== /deis/controller/registrationMode set registration to "enabled", "disabled", or "admin_only" (default: "enabled") -/deis/controller/schedulerModule scheduler backend (default: "fleet") /deis/controller/subdomain subdomain used by the router for API requests (default: "deis") /deis/controller/webEnabled enable controller web UI (default: 0) /deis/controller/workers number of web worker processes (default: CPU cores * 2 + 1) diff --git a/docs/customizing_deis/index.rst b/docs/customizing_deis/index.rst index 37051d3bfa..98dfbef8d6 100644 --- a/docs/customizing_deis/index.rst +++ b/docs/customizing_deis/index.rst @@ -11,7 +11,6 @@ Customizing Deis .. toctree:: - choosing-a-scheduler cli-plugins builder_settings controller_settings diff --git a/docs/installing_deis/system-requirements.rst b/docs/installing_deis/system-requirements.rst index 71e391d812..0752a5411e 100644 --- a/docs/installing_deis/system-requirements.rst +++ b/docs/installing_deis/system-requirements.rst @@ -33,10 +33,9 @@ in component failures, issues with etcd/fleet, and other problems. Cluster size ------------ -For :ref:`scheduling ` and the :ref:`deis-store ` components -to work properly, clusters must have at least three nodes. The ``etcd`` service must always -be able to obtain a quorum, and the Ceph data store must maintain at least three replicas -of persistent data. +For the :ref:`deis-store ` component to work properly, clusters must have at least +three nodes. The ``etcd`` service must always be able to obtain a quorum, and the Ceph +data store must maintain at least three replicas of persistent data. See `optimal etcd cluster size`_ and `etcd disaster recovery`_ for further information. diff --git a/docs/managing_deis/isolating-planes.rst b/docs/managing_deis/isolating-planes.rst index 827c924bc0..de61dc39b6 100644 --- a/docs/managing_deis/isolating-planes.rst +++ b/docs/managing_deis/isolating-planes.rst @@ -105,15 +105,5 @@ the metadata that describes where each unit may be hosted. $ deisctl config platform set enablePlacementOptions=true -Alternate schedulers --------------------- - -Recent versions of Deis ship with -:ref:`technology previews ` that permit the use of -alternate schedulers such as Swarm or Mesos with Marathon. - -If opting into both isolated planes and an alternate scheduler, units for the -alternate scheduler's agents (a Mesos slave process, for instance) will be -decorated appropriately to isolate them to the Data Plane. .. _`More details on Fleet metadata`: https://coreos.com/fleet/docs/latest/unit-files-and-scheduling.html#fleet-specific-options diff --git a/docs/reference/server/scheduler.rst b/docs/reference/server/scheduler.rst index dbb03f1bfe..172395be65 100644 --- a/docs/reference/server/scheduler.rst +++ b/docs/reference/server/scheduler.rst @@ -26,9 +26,3 @@ scheduler.states .. contents:: :local: .. automodule:: scheduler.states - -scheduler.swarm ---------------- -.. contents:: - :local: -.. automodule:: scheduler.swarm diff --git a/docs/reference/terms/scheduler.rst b/docs/reference/terms/scheduler.rst index a215028b8c..3b82ca118a 100644 --- a/docs/reference/terms/scheduler.rst +++ b/docs/reference/terms/scheduler.rst @@ -15,9 +15,8 @@ The scheduler must decide which machines are eligible to run these container jobs. Scheduler backends vary in the details of their job allocation policies and whether or not they are resource-aware, among other features. -The Deis scheduler is implemented in the :ref:`controller` component. The -scheduler implementation (or "backend") can be changed dynamically to support -different strategies or cluster types. +The Deis scheduler client is implemented in the :ref:`controller` component. +Deis uses `Fleet`_ to schedule the containers across the cluster. -Follow the :ref:`choosing_a_scheduler` guide to learn about available -options for the Deis scheduler. + +.. _`Fleet`: https://github.com/coreos/fleet diff --git a/docs/understanding_deis/components.rst b/docs/understanding_deis/components.rst index 782366b8ff..904ecaafa0 100644 --- a/docs/understanding_deis/components.rst +++ b/docs/understanding_deis/components.rst @@ -14,7 +14,7 @@ Each Deis component is deployed as a container or set of containers. Controller ---------- The controller component is an HTTP API server. Among other functions, the -controller contains :ref:`the scheduler `, which decides +controller contains :ref:`the scheduler `, which decides where to run app containers. The ``deis`` command-line client interacts with this component. diff --git a/mesos/Makefile b/mesos/Makefile deleted file mode 100644 index f084bcd79f..0000000000 --- a/mesos/Makefile +++ /dev/null @@ -1,134 +0,0 @@ -include ../includes.mk - -REPO = deis -MESOS = 0.22.1-1.0.ubuntu1404 -ZOOKEEPER_VERSION = 3.5.0 -MARATHON_VERSION = 0.8.2-RC3 - -repo_path = github.com/deis/deis/mesos - -GO = godep go -GOFMT = gofmt -l -GOLINT = golint -GOTEST = $(GO) test -cover -race -v -GOVET = $(GO) vet - -COMPONENT = $(notdir $(repo_path)) -GO_PACKAGES = pkg/boot pkg/confd pkg/etcd pkg/fleet pkg/log pkg/net pkg/os pkg/types -GO_PACKAGES_REPO_PATH = $(addprefix $(repo_path)/,$(GO_PACKAGES)) - -SHELL_SCRIPTS = $(shell find "." -name '*.sh') - -MASTER_IMAGE = $(IMAGE_PREFIX)mesos-master:$(BUILD_TAG) -MASTER_DEV_IMAGE = $(REGISTRY)$(MASTER_IMAGE) -MARATHON_IMAGE = $(IMAGE_PREFIX)mesos-marathon:$(BUILD_TAG) -MARATHON_DEV_IMAGE = $(REGISTRY)$(MARATHON_IMAGE) -SLAVE_IMAGE = $(IMAGE_PREFIX)mesos-slave:$(BUILD_TAG) -SLAVE_DEV_IMAGE = $(REGISTRY)$(SLAVE_IMAGE) -ZOOKEEPER_IMAGE = $(IMAGE_PREFIX)zookeeper:$(BUILD_TAG) -ZOOKEEPER_DEV_IMAGE = $(REGISTRY)$(ZOOKEEPER_IMAGE) - -build: test-style zookeeper-go mesos-template mesos-master mesos-slave mesos-marathon zookeeper - -install: check-deisctl - deisctl install $(COMPONENT) - -uninstall: check-deisctl - deisctl uninstall $(COMPONENT) - -start: check-deisctl - deisctl start $(COMPONENT) - -stop: check-deisctl - deisctl stop $(COMPONENT) - -restart: stop start - -run: install start - -dev-release: push set-image - -push: check-registry - docker tag -f $(MASTER_IMAGE) $(MASTER_DEV_IMAGE) - docker push $(MASTER_DEV_IMAGE) - docker tag -f $(SLAVE_IMAGE) $(SLAVE_DEV_IMAGE) - docker push $(SLAVE_DEV_IMAGE) - docker tag -f $(MARATHON_IMAGE) $(MARATHON_DEV_IMAGE) - docker push $(MARATHON_DEV_IMAGE) - docker tag -f $(ZOOKEEPER_IMAGE) $(ZOOKEEPER_DEV_IMAGE) - docker push $(ZOOKEEPER_DEV_IMAGE) - -set-image: check-deisctl - deisctl config mesos-master set image=$(MASTER_DEV_IMAGE) - deisctl config mesos-slave set image=$(SLAVE_DEV_IMAGE) - deisctl config mesos-marathon set image=$(MARATHON_DEV_IMAGE) - deisctl config zookeeper set image=$(ZOOKEEPER_DEV_IMAGE) - -release: - docker push $(MASTER_IMAGE) - docker push $(SLAVE_IMAGE) - docker push $(MARATHON_IMAGE) - docker push $(ZOOKEEPER_IMAGE) - -deploy: build dev-release restart - -setup-gotools: - go get -u github.com/jteeuwen/go-bindata/... - -mesos-go: setup-gotools - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 godep go build -a -installsuffix cgo -ldflags '-s' -o bin/master-boot pkg/boot/mesos/master/main.go - @$(call check-static-binary,bin/master-boot) - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 godep go build -a -installsuffix cgo -ldflags '-s' -o bin/slave-boot pkg/boot/mesos/slave/main.go - @$(call check-static-binary,bin/slave-boot) - go-bindata -pkg bindata -o bindata/marathon/bindata.go pkg/boot/mesos/marathon/bash/; \ - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 godep go build -a -installsuffix cgo -ldflags '-s' -o bin/marathon-boot pkg/boot/mesos/marathon/main.go - @$(call check-static-binary,bin/marathon-boot) - -mesos-template: - sed "s/#VERSION#/$(MESOS)/g" template > Dockerfile - docker build -t $(IMAGE_PREFIX)$@:$(BUILD_TAG) . - rm -f Dockerfile - -mesos-master: mesos-go mesos-template - sed "s@#PREFIX#@$(IMAGE_PREFIX)@;s/#VERSION#/$(BUILD_TAG)/g" master > Dockerfile - docker build -t $(IMAGE_PREFIX)$@:$(BUILD_TAG) . - rm -f Dockerfile - -mesos-slave: mesos-go mesos-template - sed "s@#PREFIX#@$(IMAGE_PREFIX)@;s/#VERSION#/$(BUILD_TAG)/g" slave > Dockerfile - docker build -t $(IMAGE_PREFIX)$@:$(BUILD_TAG) . - rm -f Dockerfile - -build-mesos-marathon: mesos-template - sed "s/#MARATHON_VERSION#/$(MARATHON_VERSION)/;s@#PREFIX#@$(IMAGE_PREFIX)@;s/#VERSION#/$(BUILD_TAG)/g" build-marathon > Dockerfile - docker build -t $(IMAGE_PREFIX)$@:$(BUILD_TAG) . - rm -f Dockerfile - -mesos-marathon: mesos-go build-mesos-marathon - cp marathon Dockerfile - docker cp `docker create $(IMAGE_PREFIX)build-mesos-marathon:$(BUILD_TAG) /bin/bash`:/marathon/target/marathon-assembly-$(MARATHON_VERSION).jar . - mv marathon-assembly-$(MARATHON_VERSION).jar marathon-assembly.jar - sed "s/#MARATHON_VERSION#/$(MARATHON_VERSION)/;s@#PREFIX#@$(IMAGE_PREFIX)@;s/#VERSION#/$(BUILD_TAG)/" marathon > Dockerfile - docker build -t $(IMAGE_PREFIX)$@:$(BUILD_TAG) . - rm -f Dockerfile - -zookeeper: zookeeper-go - docker build -t $(IMAGE_PREFIX)$@:$(BUILD_TAG) zookeeper/. - -zookeeper-go: - echo "Building..." - go-bindata -pkg bindata -o bindata/zookeeper/bindata.go pkg/boot/zookeeper/bash/; \ - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 godep go build -a -installsuffix cgo -ldflags '-s' -o zookeeper/bin/boot pkg/boot/zookeeper/main/boot.go - @$(call check-static-binary,zookeeper/bin/boot) - -test: mesos-go zookeeper-go - @$(GOFMT) -timeout 10s $(GO_PACKAGES) - -test-style: - @$(GOFMT) $(GO_PACKAGES) - @$(GOFMT) $(GO_PACKAGES) | read; if [ $$? == 0 ]; then echo "gofmt check failed."; exit 1; fi - $(GOVET) $(GO_PACKAGES_REPO_PATH) - @for i in $(addsuffix /...,$(GO_PACKAGES)); do \ - $(GOLINT) $$i; \ - done - shellcheck $(SHELL_SCRIPTS) diff --git a/mesos/README.md b/mesos/README.md deleted file mode 100644 index 6645b1e670..0000000000 --- a/mesos/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Mesos with Marathon Framework - -[Marathon Framework](https://github.com/mesosphere/marathon) components for use as -an optional scheduler in Deis, the open source PaaS. - -## Usage - -Please consult the [Mesos with Marathon framework](http://docs.deis.io/en/latest/customizing_deis/choosing-a-scheduler/#mesos-with-marathon-framework) -for instructions on installing and activating Mesos with Marathon Framework in Deis. - -## License - -© 2015 Engine Yard, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); you may -not use this file except in compliance with the License. You may obtain -a copy of the License at - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/mesos/build-marathon b/mesos/build-marathon deleted file mode 100644 index 7de576751d..0000000000 --- a/mesos/build-marathon +++ /dev/null @@ -1,16 +0,0 @@ -FROM #PREFIX#mesos-template:#VERSION# - -ENV DEBIAN_FRONTEND noninteractive -ENV MARATHON_VERSION=#MARATHON_VERSION# - -COPY build-marathon-jar.sh /tmp/build.sh - -RUN DOCKER_BUILD=true /tmp/build.sh - -COPY bin/marathon-boot /app/bin/boot - -WORKDIR /app - -EXPOSE 8080 - -ENTRYPOINT ["/app/bin/boot"] diff --git a/mesos/build-marathon-jar.sh b/mesos/build-marathon-jar.sh deleted file mode 100755 index 88a140a90e..0000000000 --- a/mesos/build-marathon-jar.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bash - -# fail on any command exiting non-zero -set -eo pipefail - -if [[ -z $DOCKER_BUILD ]]; then - echo - echo "Note: this script is intended for use by the Dockerfile and not as a way to build marathon locally" - echo - exit 1 -fi - -# shellcheck disable=SC2034 -DEBIAN_FRONTEND=noninteractive - -apt-get update && apt-get install --no-install-recommends -y \ - openjdk-7-jdk \ - scala \ - curl - -curl -SsL -O http://dl.bintray.com/sbt/debian/sbt-0.13.5.deb && \ - dpkg -i sbt-0.13.5.deb - -curl -sSL "https://github.com/mesosphere/marathon/archive/v$MARATHON_VERSION.tar.gz" | tar -xzf - -C /opt -ln -s "/opt/marathon-$MARATHON_VERSION" /app -ln -s "/opt/marathon-$MARATHON_VERSION" /marathon - -cd /app - -# Word splitting wanted in this situation. -# shellcheck disable=SC2046 -sbt assembly && \ - mv $(find target -name 'marathon-assembly-*.jar' | sort | tail -1) ./ && \ - rm -rf target/* ~/.sbt ~/.ivy2 && \ - mv marathon-assembly-*.jar target - -# cleanup. indicate that python, libpq and libyanl are required packages. -apt-get clean -y && \ - rm -rf /tmp/* /var/tmp/* && \ - rm -rf /var/lib/apt/lists/* diff --git a/mesos/build-marathon.sh b/mesos/build-marathon.sh deleted file mode 100755 index 125012e9a1..0000000000 --- a/mesos/build-marathon.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# fail on any command exiting non-zero -set -eo pipefail - -if [[ -z $DOCKER_BUILD ]]; then - echo - echo "Note: this script is intended for use by the Dockerfile and not as a way to build zoopeeper locally" - echo - exit 1 -fi - -apt-get update && apt-get install -y curl - -cd /tmp - -mkdir -p /opt - -curl -sSL "https://github.com/mesosphere/marathon/archive/v$MARATHON_VERSION.tar.gz" | tar -xzf - -C /opt -ln -s "/opt/marathon-$MARATHON_VERSION" /app -ln -s "/opt/marathon-$MARATHON_VERSION" /marathon - -mkdir -p "/opt/marathon-$MARATHON_VERSION/target" -ln -s "/marathon-assembly.jar" "/opt/marathon-$MARATHON_VERSION/target/marathon-assembly-$MARATHON_VERSION.jar" - -apt-get autoremove -y --purge && \ - apt-get clean -y && \ - rm -Rf /usr/share/man /usr/share/doc && \ - rm -rf /tmp/* /var/tmp/* && \ - rm -rf /var/lib/apt/lists/* diff --git a/mesos/build-mesos.sh b/mesos/build-mesos.sh deleted file mode 100755 index f5ac783760..0000000000 --- a/mesos/build-mesos.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash - -# fail on any command exiting non-zero -set -eo pipefail - -if [[ -z $DOCKER_BUILD ]]; then - echo - echo "Note: this script is intended for use by the Dockerfile and not as a way to build mesos locally" - echo - exit 1 -fi - -# shellcheck disable=SC2034 -DEBIAN_FRONTEND=noninteractive - -echo "deb http://repos.mesosphere.io/ubuntu/ trusty main" > /etc/apt/sources.list.d/mesosphere.list - -apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF - -apt-get update && \ - apt-get -y install mesos="$MESOS" - -apt-get autoremove -y --purge && \ - apt-get clean -y && \ - rm -Rf /usr/share/man /usr/share/doc && \ - rm -rf /tmp/* /var/tmp/* && \ - rm -rf /var/lib/apt/lists/* diff --git a/mesos/marathon b/mesos/marathon deleted file mode 100644 index 7dffd87e6e..0000000000 --- a/mesos/marathon +++ /dev/null @@ -1,15 +0,0 @@ -FROM #PREFIX#mesos-template:#VERSION# - -EXPOSE 8080 - -COPY marathon-assembly.jar /marathon-assembly.jar - -COPY build-marathon.sh /tmp/build.sh - -COPY bin/marathon-boot /app/bin/boot - -RUN DOCKER_BUILD=true MARATHON_VERSION=#MARATHON_VERSION# /tmp/build.sh - -WORKDIR /app - -ENTRYPOINT ["/app/bin/boot"] diff --git a/mesos/master b/mesos/master deleted file mode 100644 index 119e9bf520..0000000000 --- a/mesos/master +++ /dev/null @@ -1,5 +0,0 @@ -FROM #PREFIX#mesos-template:#VERSION# - -COPY bin/master-boot /app/bin/boot - -ENTRYPOINT ["/app/bin/boot"] diff --git a/mesos/pkg/boot/extpoints/extpoints.go b/mesos/pkg/boot/extpoints/extpoints.go deleted file mode 100644 index 5667530c6d..0000000000 --- a/mesos/pkg/boot/extpoints/extpoints.go +++ /dev/null @@ -1,177 +0,0 @@ -// generated by go-extpoints -- DO NOT EDIT -package extpoints - -import ( - "reflect" - "runtime" - "strings" - "sync" -) - -var extRegistry = ®istryType{m: make(map[string]*extensionPoint)} - -type registryType struct { - sync.Mutex - m map[string]*extensionPoint -} - -// Top level registration - -func extensionTypes(extension interface{}) []string { - var ifaces []string - typ := reflect.TypeOf(extension) - for name, ep := range extRegistry.m { - if ep.iface.Kind() == reflect.Func && typ.AssignableTo(ep.iface) { - ifaces = append(ifaces, name) - } - if ep.iface.Kind() != reflect.Func && typ.Implements(ep.iface) { - ifaces = append(ifaces, name) - } - } - return ifaces -} - -func RegisterExtension(extension interface{}, name string) []string { - extRegistry.Lock() - defer extRegistry.Unlock() - var ifaces []string - for _, iface := range extensionTypes(extension) { - if extRegistry.m[iface].register(extension, name) { - ifaces = append(ifaces, iface) - } - } - return ifaces -} - -func UnregisterExtension(name string) []string { - extRegistry.Lock() - defer extRegistry.Unlock() - var ifaces []string - for iface, extpoint := range extRegistry.m { - if extpoint.unregister(name) { - ifaces = append(ifaces, iface) - } - } - return ifaces -} - -// Base extension point - -type extensionPoint struct { - sync.Mutex - iface reflect.Type - extensions map[string]interface{} -} - -func newExtensionPoint(iface interface{}) *extensionPoint { - ep := &extensionPoint{ - iface: reflect.TypeOf(iface).Elem(), - extensions: make(map[string]interface{}), - } - extRegistry.Lock() - extRegistry.m[ep.iface.Name()] = ep - extRegistry.Unlock() - return ep -} - -func (ep *extensionPoint) lookup(name string) interface{} { - ep.Lock() - defer ep.Unlock() - ext, ok := ep.extensions[name] - if !ok { - return nil - } - return ext -} - -func (ep *extensionPoint) all() map[string]interface{} { - ep.Lock() - defer ep.Unlock() - all := make(map[string]interface{}) - for k, v := range ep.extensions { - all[k] = v - } - return all -} - -func (ep *extensionPoint) register(extension interface{}, name string) bool { - ep.Lock() - defer ep.Unlock() - if name == "" { - typ := reflect.TypeOf(extension) - if typ.Kind() == reflect.Func { - nameParts := strings.Split(runtime.FuncForPC( - reflect.ValueOf(extension).Pointer()).Name(), ".") - name = nameParts[len(nameParts)-1] - } else { - name = typ.Elem().Name() - } - } - _, exists := ep.extensions[name] - if exists { - return false - } - ep.extensions[name] = extension - return true -} - -func (ep *extensionPoint) unregister(name string) bool { - ep.Lock() - defer ep.Unlock() - _, exists := ep.extensions[name] - if !exists { - return false - } - delete(ep.extensions, name) - return true -} - -// BootComponent - -var BootComponents = &bootComponentExt{ - newExtensionPoint(new(BootComponent)), -} - -type bootComponentExt struct { - *extensionPoint -} - -func (ep *bootComponentExt) Unregister(name string) bool { - return ep.unregister(name) -} - -func (ep *bootComponentExt) Register(extension BootComponent, name string) bool { - return ep.register(extension, name) -} - -func (ep *bootComponentExt) Lookup(name string) BootComponent { - ext := ep.lookup(name) - if ext == nil { - return nil - } - return ext.(BootComponent) -} - -func (ep *bootComponentExt) Select(names []string) []BootComponent { - var selected []BootComponent - for _, name := range names { - selected = append(selected, ep.Lookup(name)) - } - return selected -} - -func (ep *bootComponentExt) All() map[string]BootComponent { - all := make(map[string]BootComponent) - for k, v := range ep.all() { - all[k] = v.(BootComponent) - } - return all -} - -func (ep *bootComponentExt) Names() []string { - var names []string - for k := range ep.all() { - names = append(names, k) - } - return names -} diff --git a/mesos/pkg/boot/extpoints/interfaces.go b/mesos/pkg/boot/extpoints/interfaces.go deleted file mode 100644 index c9851ee3ec..0000000000 --- a/mesos/pkg/boot/extpoints/interfaces.go +++ /dev/null @@ -1,42 +0,0 @@ -package extpoints - -import ( - "github.com/deis/deis/mesos/pkg/types" -) - -// BootComponent interface that defines the steps -// required to initialize a component -type BootComponent interface { - // EtcdDefaults required initial values in etcd - EtcdDefaults() map[string]string - - // MkdirsEtcd required directories in etcd - MkdirsEtcd() []string - - // PreBoot custom pre-boot task (custom go code) - PreBoot(currentBoot *types.CurrentBoot) - - // PreBootScripts scripts to execute before the component starts - PreBootScripts(currentBoot *types.CurrentBoot) []*types.Script - - // UseConfd is required the use of confd? - UseConfd() (bool, bool) - - // BootDaemons required commands to start the component - BootDaemons(currentBoot *types.CurrentBoot) []*types.ServiceDaemon - - // WaitForPorts ports that must be open to indicate that the component is running - WaitForPorts() []int - - // PostBootScripts scripts to execute after the component starts - PostBootScripts(currentBoot *types.CurrentBoot) []*types.Script - - // PostBoot custom post-boot task (custom go code) - PostBoot(currentBoot *types.CurrentBoot) - - // ScheduleTasks tasks that must run during the lifecycle of the component - ScheduleTasks(currentBoot *types.CurrentBoot) []*types.Cron - - // PreShutdownScripts scripts to execute before the component execution ends - PreShutdownScripts(currentBoot *types.CurrentBoot) []*types.Script -} diff --git a/mesos/pkg/boot/main.go b/mesos/pkg/boot/main.go deleted file mode 100644 index d7ac9f3ed3..0000000000 --- a/mesos/pkg/boot/main.go +++ /dev/null @@ -1,248 +0,0 @@ -//go:generate go-extpoints - -package boot - -import ( - "net/http" - _ "net/http/pprof" //pprof is used for profiling servers - "os" - "os/signal" - "runtime" - "strconv" - "strings" - "syscall" - "time" - - "github.com/deis/deis/mesos/pkg/boot/extpoints" - "github.com/deis/deis/mesos/pkg/confd" - "github.com/deis/deis/mesos/pkg/etcd" - logger "github.com/deis/deis/mesos/pkg/log" - "github.com/deis/deis/mesos/pkg/net" - oswrapper "github.com/deis/deis/mesos/pkg/os" - "github.com/deis/deis/mesos/pkg/types" - "github.com/deis/deis/version" - "github.com/robfig/cron" -) - -const ( - timeout time.Duration = 10 * time.Second - ttl time.Duration = timeout * 2 -) - -var ( - signalChan = make(chan os.Signal, 1) - log = logger.New() - bootProcess = extpoints.BootComponents - component extpoints.BootComponent -) - -func init() { - runtime.GOMAXPROCS(runtime.NumCPU()) -} - -// RegisterComponent register an externsion to be used with this application -func RegisterComponent(component extpoints.BootComponent, name string) bool { - return bootProcess.Register(component, name) -} - -// Start initiate the boot process of the current component -// etcdPath is the base path used to publish the component in etcd -// externalPort is the base path used to publish the component in etcd -func Start(etcdPath string, externalPort int) { - log.Infof("boot version [%v]", version.Version) - - go func() { - log.Debugf("starting pprof http server in port 6060") - http.ListenAndServe("localhost:6060", nil) - }() - - signal.Notify(signalChan, - syscall.SIGHUP, - syscall.SIGINT, - syscall.SIGKILL, - syscall.SIGTERM, - syscall.SIGQUIT, - os.Interrupt, - ) - - // Wait for a signal and exit - exitChan := make(chan int) - go func() { - for { - s := <-signalChan - log.Debugf("Signal received: %v", s) - switch s { - case syscall.SIGTERM: - exitChan <- 0 - case syscall.SIGQUIT: - exitChan <- 0 - case syscall.SIGKILL: - exitChan <- 1 - default: - exitChan <- 1 - } - } - }() - - component = bootProcess.Lookup("boot") - if component == nil { - log.Error("error loading boot extension...") - signalChan <- syscall.SIGINT - } - - host := oswrapper.Getopt("HOST", "127.0.0.1") - etcdPort, _ := strconv.Atoi(oswrapper.Getopt("ETCD_PORT", "4001")) - etcdPeers := oswrapper.Getopt("ETCD_PEERS", "127.0.0.1:"+strconv.Itoa(etcdPort)) - etcdClient := etcd.NewClient(etcd.GetHTTPEtcdUrls(host+":"+strconv.Itoa(etcdPort), etcdPeers)) - - etcdURL := etcd.GetHTTPEtcdUrls(host+":"+strconv.Itoa(etcdPort), etcdPeers) - - currentBoot := &types.CurrentBoot{ - ConfdNodes: getConfdNodes(host+":"+strconv.Itoa(etcdPort), etcdPeers), - EtcdClient: etcdClient, - EtcdPath: etcdPath, - EtcdPort: etcdPort, - EtcdPeers: etcdPeers, - EtcdURL: etcdURL, - Host: net.ParseIP(host), - Timeout: timeout, - TTL: timeout * 2, - Port: externalPort, - } - - // do the real work in a goroutine to be able to exit if - // a signal is received during the boot process - go start(currentBoot) - - code := <-exitChan - - // pre shutdown tasks - log.Debugf("executing pre shutdown scripts") - preShutdownScripts := component.PreShutdownScripts(currentBoot) - runAllScripts(signalChan, preShutdownScripts) - - log.Debugf("execution terminated with exit code %v", code) - os.Exit(code) -} - -func start(currentBoot *types.CurrentBoot) { - log.Info("starting component...") - - log.Debug("creating required etcd directories") - for _, key := range component.MkdirsEtcd() { - etcd.Mkdir(currentBoot.EtcdClient, key) - } - - log.Debug("setting default etcd values") - for key, value := range component.EtcdDefaults() { - etcd.SetDefault(currentBoot.EtcdClient, key, value) - } - - // component.PreBoot(currentBoot) - - initial, daemon := component.UseConfd() - if initial { - // wait for confd to run once and install initial templates - log.Debug("waiting for initial confd configuration") - confd.WaitForInitialConf(currentBoot.ConfdNodes, currentBoot.Timeout) - } - - log.Debug("running preboot code") - component.PreBoot(currentBoot) - - log.Debug("running pre boot scripts") - preBootScripts := component.PreBootScripts(currentBoot) - runAllScripts(signalChan, preBootScripts) - - if daemon { - // spawn confd in the background to update services based on etcd changes - log.Debug("launching confd") - go confd.Launch(signalChan, currentBoot.ConfdNodes) - } - - log.Debug("running boot daemons") - servicesToStart := component.BootDaemons(currentBoot) - for _, daemon := range servicesToStart { - go oswrapper.RunProcessAsDaemon(signalChan, daemon.Command, daemon.Args) - } - - // if the returned ips contains the value contained in $HOST it means - // that we are running docker with --net=host - ipToListen := "0.0.0.0" - netIfaces := net.GetNetworkInterfaces() - for _, iface := range netIfaces { - if strings.Index(iface.IP, currentBoot.Host.String()) > -1 { - ipToListen = currentBoot.Host.String() - break - } - } - - portsToWaitFor := component.WaitForPorts() - log.Debugf("waiting for a service in the port %v in ip %v", portsToWaitFor, ipToListen) - for _, portToWait := range portsToWaitFor { - if portToWait > 0 { - err := net.WaitForPort("tcp", ipToListen, portToWait, timeout) - if err != nil { - log.Errorf("error waiting for port %v using ip %v: %v", portToWait, ipToListen, err) - signalChan <- syscall.SIGINT - } - } - } - - time.Sleep(60 * time.Second) - - // we only publish the service in etcd if the port if > 0 - if currentBoot.Port > 0 { - log.Debug("starting periodic publication in etcd...") - log.Debugf("etcd publication path %s, host %s and port %v", currentBoot.EtcdPath, currentBoot.Host, currentBoot.Port) - go etcd.PublishService(currentBoot.EtcdClient, currentBoot.EtcdPath+"/"+currentBoot.Host.String(), currentBoot.Host.String(), currentBoot.Port, uint64(ttl.Seconds()), timeout) - - // Wait for the first publication - time.Sleep(timeout / 2) - } - - log.Debug("running post boot scripts") - postBootScripts := component.PostBootScripts(currentBoot) - runAllScripts(signalChan, postBootScripts) - - log.Debug("checking for cron tasks...") - crons := component.ScheduleTasks(currentBoot) - _cron := cron.New() - for _, cronTask := range crons { - _cron.AddFunc(cronTask.Frequency, cronTask.Code) - } - _cron.Start() - - component.PostBoot(currentBoot) -} - -func getConfdNodes(host, etcdCtlPeers string) []string { - if etcdCtlPeers != "127.0.0.1:4001" { - hosts := strings.Split(etcdCtlPeers, ",") - result := []string{} - for _, _host := range hosts { - result = append(result, _host) - } - return result - } - - return []string{host} -} - -func runAllScripts(signalChan chan os.Signal, scripts []*types.Script) { - for _, script := range scripts { - if script.Params == nil { - script.Params = map[string]string{} - } - // add HOME variable to avoid warning from ceph commands - script.Params["HOME"] = "/tmp" - if log.Level.String() == "debug" { - script.Params["DEBUG"] = "true" - } - err := oswrapper.RunScript(script.Name, script.Params, script.Content) - if err != nil { - log.Errorf("script %v execution finished with error: %v", script.Name, err) - signalChan <- syscall.SIGTERM - } - } -} diff --git a/mesos/pkg/boot/mesos/marathon/bash/update-hosts-file.bash b/mesos/pkg/boot/mesos/marathon/bash/update-hosts-file.bash deleted file mode 100755 index 9d72fb76e9..0000000000 --- a/mesos/pkg/boot/mesos/marathon/bash/update-hosts-file.bash +++ /dev/null @@ -1,8 +0,0 @@ -set -eo pipefail - -# set debug based on envvar -[[ $DEBUG ]] && set -x - -main() { - echo "$HOST $(hostname)" >> /etc/hosts -} diff --git a/mesos/pkg/boot/mesos/marathon/main.go b/mesos/pkg/boot/mesos/marathon/main.go deleted file mode 100644 index 423d94cbf4..0000000000 --- a/mesos/pkg/boot/mesos/marathon/main.go +++ /dev/null @@ -1,116 +0,0 @@ -package main - -import ( - "strings" - - "github.com/deis/deis/mesos/bindata/marathon" - - "github.com/deis/deis/mesos/pkg/boot" - "github.com/deis/deis/mesos/pkg/etcd" - logger "github.com/deis/deis/mesos/pkg/log" - "github.com/deis/deis/mesos/pkg/os" - "github.com/deis/deis/mesos/pkg/types" -) - -const ( - mesosPort = 8180 -) - -var ( - etcdPath = os.Getopt("ETCD_PATH", "/mesos/marathon") - log = logger.New() -) - -func init() { - boot.RegisterComponent(new(MesosBoot), "boot") -} - -func main() { - boot.Start(etcdPath, mesosPort) -} - -// MesosBoot struct for mesos boot. -type MesosBoot struct{} - -// MkdirsEtcd creates a directory in etcd. -func (mb *MesosBoot) MkdirsEtcd() []string { - return []string{etcdPath} -} - -// EtcdDefaults returns default values for etcd. -func (mb *MesosBoot) EtcdDefaults() map[string]string { - return map[string]string{} -} - -// PreBootScripts runs preboot scripts. -func (mb *MesosBoot) PreBootScripts(currentBoot *types.CurrentBoot) []*types.Script { - params := make(map[string]string) - params["HOST"] = currentBoot.Host.String() - err := os.RunScript("pkg/boot/mesos/marathon/bash/update-hosts-file.bash", params, bindata.Asset) - if err != nil { - log.Printf("command finished with error: %v", err) - } - - return []*types.Script{} -} - -// PreBoot to log starting of marathon. -func (mb *MesosBoot) PreBoot(currentBoot *types.CurrentBoot) { - log.Info("mesos-marathon: starting...") -} - -// BootDaemons starts marathon. -func (mb *MesosBoot) BootDaemons(currentBoot *types.CurrentBoot) []*types.ServiceDaemon { - args := gatherArgs(currentBoot.EtcdClient) - log.Infof("mesos marathon args: %v", args) - return []*types.ServiceDaemon{&types.ServiceDaemon{Command: "/marathon/bin/start", Args: args}} -} - -// WaitForPorts returns an array of ports. -func (mb *MesosBoot) WaitForPorts() []int { - return []int{} -} - -// PostBootScripts returns type script. -func (mb *MesosBoot) PostBootScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -// PostBoot returns type script. -func (mb *MesosBoot) PostBoot(currentBoot *types.CurrentBoot) { - log.Info("mesos-marathon: running...") -} - -// ScheduleTasks returns a cron job. -func (mb *MesosBoot) ScheduleTasks(currentBoot *types.CurrentBoot) []*types.Cron { - return []*types.Cron{} -} - -// UseConfd uses confd. -func (mb *MesosBoot) UseConfd() (bool, bool) { - return false, false -} - -// PreShutdownScripts returns type script. -func (mb *MesosBoot) PreShutdownScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -func gatherArgs(c *etcd.Client) []string { - var args []string - - nodes := etcd.GetList(c, "/zookeeper/nodes") - var hosts []string - for _, node := range nodes { - hosts = append(hosts, node+":3888") - } - zkHosts := strings.Join(hosts, ",") - args = append(args, "--master", "zk://"+zkHosts+"/mesos") - args = append(args, "--zk", "zk://"+zkHosts+"/marathon") - // 20min task launch timeout for large docker image pulls - args = append(args, "--task_launch_timeout", "1200000") - args = append(args, "--ha") - args = append(args, "--http_port", "8180") - - return args -} diff --git a/mesos/pkg/boot/mesos/master/main.go b/mesos/pkg/boot/mesos/master/main.go deleted file mode 100644 index 87f2f00c62..0000000000 --- a/mesos/pkg/boot/mesos/master/main.go +++ /dev/null @@ -1,106 +0,0 @@ -package main - -import ( - "strings" - - "github.com/deis/deis/mesos/pkg/boot" - "github.com/deis/deis/mesos/pkg/etcd" - logger "github.com/deis/deis/mesos/pkg/log" - "github.com/deis/deis/mesos/pkg/os" - "github.com/deis/deis/mesos/pkg/types" -) - -const ( - mesosPort = 5050 -) - -var ( - etcdPath = os.Getopt("ETCD_PATH", "/mesos/master") - log = logger.New() -) - -func init() { - boot.RegisterComponent(new(MesosBoot), "boot") -} - -func main() { - boot.Start(etcdPath, mesosPort) -} - -// MesosBoot struct to boot mesos. -type MesosBoot struct{} - -// MkdirsEtcd creates a directory in etcd. -func (mb *MesosBoot) MkdirsEtcd() []string { - return []string{etcdPath} -} - -// EtcdDefaults returns default values for etcd. -func (mb *MesosBoot) EtcdDefaults() map[string]string { - return map[string]string{} -} - -// PreBootScripts runs preboot scripts. -func (mb *MesosBoot) PreBootScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -// PreBoot to log starting of marathon. -func (mb *MesosBoot) PreBoot(currentBoot *types.CurrentBoot) { - log.Info("mesos-master: starting...") -} - -// BootDaemons starts mesos-master. -func (mb *MesosBoot) BootDaemons(currentBoot *types.CurrentBoot) []*types.ServiceDaemon { - args := gatherArgs(currentBoot.EtcdClient) - args = append(args, "--ip="+currentBoot.Host.String()) - args = append(args, "--hostname="+currentBoot.Host.String()) - log.Infof("mesos master args: %v", args) - return []*types.ServiceDaemon{&types.ServiceDaemon{Command: "mesos-master", Args: args}} -} - -// WaitForPorts returns an array of ports. -func (mb *MesosBoot) WaitForPorts() []int { - return []int{} -} - -// PostBootScripts returns type script. -func (mb *MesosBoot) PostBootScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -// PostBoot returns type script. -func (mb *MesosBoot) PostBoot(currentBoot *types.CurrentBoot) { - log.Info("mesos-master: running...") -} - -// ScheduleTasks returns a cron job. -func (mb *MesosBoot) ScheduleTasks(currentBoot *types.CurrentBoot) []*types.Cron { - return []*types.Cron{} -} - -// UseConfd uses confd. -func (mb *MesosBoot) UseConfd() (bool, bool) { - return false, false -} - -// PreShutdownScripts returns type script. -func (mb *MesosBoot) PreShutdownScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -func gatherArgs(c *etcd.Client) []string { - var args []string - - nodes := etcd.GetList(c, "/zookeeper/nodes") - var hosts []string - for _, node := range nodes { - hosts = append(hosts, node+":3888") - } - zkHosts := strings.Join(hosts, ",") - args = append(args, "--zk=zk://"+zkHosts+"/mesos") - args = append(args, "--quorum=1") - args = append(args, "--work_dir=/tmp/mesos-master") - - return args -} diff --git a/mesos/pkg/boot/mesos/slave/main.go b/mesos/pkg/boot/mesos/slave/main.go deleted file mode 100644 index 55d8454d5a..0000000000 --- a/mesos/pkg/boot/mesos/slave/main.go +++ /dev/null @@ -1,104 +0,0 @@ -package main - -import ( - "strings" - - "github.com/deis/deis/mesos/pkg/boot" - "github.com/deis/deis/mesos/pkg/etcd" - logger "github.com/deis/deis/mesos/pkg/log" - "github.com/deis/deis/mesos/pkg/os" - "github.com/deis/deis/mesos/pkg/types" -) - -const ( - mesosPort = 5051 -) - -var ( - etcdPath = os.Getopt("ETCD_PATH", "/mesos/slave") - log = logger.New() -) - -func init() { - boot.RegisterComponent(new(MesosBoot), "boot") -} - -func main() { - boot.Start(etcdPath, mesosPort) -} - -// MesosBoot struct for mesos boot. -type MesosBoot struct{} - -// MkdirsEtcd creates a directory in etcd. -func (mb *MesosBoot) MkdirsEtcd() []string { - return []string{etcdPath} -} - -// EtcdDefaults returns default values for etcd. -func (mb *MesosBoot) EtcdDefaults() map[string]string { - return map[string]string{} -} - -// PreBootScripts runs preboot scripts. -func (mb *MesosBoot) PreBootScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -// PreBoot to log starting of marathon. -func (mb *MesosBoot) PreBoot(currentBoot *types.CurrentBoot) { - log.Info("mesos-slave: starting...") -} - -// BootDaemons starts mesos-salve. -func (mb *MesosBoot) BootDaemons(currentBoot *types.CurrentBoot) []*types.ServiceDaemon { - args := gatherArgs(currentBoot.EtcdClient) - args = append(args, "--ip="+currentBoot.Host.String()) - log.Infof("mesos slave args: %v", args) - return []*types.ServiceDaemon{&types.ServiceDaemon{Command: "mesos-slave", Args: args}} -} - -// WaitForPorts returns an array of ports. -func (mb *MesosBoot) WaitForPorts() []int { - return []int{} -} - -// PostBootScripts returns type script. -func (mb *MesosBoot) PostBootScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -// PostBoot returns type script. -func (mb *MesosBoot) PostBoot(currentBoot *types.CurrentBoot) { - log.Info("mesos-slave: running...") -} - -// ScheduleTasks returns a cron job. -func (mb *MesosBoot) ScheduleTasks(currentBoot *types.CurrentBoot) []*types.Cron { - return []*types.Cron{} -} - -// UseConfd uses confd. -func (mb *MesosBoot) UseConfd() (bool, bool) { - return false, false -} - -// PreShutdownScripts returns type script. -func (mb *MesosBoot) PreShutdownScripts(currentBoot *types.CurrentBoot) []*types.Script { - return []*types.Script{} -} - -func gatherArgs(c *etcd.Client) []string { - var args []string - - nodes := etcd.GetList(c, "/zookeeper/nodes") - var hosts []string - for _, node := range nodes { - hosts = append(hosts, node+":3888") - } - zkHosts := strings.Join(hosts, ",") - args = append(args, "--master=zk://"+zkHosts+"/mesos") - args = append(args, "--containerizers=docker,mesos") - - return args -} diff --git a/mesos/pkg/boot/zookeeper/bash/add-node.bash b/mesos/pkg/boot/zookeeper/bash/add-node.bash deleted file mode 100755 index ab10d2cc6a..0000000000 --- a/mesos/pkg/boot/zookeeper/bash/add-node.bash +++ /dev/null @@ -1,20 +0,0 @@ -set -eo pipefail - -# set debug based on envvar -[[ $DEBUG ]] && set -x - -main() { - export PATH=$PATH:/jre/bin - - cp /app/zoo.cfg /opt/zookeeper-data/zoo.cfg - ln -s /opt/zookeeper-data/zoo.cfg /opt/zookeeper/conf/zoo.cfg - - cp /opt/zookeeper/conf/fleet-zoo_cfg.dynamic /opt/zookeeper-data/zoo_cfg.dynamic - - # # We need to add this node to the cluster if is not configured in the cluster - # ZKHOST=$(sed -e "s/$HOST:3888//;s/^,//;s/,$//" < /opt/zookeeper/conf/server.list | cut -d ',' -f 1) - - # echo "adding $HOST as server to the zookeeper cluster" - # echo "" - # /opt/zookeeper/bin/zkCli.sh -server "$ZKHOST" reconfig -add "server.$(cat /opt/zookeeper-data/data/myid)=$HOST:2181:2888:participant;$HOST:3888" -} diff --git a/mesos/pkg/boot/zookeeper/bash/remove-node.bash b/mesos/pkg/boot/zookeeper/bash/remove-node.bash deleted file mode 100755 index bccc82b51e..0000000000 --- a/mesos/pkg/boot/zookeeper/bash/remove-node.bash +++ /dev/null @@ -1,18 +0,0 @@ -set -eo pipefail - -# set debug based on envvar -[[ $DEBUG ]] && set -x - -main() { - export PATH=$PATH:/jre/bin - - # We cannot use the IP of this node to performe the removal of this node of the cluster - ZKHOST=$(sed -e "s/$HOST:3888//;s/^,//;s/,$//" < /opt/zookeeper/conf/server.list | cut -d ',' -f 1) - ACTUAL_SERVERS=$(/opt/zookeeper/bin/zkCli.sh -server "$ZKHOST" config | grep "^server.") - - if echo "$ACTUAL_SERVERS" | grep -q "$HOST"; then - echo "Removing $HOST server from zookeeper cluster" - echo "" - /opt/zookeeper/bin/zkCli.sh -server "$ZKHOST" reconfig -remove "$(cat /opt/zookeeper-data/data/myid)" - fi -} diff --git a/mesos/pkg/boot/zookeeper/main/boot.go b/mesos/pkg/boot/zookeeper/main/boot.go deleted file mode 100644 index 88a80f62ea..0000000000 --- a/mesos/pkg/boot/zookeeper/main/boot.go +++ /dev/null @@ -1,130 +0,0 @@ -package main - -import ( - "io/ioutil" - "net/http" - "os" - "os/signal" - "strconv" - "strings" - "syscall" - "time" - - "github.com/deis/deis/mesos/bindata/zookeeper" - "github.com/deis/deis/mesos/pkg/boot/zookeeper" - "github.com/deis/deis/mesos/pkg/confd" - "github.com/deis/deis/mesos/pkg/etcd" - logger "github.com/deis/deis/mesos/pkg/log" - oswrapper "github.com/deis/deis/mesos/pkg/os" - "github.com/deis/deis/version" -) - -var ( - etcdPath = oswrapper.Getopt("ETCD_PATH", "/zookeeper/nodes") - log = logger.New() - signalChan = make(chan os.Signal, 1) -) - -func main() { - host := oswrapper.Getopt("HOST", "127.0.0.1") - etcdPort := oswrapper.Getopt("ETCD_PORT", "4001") - etcdCtlPeers := oswrapper.Getopt("ETCD_PEERS", "127.0.0.1:"+etcdPort) - etcdURL := etcd.GetHTTPEtcdUrls(host+":"+etcdPort, etcdCtlPeers) - etcdClient := etcd.NewClient(etcdURL) - - etcd.Mkdir(etcdClient, etcdPath) - - log.Infof("boot version [%v]", version.Version) - log.Info("zookeeper: starting...") - - zookeeper.CheckZkMappingInFleet(etcdPath, etcdClient, etcdURL) - - // we need to write the file /opt/zookeeper-data/data/myid with the id of this node - os.MkdirAll("/opt/zookeeper-data/data", 0640) - zkID := etcd.Get(etcdClient, etcdPath+"/"+host+"/id") - ioutil.WriteFile("/opt/zookeeper-data/data/myid", []byte(zkID), 0640) - - zkServer := &zookeeper.ZkServer{ - Stdout: os.Stdout, - Stderr: os.Stderr, - } - - signal.Notify(signalChan, - syscall.SIGHUP, - syscall.SIGINT, - syscall.SIGKILL, - syscall.SIGTERM, - syscall.SIGQUIT, - os.Interrupt, - ) - - // Wait for a signal and exit - exitChan := make(chan int) - go func() { - for { - s := <-signalChan - log.Debugf("Signal received: %v", s) - switch s { - case syscall.SIGTERM: - exitChan <- 0 - case syscall.SIGQUIT: - exitChan <- 0 - case syscall.SIGKILL: - exitChan <- 1 - default: - exitChan <- 1 - } - } - }() - - // wait for confd to run once and install initial templates - confd.WaitForInitialConf(getConfdNodes(host, etcdCtlPeers, 4001), 10*time.Second) - - params := make(map[string]string) - params["HOST"] = host - if log.Level.String() == "debug" { - params["DEBUG"] = "true" - } - - err := oswrapper.RunScript("pkg/boot/zookeeper/bash/add-node.bash", params, bindata.Asset) - if err != nil { - log.Printf("command finished with error: %v", err) - } - - if err := zkServer.Start(); err != nil { - panic(err) - } - - log.Info("zookeeper: running...") - - go func() { - log.Debugf("starting pprof http server in port 6060") - http.ListenAndServe("localhost:6060", nil) - }() - - code := <-exitChan - log.Debugf("execution terminated with exit code %v", code) - - log.Debugf("executing pre shutdown script") - err = oswrapper.RunScript("pkg/boot/zookeeper/bash/remove-node.bash", params, bindata.Asset) - if err != nil { - log.Printf("command finished with error: %v", err) - } - - log.Info("stopping zookeeper node") - zkServer.Stop() -} - -func getConfdNodes(host, etcdCtlPeers string, port int) []string { - result := []string{host + ":" + strconv.Itoa(port)} - - if etcdCtlPeers != "127.0.0.1" { - hosts := strings.Split(etcdCtlPeers, ",") - result = []string{} - for _, _host := range hosts { - result = append(result, _host) - } - } - - return result -} diff --git a/mesos/pkg/boot/zookeeper/zookeeper_map.go b/mesos/pkg/boot/zookeeper/zookeeper_map.go deleted file mode 100644 index ef29afeea8..0000000000 --- a/mesos/pkg/boot/zookeeper/zookeeper_map.go +++ /dev/null @@ -1,115 +0,0 @@ -package zookeeper - -import ( - "strconv" - - "github.com/deis/deis/mesos/pkg/etcd" - "github.com/deis/deis/mesos/pkg/fleet" - logger "github.com/deis/deis/mesos/pkg/log" -) - -const ( - etcdLock = "/zookeeper/setupLock" -) - -var ( - log = logger.New() -) - -// CheckZkMappingInFleet verifies if there is a mapping for each node in -// the CoreOS cluster using the metadata zookeeper=true to filter wich -// nodes zookeeper should run -func CheckZkMappingInFleet(etcdPath string, etcdClient *etcd.Client, etcdURL []string) { - // check if the nodes with the required role already have the an id. - // If not get fleet nodes with the required role and preassing the - // ids for every node in the cluster - err := etcd.AcquireLock(etcdClient, etcdLock, 10) - if err != nil { - panic(err) - } - - zkNodes := etcd.GetList(etcdClient, etcdPath) - log.Debugf("zookeeper nodes %v", zkNodes) - - machines, err := getMachines(etcdURL) - if err != nil { - panic(err) - } - log.Debugf("machines %v", machines) - - if len(machines) == 0 { - log.Warning("") - log.Warning("there is no machine using metadata zookeeper=true in the cluster to run zookeeper") - log.Warning("we will create the mapping with for all the nodes") - log.Warning("") - machines = fleet.GetNodesInCluster(etcdURL) - } - - if len(zkNodes) == 0 { - log.Debug("initializing zookeeper cluster") - for index, newZkNode := range machines { - log.Debug("adding node %v to zookeeper cluster", newZkNode) - etcd.Set(etcdClient, etcdPath+"/"+newZkNode+"/id", strconv.Itoa(index+1), 0) - } - } else { - // we check if some machine in the fleet cluster with the - // required role is not initialized (no zookeeper node id). - machinesNotInitialized := difference(machines, zkNodes) - if len(machinesNotInitialized) > 0 { - nextNodeID := getNextNodeID(etcdPath, etcdClient, zkNodes) - for _, zkNode := range machinesNotInitialized { - etcd.Set(etcdClient, etcdPath+"/"+zkNode+"/id", strconv.Itoa(nextNodeID), 0) - nextNodeID++ - } - } - } - - // release the etcd lock - etcd.ReleaseLock(etcdClient) -} - -// getMachines return the list of machines that can run zookeeper or an empty list -func getMachines(etcdURL []string) ([]string, error) { - metadata, err := fleet.ParseMetadata("zookeeper=true") - if err != nil { - panic(err) - } - - return fleet.GetNodesWithMetadata(etcdURL, metadata) -} - -// getNextNodeID returns the next id to use as zookeeper node index -func getNextNodeID(etcdPath string, etcdClient *etcd.Client, nodes []string) int { - result := 0 - for _, node := range nodes { - id := etcd.Get(etcdClient, etcdPath+"/"+node+"/id") - numericID, err := strconv.Atoi(id) - if id != "" && err == nil && numericID > result { - result = numericID - } - } - - return result + 1 -} - -// difference get the elements present in the first slice and not in -// the second one returning those elemenets in a new string slice. -func difference(slice1 []string, slice2 []string) []string { - diffStr := []string{} - m := map[string]int{} - - for _, s1Val := range slice1 { - m[s1Val] = 1 - } - for _, s2Val := range slice2 { - m[s2Val] = m[s2Val] + 1 - } - - for mKey, mVal := range m { - if mVal == 1 { - diffStr = append(diffStr, mKey) - } - } - - return diffStr -} diff --git a/mesos/pkg/boot/zookeeper/zookeeper_server.go b/mesos/pkg/boot/zookeeper/zookeeper_server.go deleted file mode 100644 index 943004a422..0000000000 --- a/mesos/pkg/boot/zookeeper/zookeeper_server.go +++ /dev/null @@ -1,36 +0,0 @@ -package zookeeper - -import ( - "io" - "os/exec" - "time" -) - -// ZkServer struct to execute zookeeper commands. -type ZkServer struct { - Stdout, Stderr io.Writer - - cmd *exec.Cmd -} - -// Start starts a zookeeper server -func (srv *ZkServer) Start() error { - srv.cmd = exec.Command("/opt/zookeeper/bin/zkServer.sh", "start-foreground") - srv.cmd.Stdout = srv.Stdout - srv.cmd.Stderr = srv.Stderr - return srv.cmd.Start() -} - -// Pid returns the process id of the running zookeeper server -func (srv *ZkServer) Pid() int { - return srv.cmd.Process.Pid -} - -// Stop stops a running zookeeper server -func (srv *ZkServer) Stop() { - go func() { - time.Sleep(1 * time.Second) - srv.cmd.Process.Kill() - }() - srv.cmd.Process.Wait() -} diff --git a/mesos/pkg/confd/confd.go b/mesos/pkg/confd/confd.go deleted file mode 100644 index 5c4c01fdc7..0000000000 --- a/mesos/pkg/confd/confd.go +++ /dev/null @@ -1,119 +0,0 @@ -package confd - -import ( - "bufio" - "fmt" - "io" - "os" - "os/exec" - "regexp" - "strings" - "syscall" - "time" - - logger "github.com/deis/deis/mesos/pkg/log" - oswrapper "github.com/deis/deis/mesos/pkg/os" -) - -const ( - confdInterval = 5 // seconds - errorTickInterval = 60 * time.Second // 1 minute - maxErrorsInInterval = 5 // up to 5 errors per time interval -) - -var ( - log = logger.New() - templateErrorRegex = "(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):\\d{2}Z.*ERROR template:" -) - -// WaitForInitialConf wait until the compilation of the templates is correct -func WaitForInitialConf(etcd []string, timeout time.Duration) { - log.Info("waiting for confd to write initial templates...") - for { - cmdAsString := fmt.Sprintf("confd -onetime -node %v -confdir /app", strings.Join(etcd, ",")) - log.Debugf("running %s", cmdAsString) - cmd, args := oswrapper.BuildCommandFromString(cmdAsString) - err := oswrapper.RunCommand(cmd, args) - if err == nil { - break - } - - time.Sleep(timeout) - } -} - -// Launch launch confd as a daemon process. -func Launch(signalChan chan os.Signal, etcd []string) { - confdLogLevel := "error" - if log.Level.String() == "debug" { - confdLogLevel = "debug" - } - cmdAsString := fmt.Sprintf("confd -node %v -confdir /app --interval %v --log-level %v", confdInterval, strings.Join(etcd, ","), confdLogLevel) - cmd, args := oswrapper.BuildCommandFromString(cmdAsString) - go runConfdDaemon(signalChan, cmd, args) -} - -func runConfdDaemon(signalChan chan os.Signal, command string, args []string) { - cmd := exec.Command(command, args...) - - stdout, err := cmd.StdoutPipe() - checkError(signalChan, err) - // stderr, err := cmd.StderrPipe() - // checkError(signalChan, err) - - go io.Copy(os.Stdout, stdout) - // go io.Copy(os.Stderr, stderr) - - go checkNumberOfErrors(stdout, maxErrorsInInterval, errorTickInterval, signalChan) - - err = cmd.Start() - if err != nil { - log.Errorf("an error ocurred executing confd: [%s params %v], %v", command, args, err) - signalChan <- syscall.SIGKILL - } - - err = cmd.Wait() - log.Errorf("confd command finished with error: %v", err) - signalChan <- syscall.SIGKILL -} - -func checkError(signalChan chan os.Signal, err error) { - if err != nil { - log.Errorf("%v", err) - signalChan <- syscall.SIGKILL - } -} - -func checkNumberOfErrors(std io.ReadCloser, count uint64, tick time.Duration, signalChan chan os.Signal) { - testRegex := regexp.MustCompile(templateErrorRegex) - var tickErrors uint64 - lines := make(chan string) - go func() { - scanner := bufio.NewScanner(std) - scanner.Split(bufio.ScanLines) - for scanner.Scan() { - lines <- scanner.Text() - } - }() - - timer := time.NewTicker(tick) - - for { - select { - case <-timer.C: - if tickErrors > count { - log.Debugf("number of errors %v", tickErrors) - log.Error("too many confd errors in the last minute. restarting component") - signalChan <- syscall.SIGKILL - return - } - - tickErrors = 0 - case line := <-lines: - match := testRegex.FindStringSubmatch(line) - if match != nil { - tickErrors++ - } - } - } -} diff --git a/mesos/pkg/confd/confd_test.go b/mesos/pkg/confd/confd_test.go deleted file mode 100644 index 6abf493675..0000000000 --- a/mesos/pkg/confd/confd_test.go +++ /dev/null @@ -1,66 +0,0 @@ -package confd - -import ( - "os" - "os/exec" - "syscall" - "testing" - "time" -) - -const ( - confdError = "Apr 29 17:00:54 deis-1 sh: 2015-04-29T15:00:54Z fceb2accfbf5 confd[1484]: ERROR template: builder:59:47: executing \"builder\" at : error calling getv: key does not exist" -) - -func TestReturnError(t *testing.T) { - signalChan := make(chan os.Signal, 1) - args := "while(true);do echo '" + confdError + "'; sleep 1;done" - cmd := exec.Command("/bin/bash", "-c", args) - - stdout, err := cmd.StdoutPipe() - checkError(signalChan, err) - - cmd.Start() - - go checkNumberOfErrors(stdout, 1, 2*time.Second, signalChan) - - for { - select { - case <-time.Tick(5 * time.Second): - return - case s := <-signalChan: - log.Debugf("Signal received: %v", s) - switch s { - case syscall.SIGKILL: - // we expect this - return - } - } - } -} - -func TestReturnWithoutError(t *testing.T) { - signalChan := make(chan os.Signal, 1) - args := "while(true);do echo '" + confdError + "'; sleep 1;done" - cmd := exec.Command("/bin/bash", "-c", args) - - stdout, err := cmd.StdoutPipe() - checkError(signalChan, err) - - cmd.Start() - - go checkNumberOfErrors(stdout, 2, 2*time.Second, signalChan) - - for { - select { - case <-time.Tick(5 * time.Second): - return - case s := <-signalChan: - log.Debugf("Signal received: %v", s) - switch s { - case syscall.SIGKILL: - t.Fatal("Unexpected error received") - } - } - } -} diff --git a/mesos/pkg/etcd/etcd.go b/mesos/pkg/etcd/etcd.go deleted file mode 100644 index 868d8ab8dd..0000000000 --- a/mesos/pkg/etcd/etcd.go +++ /dev/null @@ -1,163 +0,0 @@ -package etcd - -import ( - "errors" - "path" - "strconv" - "strings" - "time" - - "github.com/coreos/go-etcd/etcd" - logger "github.com/deis/deis/mesos/pkg/log" - etcdlock "github.com/leeor/etcd-sync" -) - -// Client etcd client -type Client struct { - client *etcd.Client - lock *etcdlock.EtcdMutex -} - -// Error etcd error -type Error struct { - ErrorCode int `json:"errorCode"` - Message string `json:"message"` - Cause string `json:"cause,omitempty"` - Index uint64 `json:"index"` -} - -var log = logger.New() - -// NewClient create a etcd client using the given machine list -func NewClient(machines []string) *Client { - log.Debugf("connecting to %v etcd server/s", machines) - return &Client{etcd.NewClient(machines), nil} -} - -// SetDefault sets the value of a key without expiration -func SetDefault(client *Client, key, value string) { - Create(client, key, value, 0) -} - -// Mkdir creates a directory only if does not exists -func Mkdir(c *Client, path string) { - _, err := c.client.CreateDir(path, 0) - if err != nil { - log.Debug(err) - } -} - -// WaitForKeys wait for the required keys up to the timeout or forever if is nil -func WaitForKeys(c *Client, keys []string, ttl time.Duration) error { - start := time.Now() - wait := true - - for { - for _, key := range keys { - _, err := c.client.Get(key, false, false) - if err != nil { - log.Debugf("key \"%s\" error %v", key, err) - wait = true - } - } - - if !wait { - return nil - } - - log.Debug("waiting for missing etcd keys...") - time.Sleep(1 * time.Second) - wait = false - - if time.Since(start) > ttl { - return errors.New("maximum ttl reached. aborting") - } - } -} - -// Get returns the value inside a key or an empty string -func Get(c *Client, key string) string { - result, err := c.client.Get(key, false, false) - if err != nil { - log.Debugf("%v", err) - return "" - } - - return result.Node.Value -} - -// GetList returns the list of elements inside a key or an empty list -func GetList(c *Client, key string) []string { - values, err := c.client.Get(key, true, false) - if err != nil { - log.Debugf("getlist %v", err) - return []string{} - } - - result := []string{} - for _, node := range values.Node.Nodes { - result = append(result, path.Base(node.Key)) - } - - log.Debugf("getlist %s -> %v", key, result) - return result -} - -// Set sets the value of a key. -// If the ttl is bigger than 0 it will expire after the specified time -func Set(c *Client, key, value string, ttl uint64) { - log.Debugf("set %s -> %s", key, value) - _, err := c.client.Set(key, value, ttl) - if err != nil { - log.Debugf("%v", err) - } -} - -// Create set the value of a key only if it does not exits -func Create(c *Client, key, value string, ttl uint64) { - log.Debugf("create %s -> %s", key, value) - _, err := c.client.Create(key, value, ttl) - if err != nil { - log.Debugf("%v", err) - } -} - -// PublishService publish a service to etcd periodically -func PublishService( - client *Client, - etcdPath string, - host string, - externalPort int, - ttl uint64, - timeout time.Duration) { - - for { - Set(client, etcdPath+"/host", host, ttl) - Set(client, etcdPath+"/port", strconv.Itoa(externalPort), ttl) - time.Sleep(timeout) - } -} - -func convertEtcdError(err error) *Error { - etcdError := err.(*etcd.EtcdError) - return &Error{ - ErrorCode: etcdError.ErrorCode, - Message: etcdError.Message, - Cause: etcdError.Cause, - Index: etcdError.Index, - } -} - -// GetHTTPEtcdUrls returns an array of urls that contains at least one host -func GetHTTPEtcdUrls(host, etcdPeers string) []string { - if etcdPeers != "127.0.0.1:4001" { - hosts := strings.Split(etcdPeers, ",") - result := []string{} - for _, _host := range hosts { - result = append(result, "http://"+_host+":4001") - } - return result - } - - return []string{"http://" + host} -} diff --git a/mesos/pkg/etcd/etcd_test.go b/mesos/pkg/etcd/etcd_test.go deleted file mode 100644 index 8ddafe277f..0000000000 --- a/mesos/pkg/etcd/etcd_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package etcd - -import ( - "io/ioutil" - "os" - "os/exec" - "reflect" - "testing" - "time" -) - -func init() { - _, err := exec.Command("etcd", "--version").Output() - if err != nil { - log.Fatal(err) - } -} - -var etcdServer *exec.Cmd - -func startEtcd() { - tmpDir, err := ioutil.TempDir(os.TempDir(), "etcd-test") - if err != nil { - log.Fatal("creating temp dir:", err) - } - log.Debugf("temp dir: %v", tmpDir) - - etcdServer = exec.Command("etcd", "-data-dir="+tmpDir, "-name=default") - etcdServer.Start() - time.Sleep(1 * time.Second) -} - -func stopEtcd() { - etcdServer.Process.Kill() -} - -func TestGetSetEtcd(t *testing.T) { - startEtcd() - defer stopEtcd() - - etcdClient := NewClient([]string{"http://localhost:4001"}) - SetDefault(etcdClient, "/path", "value") - value := Get(etcdClient, "/path") - - if value != "value" { - t.Fatalf("Expected '%v' but returned '%v'", "value", value) - } - - Set(etcdClient, "/path", "", 0) - value = Get(etcdClient, "/path") - - if value != "" { - t.Fatalf("Expected '%v' but returned '%v'", "", value) - } - - Set(etcdClient, "/path", "value", uint64((1 * time.Second).Seconds())) - time.Sleep(2 * time.Second) - value = Get(etcdClient, "/path") - - if value != "" { - t.Fatalf("Expected '%v' but returned '%v'", "", value) - } -} - -func TestMkdirEtcd(t *testing.T) { - startEtcd() - defer stopEtcd() - - etcdClient := NewClient([]string{"http://localhost:4001"}) - - Mkdir(etcdClient, "/directory") - values := GetList(etcdClient, "/directory") - if len(values) != 2 { - t.Fatalf("Expected '%v' but returned '%v'", 0, len(values)) - } - - Set(etcdClient, "/directory/item_1", "value", 0) - Set(etcdClient, "/directory/item_2", "value", 0) - values = GetList(etcdClient, "/directory") - if len(values) != 2 { - t.Fatalf("Expected '%v' but returned '%v'", 2, len(values)) - } - - lsResult := []string{"item_1", "item_2"} - if !reflect.DeepEqual(values, lsResult) { - t.Fatalf("Expected '%v' but returned '%v'", lsResult, values) - } -} - -func TestWaitForKeysEtcd(t *testing.T) { - startEtcd() - defer stopEtcd() - - etcdClient := NewClient([]string{"http://localhost:4001"}) - Set(etcdClient, "/key", "value", 0) - start := time.Now() - err := WaitForKeys(etcdClient, []string{"/key"}, (10 * time.Second)) - if err != nil { - t.Fatalf("%v", err) - } - end := time.Since(start) - if end.Seconds() > (2 * time.Second).Seconds() { - t.Fatalf("Expected '%vs' but returned '%vs'", 2, end.Seconds()) - } - - err = WaitForKeys(etcdClient, []string{"/key2"}, (2 * time.Second)) - if err == nil { - t.Fatalf("Expected an error") - } -} diff --git a/mesos/pkg/etcd/lock.go b/mesos/pkg/etcd/lock.go deleted file mode 100644 index c4e231cdc4..0000000000 --- a/mesos/pkg/etcd/lock.go +++ /dev/null @@ -1,16 +0,0 @@ -package etcd - -import ( - etcdlock "github.com/leeor/etcd-sync" -) - -// AcquireLock creates a pseudo lock in etcd with a specific ttl -func AcquireLock(c *Client, key string, ttl uint64) error { - c.lock = etcdlock.NewMutexFromClient(c.client, key, ttl) - return c.lock.Lock() -} - -// ReleaseLock releases the existing lock -func ReleaseLock(c *Client) { - c.lock.Unlock() -} diff --git a/mesos/pkg/etcd/lock_test.go b/mesos/pkg/etcd/lock_test.go deleted file mode 100644 index ebc7431203..0000000000 --- a/mesos/pkg/etcd/lock_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package etcd - -import ( - "os/exec" - "testing" -) - -func init() { - _, err := exec.Command("etcd", "--version").Output() - if err != nil { - log.Fatal(err) - } -} - -func TestAcquireReleaseLock(t *testing.T) { - startEtcd() - defer stopEtcd() - - etcdClient := NewClient([]string{"http://localhost:4001"}) - - err := AcquireLock(etcdClient, "/lock", 10) - if err != nil { - t.Fatalf("Unexpected error '%v'", err) - } - - value := Get(etcdClient, "/lock") - if value == "" { - t.Fatalf("Expected '%v' arguments but returned '%v'", "locked", value) - } - - if value != "locked" { - t.Fatalf("Expected '%v' arguments but returned '%v'", "locked", value) - } - - ReleaseLock(etcdClient) - - value = Get(etcdClient, "/lock") - if value != "released" { - t.Fatalf("Expected '%v' arguments but returned '%v'", "released", value) - } - -} diff --git a/mesos/pkg/fleet/machine.go b/mesos/pkg/fleet/machine.go deleted file mode 100644 index 191cfb0235..0000000000 --- a/mesos/pkg/fleet/machine.go +++ /dev/null @@ -1,39 +0,0 @@ -package fleet - -import ( - "errors" - "strings" - - "github.com/coreos/fleet/machine" -) - -func hasMetadata(ms machine.MachineState, metadata map[string][]string) bool { - for k, v := range metadata { - for _, s := range v { - if ms.Metadata[k] == s { - return true - } - } - } - return false -} - -// ParseMetadata parses a string that could contain a comma-delimited key/value -// pairs published in the fleet registry returning an equivalen map to represent -// the same structure -func ParseMetadata(rawMetadata string) (map[string][]string, error) { - metadataList := strings.Split(rawMetadata, ",") - metadata := make(map[string][]string) - for _, kv := range metadataList { - i := strings.Index(kv, "=") - if i > 0 { - if _, ok := metadata[kv[:i]]; !ok { - metadata[kv[:i]] = []string{} - } - metadata[kv[:i]] = append(metadata[kv[:i]], kv[i+1:]) - } else { - return nil, errors.New("invalid key/value pair " + kv) - } - } - return metadata, nil -} diff --git a/mesos/pkg/fleet/machine_test.go b/mesos/pkg/fleet/machine_test.go deleted file mode 100644 index 11dd2b4906..0000000000 --- a/mesos/pkg/fleet/machine_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package fleet - -import ( - "reflect" - "testing" -) - -func TestParseMetadata(t *testing.T) { - data, err := ParseMetadata("zookeeper=true") - if err != nil { - t.Fatalf("Unexpected error '%v'", err) - } - - expected := make(map[string][]string) - expected["zookeeper"] = append(expected["zookeeper"], "true") - - if !reflect.DeepEqual(data, expected) { - t.Fatalf("Expected map with zookeeper=true but it returned %v", expected) - } -} diff --git a/mesos/pkg/fleet/machines.go b/mesos/pkg/fleet/machines.go deleted file mode 100644 index ce83786400..0000000000 --- a/mesos/pkg/fleet/machines.go +++ /dev/null @@ -1,61 +0,0 @@ -package fleet - -import ( - "net/http" - "time" - - "github.com/coreos/fleet/etcd" - "github.com/coreos/fleet/registry" - logger "github.com/deis/deis/mesos/pkg/log" -) - -var log = logger.New() - -// GetNodesWithMetadata returns the ip address of the nodes with all the specified roles -func GetNodesWithMetadata(url []string, metadata map[string][]string) ([]string, error) { - etcdClient, err := etcd.NewClient(url, &http.Transport{}, time.Second) - if err != nil { - log.Debugf("error creating new fleet etcd client: %v", err) - return nil, err - } - - fleetClient := registry.NewEtcdRegistry(etcdClient, "/_coreos.com/fleet/") - machines, err := fleetClient.Machines() - if err != nil { - log.Debugf("error creating new fleet etcd client: %v", err) - return nil, err - } - - var machineList []string - for _, m := range machines { - if hasMetadata(m, metadata) { - machineList = append(machineList, m.PublicIP) - } - } - - return machineList, nil -} - -// GetNodesInCluster return the list of ip address of all the nodes -// running in the cluster currently active (fleetctl list-machines) -func GetNodesInCluster(url []string) []string { - etcdClient, err := etcd.NewClient(url, &http.Transport{}, time.Second) - if err != nil { - log.Debugf("error creating new fleet etcd client: %v", err) - return []string{} - } - - fleetClient := registry.NewEtcdRegistry(etcdClient, "/_coreos.com/fleet/") - machines, err := fleetClient.Machines() - if err != nil { - log.Debugf("error creating new fleet etcd client: %v", err) - return []string{} - } - - var machineList []string - for _, m := range machines { - machineList = append(machineList, m.PublicIP) - } - - return machineList -} diff --git a/mesos/pkg/fleet/machines_test.go b/mesos/pkg/fleet/machines_test.go deleted file mode 100644 index af916b8ee3..0000000000 --- a/mesos/pkg/fleet/machines_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package fleet - -import ( - "io/ioutil" - "os" - "os/exec" - "testing" - "time" -) - -func init() { - _, err := exec.Command("etcd", "--version").Output() - if err != nil { - log.Fatal(err) - } -} - -var etcdServer *exec.Cmd - -func startEtcd() { - tmpDir, err := ioutil.TempDir(os.TempDir(), "etcd-test") - if err != nil { - log.Fatal("creating temp dir:", err) - } - log.Debugf("temp dir: %v", tmpDir) - - etcdServer = exec.Command("etcd", "-data-dir="+tmpDir, "-name=default") - etcdServer.Start() - time.Sleep(1 * time.Second) -} - -func stopEtcd() { - etcdServer.Process.Kill() -} - -func TestGetNodesWithMetadata(t *testing.T) { - startEtcd() - defer stopEtcd() - - data, err := ParseMetadata("zookeeper=true") - if err != nil { - t.Fatalf("Unexpected error '%v'", err) - } - - machines, err := GetNodesWithMetadata([]string{"http://172.17.8.100:4001"}, data) - if err != nil { - t.Fatalf("Expected '%v' arguments but returned '%v'", "", err) - } - - if len(machines) <= 0 { - t.Fatalf("Expected at least one machines but %v were returned ", len(machines)) - } -} diff --git a/mesos/pkg/log/log.go b/mesos/pkg/log/log.go deleted file mode 100644 index b4b9d8d156..0000000000 --- a/mesos/pkg/log/log.go +++ /dev/null @@ -1,35 +0,0 @@ -package log - -import ( - "os" - - "github.com/Sirupsen/logrus" -) - -// Logger embed logrus Logger struct -type Logger struct { - logrus.Logger -} - -// New create a new logger using the StdOutFormatter and the level -// specified in the env variable LOG_LEVEL -func New() *Logger { - log := &Logger{} - - log.Out = os.Stdout - log.Formatter = new(StdOutFormatter) - - logLevel := os.Getenv("LOG_LEVEL") - log.SetLevel(logLevel) - - return log -} - -// SetLevel change the level of the logger -func (log *Logger) SetLevel(logLevel string) { - if logLevel != "" { - if level, err := logrus.ParseLevel(logLevel); err == nil { - log.Level = level - } - } -} diff --git a/mesos/pkg/log/stdout_formatter.go b/mesos/pkg/log/stdout_formatter.go deleted file mode 100644 index 71490bc0b2..0000000000 --- a/mesos/pkg/log/stdout_formatter.go +++ /dev/null @@ -1,20 +0,0 @@ -package log - -import ( - "bytes" - "fmt" - "strings" - - "github.com/Sirupsen/logrus" -) - -// StdOutFormatter struct -type StdOutFormatter struct { -} - -// Format change the default output format to incluse the log level -func (f *StdOutFormatter) Format(entry *logrus.Entry) ([]byte, error) { - b := &bytes.Buffer{} - fmt.Fprintf(b, "[%s] - %s\n", strings.ToUpper(entry.Level.String()), entry.Message) - return b.Bytes(), nil -} diff --git a/mesos/pkg/net/net.go b/mesos/pkg/net/net.go deleted file mode 100644 index c5a6ea6196..0000000000 --- a/mesos/pkg/net/net.go +++ /dev/null @@ -1,69 +0,0 @@ -package net - -import ( - "errors" - "net" - "strconv" - "strings" - "time" -) - -// InterfaceIPAddress is used to know the interface and ip address in the sytem -type InterfaceIPAddress struct { - Iface string - IP string -} - -// WaitForPort wait for successful network connection -func WaitForPort(proto string, ip string, port int, timeout time.Duration) error { - for { - con, err := net.DialTimeout(proto, ip+":"+strconv.Itoa(port), timeout) - if err == nil { - con.Close() - break - } - } - - return nil -} - -// RandomPort return a random not used TCP port -func RandomPort(proto string) (int, error) { - switch proto { - case "tcp": - l, _ := net.Listen(proto, "127.0.0.1:0") - defer l.Close() - port := l.Addr() - lPort, _ := strconv.Atoi(strings.Split(port.String(), ":")[1]) - return lPort, nil - case "udp": - addr, _ := net.ResolveUDPAddr(proto, "127.0.0.1:0") - l, _ := net.ListenUDP(proto, addr) - defer l.Close() - return addr.Port, nil - default: - return -1, errors.New("invalid protocol") - } -} - -// GetNetworkInterfaces return the list of -// network interfaces and IP address -func GetNetworkInterfaces() []InterfaceIPAddress { - result := []InterfaceIPAddress{} - - interfaces, _ := net.Interfaces() - for _, inter := range interfaces { - if addrs, err := inter.Addrs(); err == nil { - for _, addr := range addrs { - result = append(result, InterfaceIPAddress{inter.Name, addr.String()}) - } - } - } - - return result -} - -// ParseIP parses s as an IP address -func ParseIP(s string) net.IP { - return net.ParseIP(s) -} diff --git a/mesos/pkg/net/net_test.go b/mesos/pkg/net/net_test.go deleted file mode 100644 index ee795f302b..0000000000 --- a/mesos/pkg/net/net_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package net - -import ( - "net" - "strconv" - "testing" - "time" -) - -func TestListenTCP(t *testing.T) { - port, err := RandomPort("tcp") - if err != nil { - t.Fatal(err) - } - - listeningPort, err := net.Listen("tcp", "127.0.0.1:"+strconv.Itoa(port)) - defer listeningPort.Close() - if err != nil { - t.Fatal(err) - } - - err = WaitForPort("tcp", "127.0.0.1", port, time.Second) - if err != nil { - t.Fatal(err) - } -} - -// TODO: fix -// func TestListenUDP(t *testing.T) { -// port, err := RandomPort("udp") -// if err != nil { -// t.Fatal(err) -// } - -// addr, _ := net.ResolveUDPAddr("udp", "127.0.0.1"+strconv.Itoa(port)) -// listeningPort, err := net.ListenUDP("udp", addr) -// defer listeningPort.Close() -// if err != nil { -// t.Fatal(err) -// } - -// err = WaitForPort("udp", "127.0.0.1", port, time.Second) -// if err != nil { -// t.Fatal(err) -// } -// } diff --git a/mesos/pkg/os/os.go b/mesos/pkg/os/os.go deleted file mode 100644 index 787aecfaf1..0000000000 --- a/mesos/pkg/os/os.go +++ /dev/null @@ -1,131 +0,0 @@ -package os - -import ( - "crypto/rand" - "errors" - "fmt" - "io/ioutil" - "os" - "os/exec" - "strings" - "syscall" - - logger "github.com/deis/deis/mesos/pkg/log" - basher "github.com/progrium/go-basher" -) - -const ( - alphanum = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" -) - -var log = logger.New() - -// Getopt return the value of and environment variable or a default -func Getopt(name, dfault string) string { - value := os.Getenv(name) - if value == "" { - log.Debugf("returning default value \"%s\" for key \"%s\"", dfault, name) - value = dfault - } - return value -} - -// RunProcessAsDaemon start a child process that will run indefinitely -func RunProcessAsDaemon(signalChan chan os.Signal, command string, args []string) { - cmd := exec.Command(command, args...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - - err := cmd.Start() - if err != nil { - log.Errorf("an error ocurred executing command: [%s params %v], %v", command, args, err) - signalChan <- syscall.SIGKILL - } - - err = cmd.Wait() - log.Errorf("command finished with error: %v", err) - signalChan <- syscall.SIGKILL -} - -// RunScript run a shell script using go-basher and if it returns an error -// send a signal to terminate the execution -func RunScript(script string, params map[string]string, loader func(string) ([]byte, error)) error { - log.Debugf("running script %v", script) - bash, _ := basher.NewContext("/bin/bash", log.Level.String() == "debug") - bash.Source(script, loader) - if params != nil { - for key, value := range params { - bash.Export(key, value) - } - } - - status, err := bash.Run("main", []string{}) - if err != nil { - return err - } - if status != 0 { - return fmt.Errorf("invalid exit code running script [%v]", status) - } - - return nil -} - -// RunCommand run a command and return. -func RunCommand(command string, args []string) error { - cmd := exec.Command(command, args...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - - err := cmd.Run() - if err != nil { - return err - } - - return nil -} - -// BuildCommandFromString parses a string containing a command and multiple -// arguments and returns a valid tuple to pass to exec.Command -func BuildCommandFromString(input string) (string, []string) { - command := strings.Split(input, " ") - - if len(command) > 1 { - return command[0], command[1:] - } - - return command[0], []string{} -} - -// Random return a random string -func Random(size int) (string, error) { - if size <= 0 { - return "", errors.New("invalid size. It must be bigger or equal to 1") - } - - var bytes = make([]byte, size) - rand.Read(bytes) - for i, b := range bytes { - bytes[i] = alphanum[b%byte(len(alphanum))] - } - return string(bytes), nil -} - -// Hostname returns the host name reported by the kernel. -func Hostname() (name string, err error) { - return os.Hostname() -} - -// CopyFile copies a source file to a destination. -func CopyFile(src string, dst string) error { - data, err := ioutil.ReadFile(src) - if err != nil { - return err - } - - err = ioutil.WriteFile(dst, data, 0644) - if err != nil { - return err - } - - return nil -} diff --git a/mesos/pkg/os/os_test.go b/mesos/pkg/os/os_test.go deleted file mode 100644 index 7237fd0ba8..0000000000 --- a/mesos/pkg/os/os_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package os - -import ( - "testing" -) - -func TestGetoptEmpty(t *testing.T) { - value := Getopt("", "") - if value != "" { - t.Fatalf("Expected '' as value of empty env name but %s returned", value) - } -} - -func TestGetoptValid(t *testing.T) { - value := Getopt("valid", "value") - if value != "value" { - t.Fatalf("Expected 'value' as value of 'valid' but %s returned", value) - } -} - -func TestGetoptDefault(t *testing.T) { - value := Getopt("", "default") - if value != "default" { - t.Fatalf("Expected 'default' as value of empty env name but %s returned", value) - } -} - -func TestBuildCommandFromStringSingle(t *testing.T) { - command, args := BuildCommandFromString("ls") - if command != "ls" { - t.Fatalf("Expected 'ls' as value of empty env name but %s returned", command) - } - - if len(args) != 0 { - t.Fatalf("Expected '%v' arguments but %v returned", 0, len(args)) - } - - command, args = BuildCommandFromString("docker -d -D") - if command != "docker" { - t.Fatalf("Expected 'docker' as value of empty env name but %s returned", command) - } - - if len(args) != 2 { - t.Fatalf("Expected '%v' arguments but %v returned", 0, len(args)) - } - - command, args = BuildCommandFromString("ls -lat") - if command != "ls" { - t.Fatalf("Expected 'ls' as value of empty env name but %s returned", command) - } - - if len(args) != 1 { - t.Fatalf("Expected '%v' arguments but %v returned", 1, len(args)) - } -} - -func TestRandom(t *testing.T) { - rnd, err := Random(1) - if err != nil { - t.Fatal(err) - } - - if len(rnd) != 1 { - t.Fatalf("Expected a string of 1 character but %s returned", rnd) - } -} - -func TestRandomError(t *testing.T) { - rnd, err := Random(0) - if err == nil { - t.Fatalf("Expected an error requiring a random string of length 0 but %s returned", rnd) - } -} diff --git a/mesos/pkg/types/command.go b/mesos/pkg/types/command.go deleted file mode 100644 index 54b7de8749..0000000000 --- a/mesos/pkg/types/command.go +++ /dev/null @@ -1,13 +0,0 @@ -package types - -import ( - "io" - "os/exec" -) - -// Command struct to execute commands. -type Command struct { - Stdout, Stderr io.Writer - - cmd *exec.Cmd -} diff --git a/mesos/pkg/types/cron.go b/mesos/pkg/types/cron.go deleted file mode 100644 index d9ed8a7d7f..0000000000 --- a/mesos/pkg/types/cron.go +++ /dev/null @@ -1,7 +0,0 @@ -package types - -// Cron struct executes code with a time interval -type Cron struct { - Frequency string - Code func() -} diff --git a/mesos/pkg/types/current-boot.go b/mesos/pkg/types/current-boot.go deleted file mode 100644 index b4cdba129f..0000000000 --- a/mesos/pkg/types/current-boot.go +++ /dev/null @@ -1,23 +0,0 @@ -package types - -import ( - "net" - "time" - - "github.com/deis/deis/mesos/pkg/etcd" -) - -// CurrentBoot information about the boot -// process related to the component -type CurrentBoot struct { - ConfdNodes []string - EtcdClient *etcd.Client - EtcdPath string - EtcdPort int - EtcdPeers string - EtcdURL []string - Host net.IP - Port int - Timeout time.Duration - TTL time.Duration -} diff --git a/mesos/pkg/types/script.go b/mesos/pkg/types/script.go deleted file mode 100644 index 9d457457f7..0000000000 --- a/mesos/pkg/types/script.go +++ /dev/null @@ -1,8 +0,0 @@ -package types - -// Script struct to specify a script. -type Script struct { - Name string - Params map[string]string - Content func(string) ([]byte, error) -} diff --git a/mesos/pkg/types/service-daemon.go b/mesos/pkg/types/service-daemon.go deleted file mode 100644 index b1a3af9a99..0000000000 --- a/mesos/pkg/types/service-daemon.go +++ /dev/null @@ -1,7 +0,0 @@ -package types - -// ServiceDaemon struct to a service daemon. -type ServiceDaemon struct { - Command string - Args []string -} diff --git a/mesos/slave b/mesos/slave deleted file mode 100644 index 4b5437f83d..0000000000 --- a/mesos/slave +++ /dev/null @@ -1,5 +0,0 @@ -FROM #PREFIX#mesos-template:#VERSION# - -COPY bin/slave-boot /app/bin/boot - -ENTRYPOINT ["/app/bin/boot"] diff --git a/mesos/template b/mesos/template deleted file mode 100644 index 49fed455ac..0000000000 --- a/mesos/template +++ /dev/null @@ -1,9 +0,0 @@ -FROM ubuntu-debootstrap:14.04 - -ENV DEBIAN_FRONTEND noninteractive - -COPY build-mesos.sh /tmp/build.sh - -RUN DOCKER_BUILD=true MESOS="#VERSION#" /tmp/build.sh - -ENV DEIS_RELEASE 1.13.0-dev diff --git a/mesos/zookeeper/Dockerfile b/mesos/zookeeper/Dockerfile deleted file mode 100644 index f4aaf9eac9..0000000000 --- a/mesos/zookeeper/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM alpine:3.2 - -ENV JAVA_HOME /jre -ENV PATH ${PATH}:${JAVA_HOME}/bin - -EXPOSE 2181 2888 3888 - -ADD . /app - -RUN DOCKER_BUILD=true /app/build.sh - -WORKDIR /app - -VOLUME ["/opt/zookeeper-data"] - -ENTRYPOINT ["/app/bin/boot"] - -ENV DEIS_RELEASE 1.13.0-dev diff --git a/mesos/zookeeper/build.sh b/mesos/zookeeper/build.sh deleted file mode 100755 index 77f3af55d4..0000000000 --- a/mesos/zookeeper/build.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env sh - -# fail on any command exiting non-zero -set -eo pipefail - -if [ -z "$DOCKER_BUILD" ]; then - echo - echo "Note: this script is intended for use by the Dockerfile and not as a way to build zoopeeper locally" - echo - exit 1 -fi - -apk add --update \ - curl \ - ca-certificates \ - bash \ - readline \ - ncurses-libs - -cd /tmp - -curl -sSL -o glibc-2.21-r2.apk "https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-2.21-r2.apk" - -apk add --allow-untrusted glibc-2.21-r2.apk - -curl -sSL -o glibc-bin-2.21-r2.apk "https://circle-artifacts.com/gh/andyshinn/alpine-pkg-glibc/6/artifacts/0/home/ubuntu/alpine-pkg-glibc/packages/x86_64/glibc-bin-2.21-r2.apk" - -apk add --allow-untrusted glibc-bin-2.21-r2.apk - -/usr/glibc/usr/bin/ldconfig /lib /usr/glibc/usr/lib - -# install confd -echo "Downloading confd..." -curl -sSL -o /sbin/confd https://github.com/kelseyhightower/confd/releases/download/v0.9.0/confd-0.9.0-linux-amd64 \ - && chmod +x /sbin/confd - -echo "Downloading Oracle JDK..." -JAVA_VERSION_MAJOR=8 -JAVA_VERSION_MINOR=45 -JAVA_VERSION_BUILD=14 -JAVA_PACKAGE=server-jre - -curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie"\ - http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-b${JAVA_VERSION_BUILD}/${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz | gunzip -c - | tar -xf - - -mkdir -p /tmp/zookeeper /opt - -echo "Downloading zookeeper..." -curl -sSL http://apache.mirrors.pair.com/zookeeper/zookeeper-3.5.0-alpha/zookeeper-3.5.0-alpha.tar.gz | tar -xzf - -C /opt - -ln -s /opt/zookeeper-3.5.0-alpha /opt/zookeeper - -mv jdk1.${JAVA_VERSION_MAJOR}.0_${JAVA_VERSION_MINOR}/jre /jre - -# cleanup -apk del curl ca-certificates - -rm /jre/bin/jjs -rm /jre/bin/keytool -rm /jre/bin/orbd -rm /jre/bin/pack200 -rm /jre/bin/policytool -rm /jre/bin/rmid -rm /jre/bin/rmiregistry -rm /jre/bin/servertool -rm /jre/bin/tnameserv -rm /jre/bin/unpack200 -rm /jre/lib/ext/nashorn.jar -rm /jre/lib/jfr.jar - -rm -rf /jre/lib/jfr -rm -rf /jre/lib/oblique-fonts - -rm -rf /tmp/* /var/cache/apk/* diff --git a/mesos/zookeeper/conf.d/dynamic-cfg.toml b/mesos/zookeeper/conf.d/dynamic-cfg.toml deleted file mode 100644 index db12a0e185..0000000000 --- a/mesos/zookeeper/conf.d/dynamic-cfg.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "zoo_cfg.dynamic" -dest = "/opt/zookeeper/conf/fleet-zoo_cfg.dynamic" -keys = [ - "/zookeeper/nodes", -] diff --git a/mesos/zookeeper/conf.d/server-list.toml b/mesos/zookeeper/conf.d/server-list.toml deleted file mode 100644 index d14e2e5348..0000000000 --- a/mesos/zookeeper/conf.d/server-list.toml +++ /dev/null @@ -1,6 +0,0 @@ -[template] -src = "server.list" -dest = "/opt/zookeeper/conf/server.list" -keys = [ - "/zookeeper/nodes", -] diff --git a/mesos/zookeeper/templates/server.list b/mesos/zookeeper/templates/server.list deleted file mode 100644 index 2e1142ae34..0000000000 --- a/mesos/zookeeper/templates/server.list +++ /dev/null @@ -1 +0,0 @@ -{{ range $index, $node := lsdir "/zookeeper/nodes" }}{{ if $index }},{{ end }}{{ $node }}:3888{{ end }} \ No newline at end of file diff --git a/mesos/zookeeper/templates/zoo_cfg.dynamic b/mesos/zookeeper/templates/zoo_cfg.dynamic deleted file mode 100644 index 9a3c39adb4..0000000000 --- a/mesos/zookeeper/templates/zoo_cfg.dynamic +++ /dev/null @@ -1,2 +0,0 @@ -{{ range $node := lsdir "/zookeeper/nodes" }}server.{{ getv (printf "/zookeeper/nodes/%s/id" $node) }}={{ $node }}:2181:2888:participant;{{ $node }}:3888 -{{ end }} \ No newline at end of file diff --git a/mesos/zookeeper/zoo.cfg b/mesos/zookeeper/zoo.cfg deleted file mode 100644 index 0cd761572a..0000000000 --- a/mesos/zookeeper/zoo.cfg +++ /dev/null @@ -1,7 +0,0 @@ -tickTime=2000 -initLimit=100 -syncLimit=5 -dataDir=/opt/zookeeper-data/data -standaloneEnabled=false -dynamicConfigFile=/opt/zookeeper-data/zoo_cfg.dynamic - diff --git a/swarm/Dockerfile b/swarm/Dockerfile deleted file mode 100644 index 78f053b3e4..0000000000 --- a/swarm/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM golang:1.5 - -WORKDIR /go/src/github.com/docker -RUN git clone https://github.com/deis/swarm -WORKDIR /go/src/github.com/docker/swarm -RUN git fetch origin nodefailover -RUN git checkout nodefailover - -ENV GOPATH /go/src/github.com/docker/swarm/Godeps/_workspace:$GOPATH -RUN CGO_ENABLED=0 go build -a -tags netgo -installsuffix cgo \ - -ldflags "-s -w -X github.com/docker/swarm/version.GITCOMMIT `git rev-parse --short HEAD`" \ - -o deis-swarm diff --git a/swarm/Makefile b/swarm/Makefile deleted file mode 100644 index 6d26a3365e..0000000000 --- a/swarm/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -include ../includes.mk - -# the filepath to this repository, relative to $GOPATH/src -repo_path = github.com/deis/deis/swarm - -GO_FILES = $(wildcard *.go) -GO_PACKAGES = -GO_PACKAGES_REPO_PATH = $(addprefix $(repo_path)/,$(GO_PACKAGES)) - -COMPONENT = $(notdir $(repo_path)) -IMAGE = $(IMAGE_PREFIX)$(COMPONENT):$(BUILD_TAG) -DEV_IMAGE = $(REGISTRY)$(IMAGE) -BUILD_IMAGE = $(COMPONENT)-build -BINARY_DEST_DIR = image/bin - -build: check-docker - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 godep go build -a -installsuffix cgo -ldflags '-s' -o $(BINARY_DEST_DIR)/swarm || exit 1 - @$(call check-static-binary,$(BINARY_DEST_DIR)/swarm) - docker build -t $(BUILD_IMAGE) . - docker cp `docker run -d $(BUILD_IMAGE)`:/go/src/github.com/docker/swarm/deis-swarm $(BINARY_DEST_DIR)/ - @$(call check-static-binary,$(BINARY_DEST_DIR)/deis-swarm) - docker build -t $(IMAGE) image - -clean: check-docker check-registry - rm -f $(BINARY_DEST_DIR)/deis-swarm - rm -f $(BINARY_DEST_DIR)/swarm - -docker rmi -f $(BUILD_IMAGE) - -docker rmi -f $(IMAGE) - -full-clean: check-docker check-registry - docker images -q $(IMAGE_PREFIX)$(COMPONENT) | xargs docker rmi -f - -install: check-deisctl - deisctl install $(COMPONENT) - -uninstall: check-deisctl - deisctl uninstall $(COMPONENT) - -start: check-deisctl - deisctl start $(COMPONENT) - -stop: check-deisctl - deisctl stop $(COMPONENT) - -restart: stop start - -run: install start - -dev-release: push set-image - -push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) - docker push $(DEV_IMAGE) - -set-image: check-deisctl - deisctl config $(COMPONENT) set image=$(DEV_IMAGE) - -release: - docker push $(IMAGE) - -deploy: build dev-release restart - -test: test-style test-unit test-functional - -test-unit: - @echo no unit tests - -test-style: -# display output, then check - $(GOFMT) $(GO_PACKAGES) $(GO_FILES) - @$(GOFMT) $(GO_PACKAGES) $(GO_FILES) | read; if [ $$? == 0 ]; then echo "gofmt check failed."; exit 1; fi - $(GOVET) $(repo_path) $(GO_PACKAGES_REPO_PATH) - $(GOLINT) ./... - -test-functional: - @echo no functional tests diff --git a/swarm/README.md b/swarm/README.md deleted file mode 100644 index d43d6942be..0000000000 --- a/swarm/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Deis Swarm Scheduler - -[Docker swarm](https://github.com/docker/swarm/) components for use as -an optional scheduler in Deis, the open source PaaS. - -## Usage - -Please consult the [swarm scheduler documentation](http://docs.deis.io/en/latest/customizing_deis/choosing-a-scheduler/#swarm-scheduler) -for instructions on installing and activating swarm in Deis. - -## License - -© 2015 Engine Yard, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); you may -not use this file except in compliance with the License. You may obtain -a copy of the License at - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/swarm/image/Dockerfile b/swarm/image/Dockerfile deleted file mode 100644 index e32bee6851..0000000000 --- a/swarm/image/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM alpine:3.2 - -COPY bin /app/bin/ -WORKDIR /app/bin - -ENTRYPOINT ["/app/bin/swarm"] -CMD ["--help"] -ENV SWARM_HOST :2375 -EXPOSE 2375 -VOLUME $HOME/.swarm - -ENV DEIS_RELEASE 1.13.0-dev diff --git a/swarm/swarm.go b/swarm/swarm.go deleted file mode 100644 index 79cd9b2e5c..0000000000 --- a/swarm/swarm.go +++ /dev/null @@ -1,115 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "fmt" - "io/ioutil" - "log" - "net/http" - "net/url" - "os" - "os/exec" - "strings" - "text/template" - "time" - - "github.com/coreos/go-etcd/etcd" - "github.com/deis/deis/tests/utils" -) - -// EtcdCluster information about the nodes in the etcd cluster -type EtcdCluster struct { - Members []etcd.Member `json:"members"` -} - -// NodeStat information about the local node in etcd -type NodeStats struct { - LeaderInfo struct { - Name string `json:"leader"` - Uptime string `json:"uptime"` - StartTime time.Time `json:"startTime"` - } `json:"leaderInfo"` -} - -const ( - swarmpath = "/deis/scheduler/swarm/node" - swarmetcd = "/deis/scheduler/swarm/host" - etcdport = "4001" - timeout time.Duration = 3 * time.Second - ttl time.Duration = timeout * 2 -) - -func run(cmd string) { - var cmdBuf bytes.Buffer - tmpl := template.Must(template.New("cmd").Parse(cmd)) - if err := tmpl.Execute(&cmdBuf, nil); err != nil { - log.Fatal(err) - } - cmdString := cmdBuf.String() - fmt.Println(cmdString) - var cmdl *exec.Cmd - cmdl = exec.Command("sh", "-c", cmdString) - if _, _, err := utils.RunCommandWithStdoutStderr(cmdl); err != nil { - log.Fatal(err) - } else { - fmt.Println("ok") - } -} - -func getleaderHost() string { - var nodeStats NodeStats - client := &http.Client{} - resp, _ := client.Get("http://" + os.Getenv("HOST") + ":2379/v2/stats/self") - - body, _ := ioutil.ReadAll(resp.Body) - json.Unmarshal(body, &nodeStats) - - etcdLeaderID := nodeStats.LeaderInfo.Name - - var etcdCluster EtcdCluster - resp, _ = client.Get("http://" + os.Getenv("HOST") + ":2379/v2/members") - defer resp.Body.Close() - - body, _ = ioutil.ReadAll(resp.Body) - json.Unmarshal(body, &etcdCluster) - - for _, node := range etcdCluster.Members { - if node.ID == etcdLeaderID { - u, err := url.Parse(node.ClientURLs[0]) - if err == nil { - return u.Host - } - } - } - - return "" -} - -func publishService(client *etcd.Client, host string, ttl uint64) { - for { - setEtcd(client, swarmetcd, host, ttl) - time.Sleep(timeout) - } -} - -func setEtcd(client *etcd.Client, key, value string, ttl uint64) { - _, err := client.Set(key, value, ttl) - if err != nil && !strings.Contains(err.Error(), "Key already exists") { - log.Println(err) - } -} - -func main() { - etcdproto := "etcd://" + getleaderHost() + swarmpath - etcdhost := os.Getenv("HOST") - addr := "--addr=" + etcdhost + ":2375" - client := etcd.NewClient([]string{"http://" + etcdhost + ":" + etcdport}) - switch os.Args[1] { - case "join": - run("./deis-swarm join " + addr + " " + etcdproto) - case "manage": - go publishService(client, etcdhost, uint64(ttl.Seconds())) - run("./deis-swarm manage " + etcdproto) - } -} From 202f94022f53835d2c7a239efd9b5b96c15b737b Mon Sep 17 00:00:00 2001 From: Chris Armstrong Date: Tue, 26 Jan 2016 08:50:23 -0800 Subject: [PATCH 011/178] chore(*): bump to CoreOS 835.11.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/baremetal.rst | 2 +- docs/installing_deis/gce.rst | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 493b06b9aa..b65390c290 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "835.9.0" + "value": "835.11.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index a89b5edf5b..370419dd1b 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -413,7 +413,7 @@ def run(self): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='835.9.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='835.11.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index dc0465729d..55e134ef6a 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-835.9.0} +export COREOS_VERSION=${COREOS_VERSION:-835.11.0} export DEIS_RELEASE=1.13.0-dev diff --git a/docs/installing_deis/baremetal.rst b/docs/installing_deis/baremetal.rst index e2ed94545f..2a90bcd817 100644 --- a/docs/installing_deis/baremetal.rst +++ b/docs/installing_deis/baremetal.rst @@ -94,7 +94,7 @@ Start the installation .. code-block:: console - coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.9.0 + coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.11.0 This will install the latest `CoreOS`_ stable release that has been known to work diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 8882fe3a26..1fa35e02da 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-835-9-0-v20151208 \ + --image coreos-stable-835-11-0-v20160122 \ --image-project coreos-cloud; done From 9f614207c031618e4f473b495b722fbd0d829814 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 22 Jan 2016 14:36:58 -0700 Subject: [PATCH 012/178] docs(managing_deis): add workaround for cephless cluster The registry will fail to template the config if /deis/store/gateway is not set. This workaround works for users running Deis v1 without Ceph. --- docs/managing_deis/running-deis-without-ceph.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/managing_deis/running-deis-without-ceph.rst b/docs/managing_deis/running-deis-without-ceph.rst index febdc31692..bf993c3492 100644 --- a/docs/managing_deis/running-deis-without-ceph.rst +++ b/docs/managing_deis/running-deis-without-ceph.rst @@ -41,7 +41,7 @@ ships these to the :ref:`logger` component. By default, the logger writes the logs to a distributed Ceph filesystem. These logs can then be fetched by the :ref:`controller` component via HTTP. -In a Ceph-less clutser, the Logger component should be configured, instead, to +In a Ceph-less cluster, the Logger component should be configured, instead, to use in-memory log storage. Optionally, a drain may also be configured to forward logs to an external log service (such as Papertrail) for longer-term archival. @@ -120,6 +120,13 @@ S3 store configuration sample: s3encrypt=false \ s3secure=false +Due to `issue 4568`_, you'll also need to run the following to ensure confd will template out the +registry's configuration: + +.. code-block:: console + + $ deisctl config store set gateway=' ' + By default, the registry will try to authenticate to S3 using the instance role. If your cluster is not running on EC2, you can supply hard coded API access and secret key: @@ -218,5 +225,6 @@ When following the :ref:`upgrading-deis` documentation, be sure to use .. _`Amazon RDS`: http://aws.amazon.com/rds/ .. _`Amazon S3`: http://aws.amazon.com/s3/ .. _`Arne-Christian Blystad`: https://github.com/blystad +.. _`issue 4568`: https://github.com/deis/deis/issues/4568 .. _`Papertrail`: https://papertrailapp.com/ .. _`Swift3`: https://github.com/openstack/swift3 From bc40e31185519eeb86a7d5b24630df3edfe61043 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 22 Jan 2016 10:27:52 -0700 Subject: [PATCH 013/178] ref(router): force users to opt into router-nginx-status --- docs/customizing_deis/router_settings.rst | 1 + router/rootfs/etc/confd/templates/nginx.conf | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/customizing_deis/router_settings.rst b/docs/customizing_deis/router_settings.rst index a2da4e4fd0..e1e1fd07b0 100644 --- a/docs/customizing_deis/router_settings.rst +++ b/docs/customizing_deis/router_settings.rst @@ -47,6 +47,7 @@ setting description /deis/router/controller/timeout/read proxy_read_timeout for deis-controller (default: 20m) /deis/router/controller/timeout/send proxy_send_timeout for deis-controller (default: 20m) /deis/router/controller/whitelist comma separated list of IPs (or CIDR) allowed to connect to the controller (default: not set) Example: "0.0.0.0:some_optional_label,10.0.0.0/8" +/deis/router/enableNginxStatus enable vhost traffic status page /deis/router/enforceHTTPS redirect all HTTP traffic to HTTPS (default: false) /deis/router/enforceWhitelist deny all connections unless specifically whitelisted (default: false) /deis/router/firewall/enabled nginx naxsi firewall enabled (default: false) diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 9c94571690..7b1420783b 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -381,10 +381,10 @@ http { return 200; {{ end }} } - location /router-nginx-status { + {{ if eq (getv "/deis/router/enableNginxStatus") "true" }}location /router-nginx-status { vhost_traffic_status_display; vhost_traffic_status_display_format html; - } + }{{ end }} location / { return 404; } From 268a3f0cfef664844ecdd9eb4deeda4c22d19ef6 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 26 Jan 2016 09:00:39 -0800 Subject: [PATCH 014/178] fix(client): backport deis/workflow#280 to v1 --- client/pkg/git/git.go | 2 ++ client/pkg/git/git_test.go | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/client/pkg/git/git.go b/client/pkg/git/git.go index 1dae99a057..8391b5a42d 100644 --- a/client/pkg/git/git.go +++ b/client/pkg/git/git.go @@ -106,5 +106,7 @@ func findRemote(host string) (string, error) { // RemoteURL returns the git URL of app. func RemoteURL(host, appID string) string { + // Strip off any trailing :port number after the host name. + host = strings.Split(host, ":")[0] return fmt.Sprintf("ssh://git@%s:2222/%s.git", host, appID) } diff --git a/client/pkg/git/git_test.go b/client/pkg/git/git_test.go index 393efc137f..36b5ffda90 100644 --- a/client/pkg/git/git_test.go +++ b/client/pkg/git/git_test.go @@ -7,9 +7,15 @@ import ( func TestRemoteURL(t *testing.T) { t.Parallel() + actual := RemoteURL("example.com", "app") expected := "ssh://git@example.com:2222/app.git" - actual := RemoteURL("example.com", "app") + if actual != expected { + t.Errorf("Expected %s, Got %s", expected, actual) + } + + actual = RemoteURL("deis.10.245.1.3.xip.io:31350", "velcro-underdog") + expected = "ssh://git@deis.10.245.1.3.xip.io:2222/velcro-underdog.git" if actual != expected { t.Errorf("Expected %s, Got %s", expected, actual) From 8bba98fb3c6fbce37772bb929fdb06bd5d774c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Otis=20Gospodneti=C4=87?= Date: Mon, 4 Jan 2016 23:37:52 -0500 Subject: [PATCH 015/178] docs(managing_deis): update Sematext agent name and URL --- contrib/README.md | 4 ++-- docs/managing_deis/platform_monitoring.rst | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/contrib/README.md b/contrib/README.md index 3a101e0d97..6e12671463 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -36,8 +36,8 @@ Please add to this list by opening a pull request! * [CoreOS unit files](https://github.com/ianblenke/coreos-vagrant-kitchen-sink/tree/master/cloud-init) by [@ianblenke](https://github.com/ianblenke) - Unit files to launch various services on CoreOS hosts * [Docker S3 Cleaner](https://github.com/myriadmobile/docker-s3-cleaner) by [@croemmich](https://github.com/croemmich) - Unit file to remove orphaned image layers from S3 backed private docker registries * [New Relic unit for CoreOS](https://github.com/lorieri/coreos-newrelic) by [@lorieri](https://github.com/lorieri) - A global unit to launch New Relic sysmond -* [SPM Docker Agent for CoreOS](https://github.com/sematext/spm-agent-docker/blob/master/coreos/spm-agent.service) by [@sematext](https://github.com/sematext) - A global unit to launch the agent for [SPM Performance Monitoring, Anomaly Detection and Alerting](http://sematext.com/spm/integrations/docker-monitoring.html) -* [Forwarding systemd journal to Logsene](https://github.com/sematext/spm-agent-docker/blob/master/coreos/logsene.service) by [@sematext](https://github.com/sematext) - A global unit to forward systemd journal via SSL/TLS. Note: The IP address of the CoreOS host needs to be authorized in Logsene. [Logsene ­Log Management & Analytics](http://www.sematext.com/logsene/) +* [Sematext Docker Agent for CoreOS](https://github.com/sematext/sematext-agent-docker/blob/master/coreos/sematext-agent.service) by [@sematext](https://github.com/sematext) - A global unit to launch the agent for [SPM Performance Monitoring, Anomaly Detection and Alerting](http://sematext.com/spm/integrations/docker-monitoring.html) +* [Forwarding systemd journal to Logsene](https://github.com/sematext/sematext-agent-docker/blob/master/coreos/logsene.service) by [@sematext](https://github.com/sematext) - A global unit to forward systemd journal via SSL/TLS. Note: The IP address of the CoreOS host needs to be authorized in Logsene. [Logsene ­Log Management & Analytics](http://www.sematext.com/logsene/) ### Example Applications * [Melano](https://github.com/SuaveIO/Melano) - F# "Hello World" app using the Suave framework diff --git a/docs/managing_deis/platform_monitoring.rst b/docs/managing_deis/platform_monitoring.rst index 6f6c9d4b20..f928855e07 100644 --- a/docs/managing_deis/platform_monitoring.rst +++ b/docs/managing_deis/platform_monitoring.rst @@ -132,7 +132,7 @@ SPM Docker Agent can be run using Docker as follows (assuming the SPM_TOKEN is s .. code-block:: console - docker run -d --name spm-agent -e SPM_TOKEN=`etcdctl get SPM_TOKEN` -e HOSTNAME=$HOSTNAME -v /var/run/docker.sock:/var/run/docker.sock sematext/spm-agent-docker + docker run -d --name sematext-agent -e SPM_TOKEN=`etcdctl get SPM_TOKEN` -e HOSTNAME=$HOSTNAME -v /var/run/docker.sock:/var/run/docker.sock sematext/sematext-agent-docker To activate SPM Docker Agent for the entire cluster submit this unit file to fleet @@ -149,11 +149,11 @@ To activate SPM Docker Agent for the entire cluster submit this unit file to fle EnvironmentFile=/etc/environment Restart=always RestartSec=30s - ExecStartPre=-/usr/bin/docker kill spm-agent - ExecStartPre=-/usr/bin/docker rm spm-agent - ExecStartPre=/usr/bin/docker pull sematext/spm-agent-docker:latest - ExecStart=/bin/sh -c 'set -ex; /usr/bin/docker run --name spm-agent -e SPM_TOKEN=$(etcdctl get SPM_TOKEN) -e HOSTNAME=$HOSTNAME -v /var/run/docker.sock:/var/run/docker.sock sematext/spm-agent-docker' - ExecStop=/usr/bin/docker stop spm-agent + ExecStartPre=-/usr/bin/docker kill sematext-agent + ExecStartPre=-/usr/bin/docker rm sematext-agent + ExecStartPre=/usr/bin/docker pull sematext/sematext-agent-docker:latest + ExecStart=/bin/sh -c 'set -ex; /usr/bin/docker run --name sematext-agent -e SPM_TOKEN=$(etcdctl get SPM_TOKEN) -e HOSTNAME=$HOSTNAME -v /var/run/docker.sock:/var/run/docker.sock sematext/sematext-agent-docker' + ExecStop=/usr/bin/docker stop sematext-agent [Install] WantedBy=multi-user.target @@ -161,22 +161,22 @@ To activate SPM Docker Agent for the entire cluster submit this unit file to fle [X-Fleet] Global=true -Save the file as ``spm-agent.service``. +Save the file as ``sematext-agent.service``. .. code-block:: console - wget https://raw.githubusercontent.com/sematext/spm-agent-docker/master/coreos/spm-agent.service + wget https://raw.githubusercontent.com/sematext/sematext-agent-docker/master/coreos/sematext-agent.service Load and start the service with .. code-block:: console - fleetctl load spm-agent.service && fleetctl start spm-agent.service + fleetctl load sematext-agent.service && fleetctl start sematext-agent.service After one minute, you should see metrics in SPM. Documentation, source code and support information is available here: -`https://github.com/sematext/spm-agent-docker`_. +`https://github.com/sematext/sematext-agent-docker`_. @@ -189,4 +189,4 @@ Documentation, source code and support information is available here: .. _`newrelic-sysmond`: https://github.com/johanneswuerbach/newrelic-sysmond-service .. _`SPM for Docker`: http://sematext.com/spm/integrations/docker-monitoring.html .. _`Create a new SPM App`: https://apps.sematext.com/spm-reports/registerApplication.do -.. _`https://github.com/sematext/spm-agent-docker`: https://github.com/sematext/spm-agent-docker +.. _`https://github.com/sematext/sematext-agent-docker`: https://github.com/sematext/sematext-agent-docker From 32f56d12031dc6d4d696b281ae31ad7c6164a366 Mon Sep 17 00:00:00 2001 From: Grant Sherrick Date: Wed, 13 Jan 2016 00:59:03 -0700 Subject: [PATCH 016/178] fix(controller): legacy fix should modify dict instead of dict view When trying to modify the unit_tags, the following error occurs: `TypeError: dict_items object does not support item assignment`. This is because it is a view and not a dict. You have to modify the dict directly in order for this to work. --- controller/scheduler/fleet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/scheduler/fleet.py b/controller/scheduler/fleet.py index 21726ac121..6d257924fe 100644 --- a/controller/scheduler/fleet.py +++ b/controller/scheduler/fleet.py @@ -152,7 +152,7 @@ def _create_container(self, name, image, command, unit, **kwargs): tags = kwargs.get('tags', {}) unit_tags = tags.viewitems() if settings.ENABLE_PLACEMENT_OPTIONS in ['true', 'True', 'TRUE', '1']: - unit_tags['dataPlane'] = 'true' + tags['dataPlane'] = 'true' if unit_tags: tagset = ' '.join(['"{}={}"'.format(k, v) for k, v in unit_tags]) unit.append({"section": "X-Fleet", "name": "MachineMetadata", From c6d805702f453c949f44664f02985134b72c8b19 Mon Sep 17 00:00:00 2001 From: Grant Sherrick Date: Fri, 8 Jan 2016 14:31:03 -0700 Subject: [PATCH 017/178] feat(contrib/linode): update firewall to allow for cluster expansion. Adds a parameter to open ports 2379,2380 when adding nodes to an existing cluster so that etcd can be properly initialized. --- contrib/linode/apply-firewall.py | 13 +++++++------ docs/installing_deis/linode.rst | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/contrib/linode/apply-firewall.py b/contrib/linode/apply-firewall.py index f1c05ecc64..6affc36910 100755 --- a/contrib/linode/apply-firewall.py +++ b/contrib/linode/apply-firewall.py @@ -56,7 +56,7 @@ def validate_ip_address(ip): return True if re.match('([0-9]{1,3}\.){3}[0-9]{1,3}', ip) else False -def get_firewall_contents(node_ips, private=False): +def get_firewall_contents(node_ips, private=False, adding_new_nodes=False): rules_template_text = """*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] @@ -78,16 +78,17 @@ def get_firewall_contents(node_ips, private=False): # Allow connections from docker container -A Firewall-INPUT -i docker0 -j ACCEPT # Accept ssh, http, https and git --A Firewall-INPUT -m conntrack --ctstate NEW -m multiport$multiport_private -p tcp --dports 22,2222,80,443 -j ACCEPT +-A Firewall-INPUT -m conntrack --ctstate NEW -m multiport$multiport_private -p tcp --dports 22,2222,80,443$add_new_nodes -j ACCEPT # Log and drop everything else -A Firewall-INPUT -j REJECT COMMIT """ multiport_private = ' -s 192.168.0.0/16' if private else '' + add_new_nodes = ',2379,2380' if adding_new_nodes else '' rules_template = string.Template(rules_template_text) - return rules_template.substitute(node_ips=string.join(node_ips, ','), multiport_private=multiport_private) + return rules_template.substitute(node_ips=string.join(node_ips, ','), multiport_private=multiport_private, add_new_nodes=add_new_nodes) def apply_rules_to_all(host_ips, rules, private_key): @@ -150,8 +151,9 @@ def main(): parser = argparse.ArgumentParser(description='Apply a "Security Group" to a Deis cluster') parser.add_argument('--private-key', required=True, type=file, dest='private_key', help='Cluster SSH Private Key') parser.add_argument('--private', action='store_true', dest='private', help='Only allow access to the cluster from the private network') + parser.add_argument('--adding-new-nodes', action='store_true', dest='adding_new_nodes', help='When adding new nodes to existing cluster, allows access to etcd') parser.add_argument('--discovery-url', dest='discovery_url', help='Etcd discovery url') - parser.add_argument('--hosts', nargs='+', dest='hosts', help='The IP addresses of the hosts to apply rules to') + parser.add_argument('--hosts', nargs='+', dest='hosts', help='The public IP addresses of the hosts to apply rules to') args = parser.parse_args() nodes = get_nodes_from_args(args) @@ -178,7 +180,7 @@ def main(): raise ValueError('No valid host addresses.') log_info('Generating iptables rules...') - rules = get_firewall_contents(node_ips, args.private) + rules = get_firewall_contents(node_ips, args.private, args.adding_new_nodes) log_success('Generated rules:') log_debug(rules) @@ -186,7 +188,6 @@ def main(): apply_rules_to_all(host_ips, rules, args.private_key) log_success('Done!') - def log_debug(message): print(Style.DIM + Fore.MAGENTA + message + Fore.RESET + Style.RESET_ALL) diff --git a/docs/installing_deis/linode.rst b/docs/installing_deis/linode.rst index 4059820578..aa79bd5dd0 100644 --- a/docs/installing_deis/linode.rst +++ b/docs/installing_deis/linode.rst @@ -188,6 +188,7 @@ connections between nodes while blocking outside connections automatically. Full .. code-block:: console usage: apply-firewall.py [-h] --private-key PRIVATE_KEY [--private] + [--adding-new-nodes] [--discovery-url DISCOVERY_URL] [--hosts HOSTS [HOSTS ...]] @@ -199,6 +200,7 @@ connections between nodes while blocking outside connections automatically. Full Cluster SSH Private Key --private Only allow access to the cluster from the private network + --adding-new-nodes When adding new nodes to existing cluster, allows access to etcd --discovery-url DISCOVERY_URL Etcd discovery url --hosts HOSTS [HOSTS ...] @@ -212,7 +214,25 @@ Now that you've finished provisioning a cluster, please refer to :ref:`install_d start installing the platform. +Adding Nodes to an Existing Cluster +----------------------------------- + +When adding one or more nodes to an existing CoreOS setup, ``etcd`` requires access to ports 2379 +and 2380. + +When adding nodes to the cluster, before cluster provisioning, run: + +.. code-block:: console + + $ ./apply-firewall.py --private-key /path/to/key/deis --hosts 1.2.3.4 11.22.33.44 111.222.33.44 --adding-new-nodes + + +Then provision the cluster as described above and apply security groups settings using ``./apply-firewall.py`` +without the ``--adding-new-nodes`` parameter. + + .. _`contrib/linode`: https://github.com/deis/deis/tree/master/contrib/linode .. _`Linode Account Settings`: https://manager.linode.com/account/settings .. _`Linode API Keys`: https://manager.linode.com/profile/api .. _`pip`: https://pip.pypa.io/en/stable/ + From b482589cccb8f829dbb48067c2502436863dfa40 Mon Sep 17 00:00:00 2001 From: Grant Sherrick Date: Mon, 11 Jan 2016 17:15:14 -0700 Subject: [PATCH 018/178] feat(contrib/linode): standardize scripts and provide IP discovery options Standardized and normalized the python functions used during CoreOS setup (e.g. Linode api calls and logging). Also, I added multiple methods of providing IPs when applying a firewall to the cluster. Namely, IPs can now be provided via a display-group, manually, or using the discovery URL. This is useful particularly when running this command outside of the cluster, but also when adding nodes to an existing cluster (because the new nodes will be added as proxies). --- contrib/linode/apply-firewall.py | 301 +++++++++++---------- contrib/linode/create-linode-user-data.py | 99 ++----- contrib/linode/linodeapi.py | 45 +++ contrib/linode/linodeutils.py | 79 ++++++ contrib/linode/provision-linode-cluster.py | 90 ++---- docs/installing_deis/linode.rst | 41 ++- 6 files changed, 353 insertions(+), 302 deletions(-) create mode 100644 contrib/linode/linodeapi.py create mode 100644 contrib/linode/linodeutils.py diff --git a/contrib/linode/apply-firewall.py b/contrib/linode/apply-firewall.py index 6affc36910..65309f2b31 100755 --- a/contrib/linode/apply-firewall.py +++ b/contrib/linode/apply-firewall.py @@ -4,60 +4,60 @@ Usage: apply-firewall.py """ -import os import re import string import argparse +import threading from threading import Thread import uuid -import colorama -from colorama import Fore, Style import paramiko import requests import sys import yaml +from linodeapi import LinodeApiCommand +import linodeutils -def get_nodes_from_args(args): - if args.discovery_url is not None: - return get_nodes_from_discovery_url(args.discovery_url) +class FirewallCommand(LinodeApiCommand): - return get_nodes_from_discovery_url(get_discovery_url_from_user_data()) + def get_nodes_from_args(self): + if not self.discovery_url: + self.discovery_url = self.get_discovery_url_from_user_data() + return self.get_nodes_from_discovery_url(self.discovery_url) + + def get_nodes_from_discovery_url(self, discovery_url): + try: + nodes = [] + json = requests.get(discovery_url).json() + discovery_nodes = json['node']['nodes'] + for node in discovery_nodes: + value = node['value'] + ip = re.search('([0-9]{1,3}\.){3}[0-9]{1,3}', value).group(0) + nodes.append(ip) + return nodes + except: + raise IOError('Could not load nodes from discovery url ' + discovery_url) -def get_nodes_from_discovery_url(discovery_url): - try: - nodes = [] - json = requests.get(discovery_url).json() - discovery_nodes = json['node']['nodes'] - for node in discovery_nodes: - value = node['value'] - ip = re.search('([0-9]{1,3}\.){3}[0-9]{1,3}', value).group(0) - nodes.append(ip) - return nodes - except: - raise IOError('Could not load nodes from discovery url ' + discovery_url) - - -def get_discovery_url_from_user_data(): - name = 'linode-user-data.yaml' - log_info('Loading discovery url from ' + name) - try: - current_dir = os.path.dirname(__file__) - user_data_file = file(os.path.abspath(os.path.join(current_dir, name)), 'r') - user_data_yaml = yaml.safe_load(user_data_file) - return user_data_yaml['coreos']['etcd2']['discovery'] - except: - raise IOError('Could not load discovery url from ' + name) + + def get_discovery_url_from_user_data(self): + name = 'linode-user-data.yaml' + linodeutils.log_info('Loading discovery url from ' + name) + try: + user_data_file = linodeutils.get_file(name) + user_data_yaml = yaml.safe_load(user_data_file) + return user_data_yaml['coreos']['etcd2']['discovery'] + except: + raise IOError('Could not load discovery url from ' + name) -def validate_ip_address(ip): - return True if re.match('([0-9]{1,3}\.){3}[0-9]{1,3}', ip) else False + def validate_ip_address(self, ip): + return True if re.match('([0-9]{1,3}\.){3}[0-9]{1,3}', ip) else False -def get_firewall_contents(node_ips, private=False, adding_new_nodes=False): - rules_template_text = """*filter + def get_firewall_contents(self, node_ips): + rules_template_text = """*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] @@ -84,132 +84,135 @@ def get_firewall_contents(node_ips, private=False, adding_new_nodes=False): COMMIT """ - multiport_private = ' -s 192.168.0.0/16' if private else '' - add_new_nodes = ',2379,2380' if adding_new_nodes else '' - - rules_template = string.Template(rules_template_text) - return rules_template.substitute(node_ips=string.join(node_ips, ','), multiport_private=multiport_private, add_new_nodes=add_new_nodes) - - -def apply_rules_to_all(host_ips, rules, private_key): - pkey = detect_and_create_private_key(private_key) - - threads = [] - for ip in host_ips: - t = Thread(target=apply_rules, args=(ip, rules, pkey)) - t.setDaemon(False) - t.start() - threads.append(t) - for thread in threads: - thread.join() - - -def detect_and_create_private_key(private_key): - private_key_text = private_key.read() - private_key.seek(0) - if '-----BEGIN RSA PRIVATE KEY-----' in private_key_text: - return paramiko.RSAKey.from_private_key(private_key) - elif '-----BEGIN DSA PRIVATE KEY-----' in private_key_text: - return paramiko.DSSKey.from_private_key(private_key) - else: - raise ValueError('Invalid private key file ' + private_key.name) - - -def apply_rules(host_ip, rules, private_key): - # connect to the server via ssh - ssh = paramiko.SSHClient() - ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - ssh.connect(host_ip, username='core', allow_agent=False, look_for_keys=False, pkey=private_key) - - # copy the rules to the temp directory - temp_file = '/tmp/' + str(uuid.uuid4()) - - ssh.open_sftp() - sftp = ssh.open_sftp() - sftp.open(temp_file, 'w').write(rules) - - # move the rules in to place and enable and run the iptables-restore.service - commands = [ - 'sudo mv ' + temp_file + ' /var/lib/iptables/rules-save', - 'sudo chown root:root /var/lib/iptables/rules-save', - 'sudo systemctl enable iptables-restore.service', - 'sudo systemctl start iptables-restore.service' - ] - - for command in commands: - stdin, stdout, stderr = ssh.exec_command(command) - stdout.channel.recv_exit_status() - - ssh.close() - - log_success('Applied rule to ' + host_ip) + multiport_private = ' -s 192.168.0.0/16' if self.private else '' + add_new_nodes = ',2379,2380' if self.adding_new_nodes else '' + + rules_template = string.Template(rules_template_text) + return rules_template.substitute(node_ips=string.join(node_ips, ','), multiport_private=multiport_private, add_new_nodes=add_new_nodes) + + + def apply_rules_to_all(self, host_ips, rules): + pkey = self.detect_and_create_private_key() + + threads = [] + for ip in host_ips: + t = Thread(target=self.apply_rules, args=(ip, rules, pkey)) + t.setDaemon(False) + t.start() + threads.append(t) + for thread in threads: + thread.join() + + + def detect_and_create_private_key(self): + private_key_text = self.private_key.read() + self.private_key.seek(0) + if '-----BEGIN RSA PRIVATE KEY-----' in private_key_text: + return paramiko.RSAKey.from_private_key(self.private_key) + elif '-----BEGIN DSA PRIVATE KEY-----' in private_key_text: + return paramiko.DSSKey.from_private_key(self.private_key) + else: + raise ValueError('Invalid private key file ' + self.private_key.name) + + + def apply_rules(self, host_ip, rules, private_key): + # connect to the server via ssh + ssh = paramiko.SSHClient() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(host_ip, username='core', allow_agent=False, look_for_keys=False, pkey=private_key) + + # copy the rules to the temp directory + temp_file = '/tmp/' + str(uuid.uuid4()) + + ssh.open_sftp() + sftp = ssh.open_sftp() + sftp.open(temp_file, 'w').write(rules) + + # move the rules in to place and enable and run the iptables-restore.service + commands = [ + 'sudo mv ' + temp_file + ' /var/lib/iptables/rules-save', + 'sudo chown root:root /var/lib/iptables/rules-save', + 'sudo systemctl enable iptables-restore.service', + 'sudo systemctl start iptables-restore.service' + ] + + for command in commands: + stdin, stdout, stderr = ssh.exec_command(command) + stdout.channel.recv_exit_status() + + ssh.close() + + linodeutils.log_success('Applied rule to ' + host_ip) + + def acquire_linode_ips(self): + linodeutils.log_info('Getting info for Linodes from display group: ' + self.node_display_group) + deis_grp = self.request('linode.list') + deis_linodeids = [l.get('LINODEID','') for l in deis_grp if l.get('LPM_DISPLAYGROUP', '') == self.node_display_group] + deis_grp_ips = self.request('linode.ip.list') + self.deis_privateips = [ip.get('IPADDRESS','') for ip in deis_grp_ips if (ip.get('LINODEID','') in deis_linodeids) and (ip.get('ISPUBLIC', 1) == 0)] + self.deis_publicips = [ip.get('IPADDRESS','') for ip in deis_grp_ips if (ip.get('LINODEID','') in deis_linodeids) and (ip.get('ISPUBLIC', 0) == 1)] + + def run(self): + #NOTE: defaults to using display group, then manual input (via nodes/hosts), then discovery_url + if self.node_display_group: + self.acquire_linode_ips() + nodes = self.deis_privateips + hosts = self.deis_publicips + else: + nodes = self.nodes if self.nodes is not None else self.get_nodes_from_args() + hosts = self.hosts if self.hosts is not None else nodes + + node_ips = [] + for ip in nodes: + if self.validate_ip_address(ip): + node_ips.append(ip) + else: + linodeutils.log_warning('Invalid IP will not be added to security group: ' + ip) + + if not len(node_ips) > 0: + raise ValueError('No valid IP addresses in security group.') + + host_ips = [] + for ip in hosts: + if self.validate_ip_address(ip): + host_ips.append(ip) + else: + linodeutils.log_warning('Host has invalid IP address: ' + ip) + + if not len(host_ips) > 0: + raise ValueError('No valid host addresses.') + + linodeutils.log_info('Generating iptables rules...') + rules = self.get_firewall_contents(node_ips) + linodeutils.log_success('Generated rules:') + linodeutils.log_debug(rules) + + linodeutils.log_info('Applying rules...') + self.apply_rules_to_all(host_ips, rules) + linodeutils.log_success('Done!') def main(): - colorama.init() + linodeutils.init() parser = argparse.ArgumentParser(description='Apply a "Security Group" to a Deis cluster') + parser.add_argument('--api-key', dest='linode_api_key', help='Linode API Key') parser.add_argument('--private-key', required=True, type=file, dest='private_key', help='Cluster SSH Private Key') parser.add_argument('--private', action='store_true', dest='private', help='Only allow access to the cluster from the private network') parser.add_argument('--adding-new-nodes', action='store_true', dest='adding_new_nodes', help='When adding new nodes to existing cluster, allows access to etcd') parser.add_argument('--discovery-url', dest='discovery_url', help='Etcd discovery url') - parser.add_argument('--hosts', nargs='+', dest='hosts', help='The public IP addresses of the hosts to apply rules to') + parser.add_argument('--display-group', required=False, dest='node_display_group', help='Display group (used for Linode IP discovery).') + parser.add_argument('--hosts', nargs='+', dest='hosts', help='The public IP addresses of the hosts to apply rules to (for ssh)') + parser.add_argument('--nodes', nargs='+', dest='nodes', help='The private IP addresses of the hosts (for iptable setup)') + parser.set_defaults(cmd=FirewallCommand) + args = parser.parse_args() - - nodes = get_nodes_from_args(args) - hosts = args.hosts if args.hosts is not None else nodes - - node_ips = [] - for ip in nodes: - if validate_ip_address(ip): - node_ips.append(ip) - else: - log_warning('Invalid IP will not be added to security group: ' + ip) - - if not len(node_ips) > 0: - raise ValueError('No valid IP addresses in security group.') - - host_ips = [] - for ip in hosts: - if validate_ip_address(ip): - host_ips.append(ip) - else: - log_warning('Host has invalid IP address: ' + ip) - - if not len(host_ips) > 0: - raise ValueError('No valid host addresses.') - - log_info('Generating iptables rules...') - rules = get_firewall_contents(node_ips, args.private, args.adding_new_nodes) - log_success('Generated rules:') - log_debug(rules) - - log_info('Applying rules...') - apply_rules_to_all(host_ips, rules, args.private_key) - log_success('Done!') - -def log_debug(message): - print(Style.DIM + Fore.MAGENTA + message + Fore.RESET + Style.RESET_ALL) - - -def log_info(message): - print(Fore.CYAN + message + Fore.RESET) - - -def log_warning(message): - print(Fore.YELLOW + message + Fore.RESET) - - -def log_success(message): - print(Style.BRIGHT + Fore.GREEN + message + Fore.RESET + Style.RESET_ALL) - - -def log_error(message): - print(Style.BRIGHT + Fore.RED + message + Fore.RESET + Style.RESET_ALL) - + cmd = args.cmd(args) + args.cmd(args).run() + if __name__ == "__main__": try: main() except Exception as e: - log_error(e.message) + linodeutils.log_error(e.message) sys.exit(1) diff --git a/contrib/linode/create-linode-user-data.py b/contrib/linode/create-linode-user-data.py index 51760ed5a6..23e6a911ad 100755 --- a/contrib/linode/create-linode-user-data.py +++ b/contrib/linode/create-linode-user-data.py @@ -6,39 +6,40 @@ """ import base64 import sys -import os -import collections import argparse import yaml -import colorama -from colorama import Fore, Style import requests +import linodeutils -def combine_dicts(orig_dict, new_dict): - for key, val in new_dict.iteritems(): - if isinstance(val, collections.Mapping): - tmp = combine_dicts(orig_dict.get(key, {}), val) - orig_dict[key] = tmp - elif isinstance(val, list): - orig_dict[key] = (orig_dict.get(key, []) + val) - else: - orig_dict[key] = new_dict[key] - return orig_dict +def validate_public_key(key): + try: + type, key_string, comment = key.split() + data = base64.decodestring(key_string) + return data[4:11] == type + except: + return False -def get_file(name, mode="r", abspath=False): - current_dir = os.path.dirname(__file__) +def generate_etcd_token(): + linodeutils.log_info('Generating new Etcd token...') + data = requests.get('https://discovery.etcd.io/new').text + token = data.replace('https://discovery.etcd.io/', '') + linodeutils.log_success('Generated new token: ' + token) + return token - if abspath: - return file(os.path.abspath(os.path.join(current_dir, name)), mode) - else: - return file(os.path.join(current_dir, name), mode) + +def validate_etcd_token(token): + try: + int(token, 16) + return True + except: + return False def main(): - colorama.init() + linodeutils.init() parser = argparse.ArgumentParser(description='Create Linode User Data') parser.add_argument('--public-key', action='append', required=True, type=file, dest='public_key_files', help='Authorized SSH Keys') @@ -58,14 +59,14 @@ def main(): if validate_public_key(public_key): public_keys.append(public_key) else: - log_warning('Invalid public key: ' + public_key_file.name) + linodeutils.log_warning('Invalid public key: ' + public_key_file.name) if not len(public_keys) > 0: raise ValueError('Must supply at least one valid public key') - linode_user_data = get_file("linode-user-data.yaml", "w", True) - linode_template = get_file("linode-user-data-template.yaml") - coreos_template = get_file("../coreos/user-data.example") + linode_user_data = linodeutils.get_file("linode-user-data.yaml", "w", True) + linode_template = linodeutils.get_file("linode-user-data-template.yaml") + coreos_template = linodeutils.get_file("../coreos/user-data.example") coreos_template_string = coreos_template.read() coreos_template_string = coreos_template_string.replace('#DISCOVERY_URL', 'https://discovery.etcd.io/' + str(etcd_token)) @@ -73,60 +74,18 @@ def main(): configuration_linode_template = yaml.safe_load(linode_template) configuration_coreos_template = yaml.safe_load(coreos_template_string) - configuration = combine_dicts(configuration_coreos_template, configuration_linode_template) + configuration = linodeutils.combine_dicts(configuration_coreos_template, configuration_linode_template) configuration['ssh_authorized_keys'] = public_keys dump = yaml.dump(configuration, default_flow_style=False, default_style='|') with linode_user_data as outfile: outfile.write("#cloud-config\n\n" + dump) - log_success('Wrote Linode user data to ' + linode_user_data.name) - - -def validate_public_key(key): - try: - type, key_string, comment = key.split() - data = base64.decodestring(key_string) - return data[4:11] == type - except: - return False - - -def generate_etcd_token(): - log_info('Generating new Etcd token...') - data = requests.get('https://discovery.etcd.io/new').text - token = data.replace('https://discovery.etcd.io/', '') - log_success('Generated new token: ' + token) - return token - - -def validate_etcd_token(token): - try: - int(token, 16) - return True - except: - return False - - -def log_info(message): - print(Fore.CYAN + message + Fore.RESET) - - -def log_warning(message): - print(Fore.YELLOW + message + Fore.RESET) - - -def log_success(message): - print(Style.BRIGHT + Fore.GREEN + message + Fore.RESET + Style.RESET_ALL) - - -def log_error(message): - print(Style.BRIGHT + Fore.RED + message + Fore.RESET + Style.RESET_ALL) - + linodeutils.log_success('Wrote Linode user data to ' + linode_user_data.name) if __name__ == "__main__": try: main() except Exception as e: - log_error(e.message) + linodeutils.log_error(e.message) sys.exit(1) diff --git a/contrib/linode/linodeapi.py b/contrib/linode/linodeapi.py new file mode 100644 index 0000000000..054348eba2 --- /dev/null +++ b/contrib/linode/linodeapi.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +""" +Provides a class for Linode API commands + +Usage: used by other files as a base class +""" +import requests +import threading +from colorama import Fore, Style + + +class LinodeApiCommand: + def __init__(self, arguments): + self._arguments = vars(arguments) + self._linode_api_key = arguments.linode_api_key if arguments.linode_api_key is not None else '' + + def __getattr__(self, name): + return self._arguments.get(name) + + def request(self, action, **kwargs): + data = '' + if self._linode_api_key: + kwargs['params'] = dict({'api_key': self._linode_api_key, 'api_action': action}.items() + kwargs.get('params', {}).items()) + response = requests.request('get', 'https://api.linode.com/api/', **kwargs) + + json = response.json() + errors = json.get('ERRORARRAY', []) + data = json.get('DATA') + + if len(errors) > 0: + raise IOError(str(errors)) + else: + self.info('Linode api key not provided. Please provide at the start of script to perform this function.') + + return data + + + def run(self): + raise NotImplementedError + + def info(self, message): + print(Fore.MAGENTA + threading.current_thread().name + ': ' + Fore.CYAN + message + Fore.RESET) + + def success(self, message): + print(Fore.MAGENTA + threading.current_thread().name + ': ' + Fore.GREEN + message + Fore.RESET) diff --git a/contrib/linode/linodeutils.py b/contrib/linode/linodeutils.py new file mode 100644 index 0000000000..6804899aa6 --- /dev/null +++ b/contrib/linode/linodeutils.py @@ -0,0 +1,79 @@ +from colorama import Fore, Style +import colorama +import collections +import os + + +def log_debug(message): + print(Style.DIM + Fore.MAGENTA + message + Fore.RESET + Style.RESET_ALL) + + +def log_info(message): + print(Fore.CYAN + message + Fore.RESET) + + +def log_warning(message): + print(Fore.YELLOW + message + Fore.RESET) + + +def log_success(message): + print(Style.BRIGHT + Fore.GREEN + message + Fore.RESET + Style.RESET_ALL) + +def log_minor_success(message): + print(Fore.GREEN + message + Fore.RESET + Style.RESET_ALL) + +def log_error(message): + print(Style.BRIGHT + Fore.RED + message + Fore.RESET + Style.RESET_ALL) + + +''' See provision-cluster.py in method ProvisionCommand._report_created for + an example of use. Each row should be a string tuple. rows is a list of + tuples. ''' +def log_table(rows, header_msg, footer_msg): + + # set up the report constants + divider = Style.BRIGHT + Fore.MAGENTA + ('=' * 109) + Fore.RESET + Style.RESET_ALL + column_format = " {:<20} {:<20} {:<20} {:<20} {:<12} {:>8}" + formatted_header = column_format.format(*('HOSTNAME', 'PUBLIC IP', 'PRIVATE IP', 'GATEWAY', 'DC', 'PLAN')) + + # display the report + print('') + print(divider) + print(divider) + print('') + print(Style.BRIGHT + Fore.LIGHTGREEN_EX + header_msg + Fore.RESET + Style.RESET_ALL) + print('') + print(Style.BRIGHT + Fore.CYAN + formatted_header + Fore.RESET + Style.RESET_ALL) + for row in rows: + print(Fore.CYAN + column_format.format(*row) + Fore.RESET) + print('') + print('') + print(Fore.LIGHTYELLOW_EX + footer_msg + Fore.RESET) + print(divider) + print(divider) + print('') + + +def combine_dicts(orig_dict, new_dict): + for key, val in new_dict.iteritems(): + if isinstance(val, collections.Mapping): + tmp = combine_dicts(orig_dict.get(key, {}), val) + orig_dict[key] = tmp + elif isinstance(val, list): + orig_dict[key] = (orig_dict.get(key, []) + val) + else: + orig_dict[key] = new_dict[key] + return orig_dict + + +def get_file(name, mode="r", abspath=False): + current_dir = os.path.dirname(__file__) + + if abspath: + return file(os.path.abspath(os.path.join(current_dir, name)), mode) + else: + return file(os.path.join(current_dir, name), mode) + + +def init(): + colorama.init() diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index a89b5edf5b..243c2f5555 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -12,41 +12,8 @@ import sys import paramiko -import requests -import colorama -from colorama import Fore, Style - - -class LinodeApiCommand: - def __init__(self, arguments): - self._arguments = vars(arguments) - self._linode_api_key = arguments.linode_api_key - - def __getattr__(self, name): - return self._arguments.get(name) - - def request(self, action, **kwargs): - kwargs['params'] = dict({'api_key': self._linode_api_key, 'api_action': action}.items() + kwargs.get('params', {}).items()) - response = requests.request('get', 'https://api.linode.com/api/', **kwargs) - - json = response.json() - errors = json.get('ERRORARRAY', []) - data = json.get('DATA') - - if len(errors) > 0: - raise IOError(str(errors)) - - return data - - def run(self): - raise NotImplementedError - - def info(self, message): - print(Fore.MAGENTA + threading.current_thread().name + ': ' + Fore.CYAN + message + Fore.RESET) - - def success(self, message): - print(Fore.MAGENTA + threading.current_thread().name + ': ' + Fore.GREEN + message + Fore.RESET) - +from linodeapi import LinodeApiCommand +import linodeutils class ProvisionCommand(LinodeApiCommand): _created_linodes = [] @@ -81,31 +48,9 @@ def _report_created(self): ips.append(linode['public']) firewall_command = './apply-firewall.py --private-key /path/to/key/deis --hosts ' + string.join(ips, ' ') - - # set up the report constants - divider = Style.BRIGHT + Fore.MAGENTA + ('=' * 109) + Fore.RESET + Style.RESET_ALL - column_format = " {:<20} {:<20} {:<20} {:<20} {:<12} {:>8}" - formatted_header = column_format.format(*('HOSTNAME', 'PUBLIC IP', 'PRIVATE IP', 'GATEWAY', 'DC', 'PLAN')) - - # display the report - print('') - print(divider) - print(divider) - print('') - print(Style.BRIGHT + Fore.LIGHTGREEN_EX + ' Successfully provisioned ' + str(self.num_nodes) + ' nodes!' + Fore.RESET + Style.RESET_ALL) - print('') - print(Style.BRIGHT + Fore.CYAN + formatted_header + Fore.RESET + Style.RESET_ALL) - for row in rows: - print(Fore.CYAN + column_format.format(*row) + Fore.RESET) - print('') - print('') - print(Fore.LIGHTYELLOW_EX + ' Finish up your installation by securing your cluster with the following command:' + Fore.RESET) - print('') - print(' ' + firewall_command) - print('') - print(divider) - print(divider) - print('') + header_msg = ' Successfully provisioned ' + str(self.num_nodes) + ' nodes!' + footer_msg = ' Finish up your installation by securing your cluster with the following command:\n ' + firewall_command + '\n' + linodeutils.log_table(rows, header_msg, footer_msg) def _get_plan(self): if self._plan is None: @@ -140,8 +85,8 @@ def _check_num_nodes(self): if self.num_nodes < 1: raise ValueError('Must provision at least one node.') elif self.num_nodes < 3: - print(Fore.YELLOW + 'A Deis cluster must have 3 or more nodes, only continue if you adding to a current cluster.' + Fore.RESET) - print(Fore.YELLOW + 'Continue? (y/n)' + Fore.RESET) + linodeutils.log_warning('A Deis cluster must have 3 or more nodes, only continue if you adding to a current cluster.') + linodeutils.log_warning('Continue? (y/n)') accept = None while True: if accept == 'y': @@ -371,21 +316,20 @@ class ListDataCentersCommand(LinodeApiCommand): def run(self): data = self.request('avail.datacenters') column_format = "{:<4} {:}" - print(Style.BRIGHT + Fore.GREEN + column_format.format(*('ID', 'LOCATION')) + Fore.RESET + Style.RESET_ALL) + linodeutils.log_success(column_format.format(*('ID', 'LOCATION'))) for data_center in data: row = ( data_center.get('DATACENTERID'), data_center.get('LOCATION') ) - print(Fore.GREEN + column_format.format(*row) + Fore.RESET) + linodeutils.log_minor_success(column_format.format(*row)) class ListPlansCommand(LinodeApiCommand): def run(self): data = self.request('avail.linodeplans') column_format = "{:<4} {:<16} {:<8} {:<12} {:}" - print(Style.BRIGHT + Fore.GREEN + column_format.format( - *('ID', 'LABEL', 'CORES', 'RAM', 'PRICE')) + Fore.RESET + Style.RESET_ALL) + linodeutils.log_success(column_format.format(*('ID', 'LABEL', 'CORES', 'RAM', 'PRICE'))) for plan in data: row = ( plan.get('PLANID'), @@ -394,11 +338,11 @@ def run(self): str(plan.get('RAM')) + 'MB', '$' + str(plan.get('PRICE')) ) - print(Fore.GREEN + column_format.format(*row) + Fore.RESET) + linodeutils.log_minor_success(column_format.format(*row)) -if __name__ == '__main__': - colorama.init() +def main(): + linodeutils.init() parser = argparse.ArgumentParser(description='Provision Linode Deis Cluster') parser.add_argument('--api-key', required=True, dest='linode_api_key', help='Linode API Key') @@ -426,10 +370,12 @@ def run(self): list_plans_parser.set_defaults(cmd=ListPlansCommand) args = parser.parse_args() - cmd = args.cmd(args) + args.cmd(args).run() + +if __name__ == "__main__": try: - cmd.run() + main() except Exception as e: - print(Style.BRIGHT + Fore.RED + e.message + Fore.RESET + Style.RESET_ALL) + linodeutils.log_error(e.message) sys.exit(1) diff --git a/docs/installing_deis/linode.rst b/docs/installing_deis/linode.rst index aa79bd5dd0..e169df1826 100644 --- a/docs/installing_deis/linode.rst +++ b/docs/installing_deis/linode.rst @@ -180,17 +180,29 @@ each host. To do so, run: $ ./apply-firewall.py --private-key /path/to/key/deis --hosts 1.2.3.4 11.22.33.44 111.222.33.44 + +Or, you can provide the display group (NOTE: the default display group is ``deis``) to search for the +nodes using the Linode API, by running: + +.. code-block:: console -The script will use the etcd discovery url in the generated ``linode-user-data.yaml`` file or the value of the -discovery-url argument, if provided, to find all of the nodes in your cluster and create iptables rules to allow -connections between nodes while blocking outside connections automatically. Full command usage: + $ ./apply-firewall.py --private-key /path/to/key/deis --api-key YOUR_LINODE_API_KEY --display-group YOUR_DISPLAY_GROUP + + +The script will use either the Linode API or the etcd discovery url to find all of the nodes in your +cluster and create iptables rules to allow connections between nodes while blocking outside connections +automatically. Note that when discovering node ips, the ``--display-group`` parameter has highest priority, +then manual specification via ``--nodes`` and ``--hosts`` (i.e. public and private ips), then the etcd +discovery url via parameter ``--display-url`` or the ``linode-user-data.yaml`` file. Full command usage: .. code-block:: console usage: apply-firewall.py [-h] --private-key PRIVATE_KEY [--private] [--adding-new-nodes] [--discovery-url DISCOVERY_URL] + [--display-group DISPLAY_GROUP] [--hosts HOSTS [HOSTS ...]] + [--nodes HOSTS [HOSTS ...]] Apply a "Security Group" to a Deis cluster @@ -200,11 +212,15 @@ connections between nodes while blocking outside connections automatically. Full Cluster SSH Private Key --private Only allow access to the cluster from the private network - --adding-new-nodes When adding new nodes to existing cluster, allows access to etcd + --adding-new-nodes When adding new nodes to existing cluster, allows access to etcd + --display-group DISPLAY_GROUP + Linode display group for nodes --discovery-url DISCOVERY_URL Etcd discovery url --hosts HOSTS [HOSTS ...] - The IP addresses of the hosts to apply rules to + The public IP addresses of the hosts + --nodes HOSTS [HOSTS ...] + The private IP addresses of the hosts Install Deis Platform @@ -217,20 +233,23 @@ start installing the platform. Adding Nodes to an Existing Cluster ----------------------------------- -When adding one or more nodes to an existing CoreOS setup, ``etcd`` requires access to ports 2379 -and 2380. +When adding one or more nodes to an existing CoreOS setup, ``etcd`` will be `added as a proxy to +the existing cluster`_. The setup of a proxy requires access to ports 2379 and 2380 of the existing +nodes in the cluster. -When adding nodes to the cluster, before cluster provisioning, run: +In order to open up these ports, before cluster provisioning, run: .. code-block:: console - $ ./apply-firewall.py --private-key /path/to/key/deis --hosts 1.2.3.4 11.22.33.44 111.222.33.44 --adding-new-nodes + $ ./apply-firewall.py --private-key /path/to/key/deis --hosts 1.2.3.4 11.22.33.44 111.222.33.44 + --adding-new-nodes -Then provision the cluster as described above and apply security groups settings using ``./apply-firewall.py`` -without the ``--adding-new-nodes`` parameter. +Then provision the cluster as described above and afterwards reapply the firewall using +``./apply-firewall.py`` without the ``--adding-new-nodes`` parameter. +.. _`added as a proxy to the existing cluster`: https://coreos.com/etcd/docs/latest/clustering.html#public-etcd-discovery-service .. _`contrib/linode`: https://github.com/deis/deis/tree/master/contrib/linode .. _`Linode Account Settings`: https://manager.linode.com/account/settings .. _`Linode API Keys`: https://manager.linode.com/profile/api From cd41a6116c45a92fa3159f7166e1da290f123659 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 26 Jan 2016 16:01:55 -0800 Subject: [PATCH 019/178] chore(Godeps): bump googleapi --- Godeps/Godeps.json | 2 +- .../src/google.golang.org/api/LICENSE | 27 + .../api/googleapi/googleapi.go | 316 +++------ .../api/googleapi/googleapi_test.go | 599 ------------------ .../api/googleapi/types_test.go | 44 -- 5 files changed, 99 insertions(+), 889 deletions(-) create mode 100644 Godeps/_workspace/src/google.golang.org/api/LICENSE delete mode 100644 Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi_test.go delete mode 100644 Godeps/_workspace/src/google.golang.org/api/googleapi/types_test.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 365750013a..47e902e779 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -346,7 +346,7 @@ }, { "ImportPath": "google.golang.org/api/googleapi", - "Rev": "c83ee8e9b7e6c40a486c0992a963ea8b6911de67" + "Rev": "0caa37974a5f5ae67172acf68b4970f7864f994c" }, { "ImportPath": "gopkg.in/tomb.v1", diff --git a/Godeps/_workspace/src/google.golang.org/api/LICENSE b/Godeps/_workspace/src/google.golang.org/api/LICENSE new file mode 100644 index 0000000000..263aa7a0c1 --- /dev/null +++ b/Godeps/_workspace/src/google.golang.org/api/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi.go b/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi.go index bfd740f232..8796e3e097 100644 --- a/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi.go +++ b/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi.go @@ -9,22 +9,13 @@ package googleapi import ( "bytes" "encoding/json" - "errors" "fmt" "io" "io/ioutil" - "mime/multipart" "net/http" - "net/textproto" "net/url" - "regexp" - "strconv" "strings" - "sync" - "time" - "golang.org/x/net/context" - "golang.org/x/net/context/ctxhttp" "google.golang.org/api/googleapi/internal/uritemplates" ) @@ -56,14 +47,15 @@ type ServerResponse struct { const ( Version = "0.5" - // statusResumeIncomplete is the code returned by the Google uploader when the transfer is not yet complete. - statusResumeIncomplete = 308 - // UserAgent is the header string used to identify this package. UserAgent = "google-api-go-client/" + Version - // uploadPause determines the delay between failed upload attempts - uploadPause = 1 * time.Second + // The default chunk size to use for resumable uplods if not specified by the user. + DefaultUploadChunkSize = 8 * 1024 * 1024 + + // The minimum chunk size that can be used for resumable uploads. All + // user-specified chunk sizes must be multiple of this value. + MinUploadChunkSize = 256 * 1024 ) // Error contains an error response from the server. @@ -189,52 +181,6 @@ func (wrap MarshalStyle) JSONReader(v interface{}) (io.Reader, error) { return buf, nil } -func getMediaType(media io.Reader) (io.Reader, string) { - if typer, ok := media.(ContentTyper); ok { - return media, typer.ContentType() - } - - pr, pw := io.Pipe() - typ := "application/octet-stream" - buf, err := ioutil.ReadAll(io.LimitReader(media, 512)) - if err != nil { - pw.CloseWithError(fmt.Errorf("error reading media: %v", err)) - return pr, typ - } - typ = http.DetectContentType(buf) - mr := io.MultiReader(bytes.NewReader(buf), media) - go func() { - _, err = io.Copy(pw, mr) - if err != nil { - pw.CloseWithError(fmt.Errorf("error reading media: %v", err)) - return - } - pw.Close() - }() - return pr, typ -} - -// DetectMediaType detects and returns the content type of the provided media. -// If the type can not be determined, "application/octet-stream" is returned. -func DetectMediaType(media io.ReaderAt) string { - if typer, ok := media.(ContentTyper); ok { - return typer.ContentType() - } - - typ := "application/octet-stream" - buf := make([]byte, 1024) - n, err := media.ReadAt(buf, 0) - buf = buf[:n] - if err == nil || err == io.EOF { - typ = http.DetectContentType(buf) - } - return typ -} - -type Lengther interface { - Len() int -} - // endingWithErrorReader from r until it returns an error. If the // final error from r is io.EOF and e is non-nil, e is used instead. type endingWithErrorReader struct { @@ -250,12 +196,6 @@ func (er endingWithErrorReader) Read(p []byte) (n int, err error) { return } -func typeHeader(contentType string) textproto.MIMEHeader { - h := make(textproto.MIMEHeader) - h.Set("Content-Type", contentType) - return h -} - // countingWriter counts the number of bytes it receives to write, but // discards them. type countingWriter struct { @@ -267,203 +207,59 @@ func (w countingWriter) Write(p []byte) (int, error) { return len(p), nil } -// ConditionallyIncludeMedia does nothing if media is nil. -// -// bodyp is an in/out parameter. It should initially point to the -// reader of the application/json (or whatever) payload to send in the -// API request. It's updated to point to the multipart body reader. -// -// ctypep is an in/out parameter. It should initially point to the -// content type of the bodyp, usually "application/json". It's updated -// to the "multipart/related" content type, with random boundary. -// -// The return value is the content-length of the entire multpart body. -func ConditionallyIncludeMedia(media io.Reader, bodyp *io.Reader, ctypep *string) (cancel func(), ok bool) { - if media == nil { - return - } - // Get the media type, which might return a different reader instance. - var mediaType string - media, mediaType = getMediaType(media) - - body, bodyType := *bodyp, *ctypep - - pr, pw := io.Pipe() - mpw := multipart.NewWriter(pw) - *bodyp = pr - *ctypep = "multipart/related; boundary=" + mpw.Boundary() - go func() { - w, err := mpw.CreatePart(typeHeader(bodyType)) - if err != nil { - mpw.Close() - pw.CloseWithError(fmt.Errorf("googleapi: body CreatePart failed: %v", err)) - return - } - _, err = io.Copy(w, body) - if err != nil { - mpw.Close() - pw.CloseWithError(fmt.Errorf("googleapi: body Copy failed: %v", err)) - return - } - - w, err = mpw.CreatePart(typeHeader(mediaType)) - if err != nil { - mpw.Close() - pw.CloseWithError(fmt.Errorf("googleapi: media CreatePart failed: %v", err)) - return - } - _, err = io.Copy(w, media) - if err != nil { - mpw.Close() - pw.CloseWithError(fmt.Errorf("googleapi: media Copy failed: %v", err)) - return - } - mpw.Close() - pw.Close() - }() - cancel = func() { pw.CloseWithError(errAborted) } - return cancel, true -} - -var errAborted = errors.New("googleapi: upload aborted") - // ProgressUpdater is a function that is called upon every progress update of a resumable upload. // This is the only part of a resumable upload (from googleapi) that is usable by the developer. // The remaining usable pieces of resumable uploads is exposed in each auto-generated API. type ProgressUpdater func(current, total int64) -// ResumableUpload is used by the generated APIs to provide resumable uploads. -// It is not used by developers directly. -type ResumableUpload struct { - Client *http.Client - // URI is the resumable resource destination provided by the server after specifying "&uploadType=resumable". - URI string - UserAgent string // User-Agent for header of the request - // Media is the object being uploaded. - Media io.ReaderAt - // MediaType defines the media type, e.g. "image/jpeg". - MediaType string - // ContentLength is the full size of the object being uploaded. - ContentLength int64 - - mu sync.Mutex // guards progress - progress int64 // number of bytes uploaded so far - started bool // whether the upload has been started - - // Callback is an optional function that will be called upon every progress update. - Callback ProgressUpdater +type MediaOption interface { + setOptions(o *MediaOptions) } -var ( - // rangeRE matches the transfer status response from the server. $1 is the last byte index uploaded. - rangeRE = regexp.MustCompile(`^bytes=0\-(\d+)$`) - // chunkSize is the size of the chunks created during a resumable upload and should be a power of two. - // 1<<18 is the minimum size supported by the Google uploader, and there is no maximum. - chunkSize int64 = 1 << 18 -) +type contentTypeOption string -// Progress returns the number of bytes uploaded at this point. -func (rx *ResumableUpload) Progress() int64 { - rx.mu.Lock() - defer rx.mu.Unlock() - return rx.progress +func (ct contentTypeOption) setOptions(o *MediaOptions) { + o.ContentType = string(ct) } -func (rx *ResumableUpload) transferStatus(ctx context.Context) (int64, *http.Response, error) { - req, _ := http.NewRequest("POST", rx.URI, nil) - req.ContentLength = 0 - req.Header.Set("User-Agent", rx.UserAgent) - req.Header.Set("Content-Range", fmt.Sprintf("bytes */%v", rx.ContentLength)) - res, err := ctxhttp.Do(ctx, rx.Client, req) - if err != nil || res.StatusCode != statusResumeIncomplete { - return 0, res, err - } - var start int64 - if m := rangeRE.FindStringSubmatch(res.Header.Get("Range")); len(m) == 2 { - start, err = strconv.ParseInt(m[1], 10, 64) - if err != nil { - return 0, nil, fmt.Errorf("unable to parse range size %v", m[1]) - } - start += 1 // Start at the next byte +// ContentType returns a MediaOption which sets the content type of data to be uploaded. +func ContentType(ctype string) MediaOption { + return contentTypeOption(ctype) +} + +type chunkSizeOption int + +func (cs chunkSizeOption) setOptions(o *MediaOptions) { + size := int(cs) + if size%MinUploadChunkSize != 0 { + size += MinUploadChunkSize - (size % MinUploadChunkSize) } - return start, res, nil + o.ChunkSize = size } -type chunk struct { - body io.Reader - size int64 - err error +// ChunkSize returns a MediaOption which sets the chunk size for media uploads. +// size will be rounded up to the nearest multiple of 256K. +// Media which contains fewer than size bytes will be uploaded in a single request. +// Media which contains size bytes or more will be uploaded in separate chunks. +// If size is zero, media will be uploaded in a single request. +func ChunkSize(size int) MediaOption { + return chunkSizeOption(size) } -func (rx *ResumableUpload) transferChunks(ctx context.Context) (*http.Response, error) { - var start int64 - var err error - res := &http.Response{} - if rx.started { - start, res, err = rx.transferStatus(ctx) - if err != nil || res.StatusCode != statusResumeIncomplete { - return res, err - } - } - rx.started = true - - for { - select { // Check for cancellation - case <-ctx.Done(): - res.StatusCode = http.StatusRequestTimeout - return res, ctx.Err() - default: - } - reqSize := rx.ContentLength - start - if reqSize > chunkSize { - reqSize = chunkSize - } - r := io.NewSectionReader(rx.Media, start, reqSize) - req, _ := http.NewRequest("POST", rx.URI, r) - req.ContentLength = reqSize - req.Header.Set("Content-Range", fmt.Sprintf("bytes %v-%v/%v", start, start+reqSize-1, rx.ContentLength)) - req.Header.Set("Content-Type", rx.MediaType) - req.Header.Set("User-Agent", rx.UserAgent) - res, err = ctxhttp.Do(ctx, rx.Client, req) - start += reqSize - if err == nil && (res.StatusCode == statusResumeIncomplete || res.StatusCode == http.StatusOK) { - rx.mu.Lock() - rx.progress = start // keep track of number of bytes sent so far - rx.mu.Unlock() - if rx.Callback != nil { - rx.Callback(start, rx.ContentLength) - } - } - if err != nil || res.StatusCode != statusResumeIncomplete { - break - } - } - return res, err +// MediaOptions stores options for customizing media upload. It is not used by developers directly. +type MediaOptions struct { + ContentType string + ChunkSize int } -var sleep = time.Sleep // override in unit tests - -// Upload starts the process of a resumable upload with a cancellable context. -// It retries indefinitely (with a pause of uploadPause between attempts) until cancelled. -// It is called from the auto-generated API code and is not visible to the user. -// rx is private to the auto-generated API code. -func (rx *ResumableUpload) Upload(ctx context.Context) (*http.Response, error) { - var res *http.Response - var err error - for { - res, err = rx.transferChunks(ctx) - if err != nil || res.StatusCode == http.StatusCreated || res.StatusCode == http.StatusOK { - return res, err - } - select { // Check for cancellation - case <-ctx.Done(): - res.StatusCode = http.StatusRequestTimeout - return res, ctx.Err() - default: - } - sleep(uploadPause) +// ProcessMediaOptions stores options from opts in a MediaOptions. +// It is not used by developers directly. +func ProcessMediaOptions(opts []MediaOption) *MediaOptions { + mo := &MediaOptions{ChunkSize: DefaultUploadChunkSize} + for _, o := range opts { + o.setOptions(mo) } - return res, err + return mo } func ResolveRelative(basestr, relstr string) string { @@ -590,3 +386,33 @@ func CombineFields(s []Field) string { } return strings.Join(r, ",") } + +// A CallOption is an optional argument to an API call. +// It should be treated as an opaque value by users of Google APIs. +// +// A CallOption is something that configures an API call in a way that is +// not specific to that API; for instance, controlling the quota user for +// an API call is common across many APIs, and is thus a CallOption. +type CallOption interface { + Get() (key, value string) +} + +// QuotaUser returns a CallOption that will set the quota user for a call. +// The quota user can be used by server-side applications to control accounting. +// It can be an arbitrary string up to 40 characters, and will override UserIP +// if both are provided. +func QuotaUser(u string) CallOption { return quotaUser(u) } + +type quotaUser string + +func (q quotaUser) Get() (string, string) { return "quotaUser", string(q) } + +// UserIP returns a CallOption that will set the "userIp" parameter of a call. +// This should be the IP address of the originating request. +func UserIP(ip string) CallOption { return userIP(ip) } + +type userIP string + +func (i userIP) Get() (string, string) { return "userIp", string(i) } + +// TODO: Fields too diff --git a/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi_test.go b/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi_test.go deleted file mode 100644 index 601d67c864..0000000000 --- a/Godeps/_workspace/src/google.golang.org/api/googleapi/googleapi_test.go +++ /dev/null @@ -1,599 +0,0 @@ -// Copyright 2011 Google Inc. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package googleapi - -import ( - "bytes" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "net/url" - "os" - "reflect" - "regexp" - "strconv" - "strings" - "testing" - "time" - - "golang.org/x/net/context" -) - -type SetOpaqueTest struct { - in *url.URL - wantRequestURI string -} - -var setOpaqueTests = []SetOpaqueTest{ - // no path - { - &url.URL{ - Scheme: "http", - Host: "www.golang.org", - }, - "http://www.golang.org", - }, - // path - { - &url.URL{ - Scheme: "http", - Host: "www.golang.org", - Path: "/", - }, - "http://www.golang.org/", - }, - // file with hex escaping - { - &url.URL{ - Scheme: "https", - Host: "www.golang.org", - Path: "/file%20one&two", - }, - "https://www.golang.org/file%20one&two", - }, - // query - { - &url.URL{ - Scheme: "http", - Host: "www.golang.org", - Path: "/", - RawQuery: "q=go+language", - }, - "http://www.golang.org/?q=go+language", - }, - // file with hex escaping in path plus query - { - &url.URL{ - Scheme: "https", - Host: "www.golang.org", - Path: "/file%20one&two", - RawQuery: "q=go+language", - }, - "https://www.golang.org/file%20one&two?q=go+language", - }, - // query with hex escaping - { - &url.URL{ - Scheme: "http", - Host: "www.golang.org", - Path: "/", - RawQuery: "q=go%20language", - }, - "http://www.golang.org/?q=go%20language", - }, -} - -// prefixTmpl is a template for the expected prefix of the output of writing -// an HTTP request. -const prefixTmpl = "GET %v HTTP/1.1\r\nHost: %v\r\n" - -func TestSetOpaque(t *testing.T) { - for _, test := range setOpaqueTests { - u := *test.in - SetOpaque(&u) - - w := &bytes.Buffer{} - r := &http.Request{URL: &u} - if err := r.Write(w); err != nil { - t.Errorf("write request: %v", err) - continue - } - - prefix := fmt.Sprintf(prefixTmpl, test.wantRequestURI, test.in.Host) - if got := string(w.Bytes()); !strings.HasPrefix(got, prefix) { - t.Errorf("got %q expected prefix %q", got, prefix) - } - } -} - -type ExpandTest struct { - in string - expansions map[string]string - want string -} - -var expandTests = []ExpandTest{ - // no expansions - { - "http://www.golang.org/", - map[string]string{}, - "http://www.golang.org/", - }, - // one expansion, no escaping - { - "http://www.golang.org/{bucket}/delete", - map[string]string{ - "bucket": "red", - }, - "http://www.golang.org/red/delete", - }, - // one expansion, with hex escapes - { - "http://www.golang.org/{bucket}/delete", - map[string]string{ - "bucket": "red/blue", - }, - "http://www.golang.org/red%2Fblue/delete", - }, - // one expansion, with space - { - "http://www.golang.org/{bucket}/delete", - map[string]string{ - "bucket": "red or blue", - }, - "http://www.golang.org/red%20or%20blue/delete", - }, - // expansion not found - { - "http://www.golang.org/{object}/delete", - map[string]string{ - "bucket": "red or blue", - }, - "http://www.golang.org//delete", - }, - // multiple expansions - { - "http://www.golang.org/{one}/{two}/{three}/get", - map[string]string{ - "one": "ONE", - "two": "TWO", - "three": "THREE", - }, - "http://www.golang.org/ONE/TWO/THREE/get", - }, - // utf-8 characters - { - "http://www.golang.org/{bucket}/get", - map[string]string{ - "bucket": "£100", - }, - "http://www.golang.org/%C2%A3100/get", - }, - // punctuations - { - "http://www.golang.org/{bucket}/get", - map[string]string{ - "bucket": `/\@:,.`, - }, - "http://www.golang.org/%2F%5C%40%3A%2C./get", - }, - // mis-matched brackets - { - "http://www.golang.org/{bucket/get", - map[string]string{ - "bucket": "red", - }, - "http://www.golang.org/{bucket/get", - }, - // "+" prefix for suppressing escape - // See also: http://tools.ietf.org/html/rfc6570#section-3.2.3 - { - "http://www.golang.org/{+topic}", - map[string]string{ - "topic": "/topics/myproject/mytopic", - }, - // The double slashes here look weird, but it's intentional - "http://www.golang.org//topics/myproject/mytopic", - }, -} - -func TestExpand(t *testing.T) { - for i, test := range expandTests { - u := url.URL{ - Path: test.in, - } - Expand(&u, test.expansions) - got := u.Path - if got != test.want { - t.Errorf("got %q expected %q in test %d", got, test.want, i+1) - } - } -} - -type CheckResponseTest struct { - in *http.Response - bodyText string - want error - errText string -} - -var checkResponseTests = []CheckResponseTest{ - { - &http.Response{ - StatusCode: http.StatusOK, - }, - "", - nil, - "", - }, - { - &http.Response{ - StatusCode: http.StatusInternalServerError, - }, - `{"error":{}}`, - &Error{ - Code: http.StatusInternalServerError, - Body: `{"error":{}}`, - }, - `googleapi: got HTTP response code 500 with body: {"error":{}}`, - }, - { - &http.Response{ - StatusCode: http.StatusNotFound, - }, - `{"error":{"message":"Error message for StatusNotFound."}}`, - &Error{ - Code: http.StatusNotFound, - Message: "Error message for StatusNotFound.", - Body: `{"error":{"message":"Error message for StatusNotFound."}}`, - }, - "googleapi: Error 404: Error message for StatusNotFound.", - }, - { - &http.Response{ - StatusCode: http.StatusBadRequest, - }, - `{"error":"invalid_token","error_description":"Invalid Value"}`, - &Error{ - Code: http.StatusBadRequest, - Body: `{"error":"invalid_token","error_description":"Invalid Value"}`, - }, - `googleapi: got HTTP response code 400 with body: {"error":"invalid_token","error_description":"Invalid Value"}`, - }, - { - &http.Response{ - StatusCode: http.StatusBadRequest, - }, - `{"error":{"errors":[{"domain":"usageLimits","reason":"keyInvalid","message":"Bad Request"}],"code":400,"message":"Bad Request"}}`, - &Error{ - Code: http.StatusBadRequest, - Errors: []ErrorItem{ - { - Reason: "keyInvalid", - Message: "Bad Request", - }, - }, - Body: `{"error":{"errors":[{"domain":"usageLimits","reason":"keyInvalid","message":"Bad Request"}],"code":400,"message":"Bad Request"}}`, - Message: "Bad Request", - }, - "googleapi: Error 400: Bad Request, keyInvalid", - }, -} - -func TestCheckResponse(t *testing.T) { - for _, test := range checkResponseTests { - res := test.in - if test.bodyText != "" { - res.Body = ioutil.NopCloser(strings.NewReader(test.bodyText)) - } - g := CheckResponse(res) - if !reflect.DeepEqual(g, test.want) { - t.Errorf("CheckResponse: got %v, want %v", g, test.want) - gotJson, err := json.Marshal(g) - if err != nil { - t.Error(err) - } - wantJson, err := json.Marshal(test.want) - if err != nil { - t.Error(err) - } - t.Errorf("json(got): %q\njson(want): %q", string(gotJson), string(wantJson)) - } - if g != nil && g.Error() != test.errText { - t.Errorf("CheckResponse: unexpected error message.\nGot: %q\nwant: %q", g, test.errText) - } - } -} - -type VariantPoint struct { - Type string - Coordinates []float64 -} - -type VariantTest struct { - in map[string]interface{} - result bool - want VariantPoint -} - -var coords = []interface{}{1.0, 2.0} - -var variantTests = []VariantTest{ - { - in: map[string]interface{}{ - "type": "Point", - "coordinates": coords, - }, - result: true, - want: VariantPoint{ - Type: "Point", - Coordinates: []float64{1.0, 2.0}, - }, - }, - { - in: map[string]interface{}{ - "type": "Point", - "bogus": coords, - }, - result: true, - want: VariantPoint{ - Type: "Point", - }, - }, -} - -func TestVariantType(t *testing.T) { - for _, test := range variantTests { - if g := VariantType(test.in); g != test.want.Type { - t.Errorf("VariantType(%v): got %v, want %v", test.in, g, test.want.Type) - } - } -} - -func TestConvertVariant(t *testing.T) { - for _, test := range variantTests { - g := VariantPoint{} - r := ConvertVariant(test.in, &g) - if r != test.result { - t.Errorf("ConvertVariant(%v): got %v, want %v", test.in, r, test.result) - } - if !reflect.DeepEqual(g, test.want) { - t.Errorf("ConvertVariant(%v): got %v, want %v", test.in, g, test.want) - } - } -} - -type unexpectedReader struct{} - -func (unexpectedReader) Read([]byte) (int, error) { - return 0, fmt.Errorf("unexpected read in test.") -} - -var contentRangeRE = regexp.MustCompile(`^bytes (\d+)\-(\d+)/(\d+)$`) - -func (t *testTransport) RoundTrip(req *http.Request) (*http.Response, error) { - t.req = req - if rng := req.Header.Get("Content-Range"); rng != "" && !strings.HasPrefix(rng, "bytes */") { // Read the data - m := contentRangeRE.FindStringSubmatch(rng) - if len(m) != 4 { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - start, err := strconv.ParseInt(m[1], 10, 64) - if err != nil { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - end, err := strconv.ParseInt(m[2], 10, 64) - if err != nil { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - totalSize, err := strconv.ParseInt(m[3], 10, 64) - if err != nil { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - partialSize := end - start + 1 - t.buf, err = ioutil.ReadAll(req.Body) - if err != nil || int64(len(t.buf)) != partialSize { - return nil, fmt.Errorf("unable to read %v bytes from request data, n=%v: %v", partialSize, len(t.buf), err) - } - if totalSize == end+1 { - t.statusCode = 200 // signify completion of transfer - } - } - f := ioutil.NopCloser(unexpectedReader{}) - res := &http.Response{ - Body: f, - StatusCode: t.statusCode, - Header: http.Header{}, - } - if t.rangeVal != "" { - res.Header.Set("Range", t.rangeVal) - } - return res, nil -} - -type testTransport struct { - req *http.Request - statusCode int - rangeVal string - want int64 - buf []byte -} - -var statusTests = []*testTransport{ - &testTransport{statusCode: 308, want: 0}, - &testTransport{statusCode: 308, rangeVal: "bytes=0-0", want: 1}, - &testTransport{statusCode: 308, rangeVal: "bytes=0-42", want: 43}, -} - -func TestTransferStatus(t *testing.T) { - ctx := context.Background() - for _, tr := range statusTests { - rx := &ResumableUpload{ - Client: &http.Client{Transport: tr}, - } - g, _, err := rx.transferStatus(ctx) - if err != nil { - t.Error(err) - } - if g != tr.want { - t.Errorf("transferStatus got %v, want %v", g, tr.want) - } - } -} - -func (t *interruptedTransport) RoundTrip(req *http.Request) (*http.Response, error) { - t.req = req - if rng := req.Header.Get("Content-Range"); rng != "" && !strings.HasPrefix(rng, "bytes */") { - t.interruptCount += 1 - if t.interruptCount%7 == 0 { // Respond with a "service unavailable" error - res := &http.Response{ - StatusCode: http.StatusServiceUnavailable, - Header: http.Header{}, - } - t.rangeVal = fmt.Sprintf("bytes=0-%v", len(t.buf)-1) // Set the response for next time - return res, nil - } - m := contentRangeRE.FindStringSubmatch(rng) - if len(m) != 4 { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - start, err := strconv.ParseInt(m[1], 10, 64) - if err != nil { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - end, err := strconv.ParseInt(m[2], 10, 64) - if err != nil { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - totalSize, err := strconv.ParseInt(m[3], 10, 64) - if err != nil { - return nil, fmt.Errorf("unable to parse content range: %v", rng) - } - partialSize := end - start + 1 - buf, err := ioutil.ReadAll(req.Body) - if err != nil || int64(len(buf)) != partialSize { - return nil, fmt.Errorf("unable to read %v bytes from request data, n=%v: %v", partialSize, len(buf), err) - } - t.buf = append(t.buf, buf...) - if totalSize == end+1 { - t.statusCode = 200 // signify completion of transfer - } - } - f := ioutil.NopCloser(unexpectedReader{}) - res := &http.Response{ - Body: f, - StatusCode: t.statusCode, - Header: http.Header{}, - } - if t.rangeVal != "" { - res.Header.Set("Range", t.rangeVal) - } - return res, nil -} - -type interruptedTransport struct { - req *http.Request - statusCode int - rangeVal string - interruptCount int - buf []byte - progressBuf string -} - -func (tr *interruptedTransport) ProgressUpdate(current, total int64) { - tr.progressBuf += fmt.Sprintf("%v, %v\n", current, total) -} - -func TestInterruptedTransferChunks(t *testing.T) { - f, err := os.Open("googleapi.go") - if err != nil { - t.Fatalf("unable to open googleapi.go: %v", err) - } - defer f.Close() - slurp, err := ioutil.ReadAll(f) - if err != nil { - t.Fatalf("unable to slurp file: %v", err) - } - st, err := f.Stat() - if err != nil { - t.Fatalf("unable to stat googleapi.go: %v", err) - } - tr := &interruptedTransport{ - statusCode: 308, - buf: make([]byte, 0, st.Size()), - } - oldChunkSize := chunkSize - defer func() { chunkSize = oldChunkSize }() - chunkSize = 100 // override to process small chunks for test. - - sleep = func(time.Duration) {} // override time.Sleep - rx := &ResumableUpload{ - Client: &http.Client{Transport: tr}, - Media: f, - MediaType: "text/plain", - ContentLength: st.Size(), - Callback: tr.ProgressUpdate, - } - res, err := rx.Upload(context.Background()) - if err != nil || res == nil || res.StatusCode != http.StatusOK { - if res == nil { - t.Errorf("transferChunks not successful, res=nil: %v", err) - } else { - t.Errorf("transferChunks not successful, statusCode=%v: %v", res.StatusCode, err) - } - } - if len(tr.buf) != len(slurp) || bytes.Compare(tr.buf, slurp) != 0 { - t.Errorf("transferred file corrupted:\ngot %s\nwant %s", tr.buf, slurp) - } - w := "" - for i := chunkSize; i <= st.Size(); i += chunkSize { - w += fmt.Sprintf("%v, %v\n", i, st.Size()) - } - if st.Size()%chunkSize != 0 { - w += fmt.Sprintf("%v, %v\n", st.Size(), st.Size()) - } - if tr.progressBuf != w { - t.Errorf("progress update error, got %v, want %v", tr.progressBuf, w) - } -} - -func TestCancelUpload(t *testing.T) { - f, err := os.Open("googleapi.go") - if err != nil { - t.Fatalf("unable to open googleapi.go: %v", err) - } - defer f.Close() - st, err := f.Stat() - if err != nil { - t.Fatalf("unable to stat googleapi.go: %v", err) - } - tr := &interruptedTransport{ - statusCode: 308, - buf: make([]byte, 0, st.Size()), - } - oldChunkSize := chunkSize - defer func() { chunkSize = oldChunkSize }() - chunkSize = 100 // override to process small chunks for test. - - sleep = func(time.Duration) {} // override time.Sleep - rx := &ResumableUpload{ - Client: &http.Client{Transport: tr}, - Media: f, - MediaType: "text/plain", - ContentLength: st.Size(), - Callback: tr.ProgressUpdate, - } - ctx, cancelFunc := context.WithCancel(context.Background()) - cancelFunc() // stop the upload that hasn't started yet - res, err := rx.Upload(ctx) - if err == nil || res == nil || res.StatusCode != http.StatusRequestTimeout { - if res == nil { - t.Errorf("transferChunks not successful, got res=nil, err=%v, want StatusRequestTimeout", err) - } else { - t.Errorf("transferChunks not successful, got statusCode=%v, err=%v, want StatusRequestTimeout", res.StatusCode, err) - } - } -} diff --git a/Godeps/_workspace/src/google.golang.org/api/googleapi/types_test.go b/Godeps/_workspace/src/google.golang.org/api/googleapi/types_test.go deleted file mode 100644 index a6b2045156..0000000000 --- a/Godeps/_workspace/src/google.golang.org/api/googleapi/types_test.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2013 Google Inc. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package googleapi - -import ( - "encoding/json" - "reflect" - "testing" -) - -func TestTypes(t *testing.T) { - type T struct { - I32 Int32s - I64 Int64s - U32 Uint32s - U64 Uint64s - F64 Float64s - } - v := &T{ - I32: Int32s{-1, 2, 3}, - I64: Int64s{-1, 2, 1 << 33}, - U32: Uint32s{1, 2}, - U64: Uint64s{1, 2, 1 << 33}, - F64: Float64s{1.5, 3.33}, - } - got, err := json.Marshal(v) - if err != nil { - t.Fatal(err) - } - want := `{"I32":["-1","2","3"],"I64":["-1","2","8589934592"],"U32":["1","2"],"U64":["1","2","8589934592"],"F64":["1.5","3.33"]}` - if string(got) != want { - t.Fatalf("Marshal mismatch.\n got: %s\nwant: %s\n", got, want) - } - - v2 := new(T) - if err := json.Unmarshal(got, v2); err != nil { - t.Fatalf("Unmarshal: %v", err) - } - if !reflect.DeepEqual(v, v2) { - t.Fatalf("Unmarshal didn't produce same results.\n got: %#v\nwant: %#v\n", v, v2) - } -} From 1a314c284802a4bc6d9b18a3a430da8aae5c5797 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 26 Jan 2016 16:04:02 -0800 Subject: [PATCH 020/178] chore(Godeps): remove unused packages --- Godeps/Godeps.json | 25 - .../src/github.com/golang/glog/LICENSE | 191 --- .../src/github.com/golang/glog/README | 44 - .../src/github.com/golang/glog/glog.go | 1177 ----------------- .../src/github.com/golang/glog/glog_file.go | 124 -- .../src/github.com/golang/glog/glog_test.go | 415 ------ .../src/github.com/kardianos/osext/LICENSE | 27 - .../src/github.com/kardianos/osext/README.md | 14 - .../src/github.com/kardianos/osext/osext.go | 27 - .../github.com/kardianos/osext/osext_plan9.go | 20 - .../kardianos/osext/osext_procfs.go | 36 - .../kardianos/osext/osext_sysctl.go | 79 -- .../github.com/kardianos/osext/osext_test.go | 203 --- .../kardianos/osext/osext_windows.go | 34 - .../src/github.com/leeor/etcd-sync/.gitignore | 3 - .../src/github.com/leeor/etcd-sync/LICENSE | 13 - .../src/github.com/leeor/etcd-sync/README.md | 25 - .../src/github.com/leeor/etcd-sync/mutex.go | 249 ---- .../github.com/leeor/etcd-sync/mutex_test.go | 403 ------ .../github.com/progrium/go-basher/.gitignore | 1 - .../github.com/progrium/go-basher/.travis.yml | 9 - .../src/github.com/progrium/go-basher/LICENSE | 7 - .../github.com/progrium/go-basher/README.md | 94 -- .../github.com/progrium/go-basher/SPONSORS | 1 - .../github.com/progrium/go-basher/basher.go | 237 ---- .../progrium/go-basher/basher_test.go | 120 -- .../progrium/go-basher/example/Makefile | 6 - .../go-basher/example/bash/example.bash | 11 - .../progrium/go-basher/example/bindata.go | 118 -- .../progrium/go-basher/example/example.go | 53 - .../src/github.com/robfig/cron/.gitignore | 22 - .../src/github.com/robfig/cron/.travis.yml | 1 - .../src/github.com/robfig/cron/LICENSE | 21 - .../src/github.com/robfig/cron/README.md | 1 - .../github.com/robfig/cron/constantdelay.go | 27 - .../robfig/cron/constantdelay_test.go | 54 - .../src/github.com/robfig/cron/cron.go | 199 --- .../src/github.com/robfig/cron/cron_test.go | 255 ---- .../src/github.com/robfig/cron/doc.go | 129 -- .../src/github.com/robfig/cron/parser.go | 231 ---- .../src/github.com/robfig/cron/parser_test.go | 117 -- .../src/github.com/robfig/cron/spec.go | 159 --- .../src/github.com/robfig/cron/spec_test.go | 204 --- .../src/golang.org/x/net/context/context.go | 447 ------- .../golang.org/x/net/context/context_test.go | 575 -------- .../x/net/context/ctxhttp/cancelreq.go | 18 - .../x/net/context/ctxhttp/cancelreq_go14.go | 23 - .../x/net/context/ctxhttp/ctxhttp.go | 79 -- .../x/net/context/ctxhttp/ctxhttp_test.go | 72 - .../x/net/context/withtimeout_test.go | 26 - 50 files changed, 6426 deletions(-) delete mode 100644 Godeps/_workspace/src/github.com/golang/glog/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/golang/glog/README delete mode 100644 Godeps/_workspace/src/github.com/golang/glog/glog.go delete mode 100644 Godeps/_workspace/src/github.com/golang/glog/glog_file.go delete mode 100644 Godeps/_workspace/src/github.com/golang/glog/glog_test.go delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/README.md delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/osext.go delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/osext_plan9.go delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/osext_procfs.go delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/osext_sysctl.go delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/osext_test.go delete mode 100644 Godeps/_workspace/src/github.com/kardianos/osext/osext_windows.go delete mode 100644 Godeps/_workspace/src/github.com/leeor/etcd-sync/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/leeor/etcd-sync/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/leeor/etcd-sync/README.md delete mode 100644 Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex.go delete mode 100644 Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex_test.go delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/.travis.yml delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/README.md delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/SPONSORS delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/basher.go delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/basher_test.go delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/example/Makefile delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/example/bash/example.bash delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/example/bindata.go delete mode 100644 Godeps/_workspace/src/github.com/progrium/go-basher/example/example.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/.gitignore delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/.travis.yml delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/LICENSE delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/README.md delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/constantdelay.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/constantdelay_test.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/cron.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/cron_test.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/doc.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/parser.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/parser_test.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/spec.go delete mode 100644 Godeps/_workspace/src/github.com/robfig/cron/spec_test.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/context.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/context_test.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq_go14.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp_test.go delete mode 100644 Godeps/_workspace/src/golang.org/x/net/context/withtimeout_test.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 47e902e779..093565f5a9 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -276,10 +276,6 @@ "Comment": "v1.0-56-g819aca5", "Rev": "819aca59fdc412028cc5348ff3d16be2715d33cf" }, - { - "ImportPath": "github.com/golang/glog", - "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" - }, { "ImportPath": "github.com/gorilla/context", "Rev": "14f550f51af52180c2eefed15e5fd18d63c0a64a" @@ -297,28 +293,11 @@ "ImportPath": "github.com/jonboulle/clockwork", "Rev": "b473f398c464f1988327f67c9e6aa7fba62f80d2" }, - { - "ImportPath": "github.com/kardianos/osext", - "Rev": "10a0e3c4f6267b0f903197acf80d194bab3eb8cb" - }, - { - "ImportPath": "github.com/leeor/etcd-sync", - "Rev": "1b8ac808160f955a5a2cdf21809e968698b07e8d" - }, { "ImportPath": "github.com/lib/pq", "Comment": "go1.0-cutoff-28-g72d960f", "Rev": "72d960fe96ac86dfd376b0de7ca81c0334838d0b" }, - { - "ImportPath": "github.com/progrium/go-basher", - "Rev": "ca3b97b3bd2a7eda303716f56916684771b79942" - }, - { - "ImportPath": "github.com/robfig/cron", - "Comment": "v1-2-g67823cd", - "Rev": "67823cd24dece1b04cced3a0a0b3ca2bc84d875e" - }, { "ImportPath": "github.com/tchap/go-patricia/patricia", "Comment": "v1.0.1", @@ -336,10 +315,6 @@ "ImportPath": "golang.org/x/crypto/ssh", "Rev": "f7445b17d61953e333441674c2d11e91ae4559d3" }, - { - "ImportPath": "golang.org/x/net/context", - "Rev": "d9558e5c97f85372afee28cf2b6059d7d3818919" - }, { "ImportPath": "golang.org/x/net/websocket", "Rev": "d9558e5c97f85372afee28cf2b6059d7d3818919" diff --git a/Godeps/_workspace/src/github.com/golang/glog/LICENSE b/Godeps/_workspace/src/github.com/golang/glog/LICENSE deleted file mode 100644 index 37ec93a14f..0000000000 --- a/Godeps/_workspace/src/github.com/golang/glog/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Godeps/_workspace/src/github.com/golang/glog/README b/Godeps/_workspace/src/github.com/golang/glog/README deleted file mode 100644 index 5f9c11485e..0000000000 --- a/Godeps/_workspace/src/github.com/golang/glog/README +++ /dev/null @@ -1,44 +0,0 @@ -glog -==== - -Leveled execution logs for Go. - -This is an efficient pure Go implementation of leveled logs in the -manner of the open source C++ package - http://code.google.com/p/google-glog - -By binding methods to booleans it is possible to use the log package -without paying the expense of evaluating the arguments to the log. -Through the -vmodule flag, the package also provides fine-grained -control over logging at the file level. - -The comment from glog.go introduces the ideas: - - Package glog implements logging analogous to the Google-internal - C++ INFO/ERROR/V setup. It provides functions Info, Warning, - Error, Fatal, plus formatting variants such as Infof. It - also provides V-style logging controlled by the -v and - -vmodule=file=2 flags. - - Basic examples: - - glog.Info("Prepare to repel boarders") - - glog.Fatalf("Initialization failed: %s", err) - - See the documentation for the V function for an explanation - of these examples: - - if glog.V(2) { - glog.Info("Starting transaction...") - } - - glog.V(2).Infoln("Processed", nItems, "elements") - - -The repository contains an open source version of the log package -used inside Google. The master copy of the source lives inside -Google, not here. The code in this repo is for export only and is not itself -under development. Feature requests will be ignored. - -Send bug reports to golang-nuts@googlegroups.com. diff --git a/Godeps/_workspace/src/github.com/golang/glog/glog.go b/Godeps/_workspace/src/github.com/golang/glog/glog.go deleted file mode 100644 index 3e63fffd5e..0000000000 --- a/Godeps/_workspace/src/github.com/golang/glog/glog.go +++ /dev/null @@ -1,1177 +0,0 @@ -// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ -// -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package glog implements logging analogous to the Google-internal C++ INFO/ERROR/V setup. -// It provides functions Info, Warning, Error, Fatal, plus formatting variants such as -// Infof. It also provides V-style logging controlled by the -v and -vmodule=file=2 flags. -// -// Basic examples: -// -// glog.Info("Prepare to repel boarders") -// -// glog.Fatalf("Initialization failed: %s", err) -// -// See the documentation for the V function for an explanation of these examples: -// -// if glog.V(2) { -// glog.Info("Starting transaction...") -// } -// -// glog.V(2).Infoln("Processed", nItems, "elements") -// -// Log output is buffered and written periodically using Flush. Programs -// should call Flush before exiting to guarantee all log output is written. -// -// By default, all log statements write to files in a temporary directory. -// This package provides several flags that modify this behavior. -// As a result, flag.Parse must be called before any logging is done. -// -// -logtostderr=false -// Logs are written to standard error instead of to files. -// -alsologtostderr=false -// Logs are written to standard error as well as to files. -// -stderrthreshold=ERROR -// Log events at or above this severity are logged to standard -// error as well as to files. -// -log_dir="" -// Log files will be written to this directory instead of the -// default temporary directory. -// -// Other flags provide aids to debugging. -// -// -log_backtrace_at="" -// When set to a file and line number holding a logging statement, -// such as -// -log_backtrace_at=gopherflakes.go:234 -// a stack trace will be written to the Info log whenever execution -// hits that statement. (Unlike with -vmodule, the ".go" must be -// present.) -// -v=0 -// Enable V-leveled logging at the specified level. -// -vmodule="" -// The syntax of the argument is a comma-separated list of pattern=N, -// where pattern is a literal file name (minus the ".go" suffix) or -// "glob" pattern and N is a V level. For instance, -// -vmodule=gopher*=3 -// sets the V level to 3 in all Go files whose names begin "gopher". -// -package glog - -import ( - "bufio" - "bytes" - "errors" - "flag" - "fmt" - "io" - stdLog "log" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" -) - -// severity identifies the sort of log: info, warning etc. It also implements -// the flag.Value interface. The -stderrthreshold flag is of type severity and -// should be modified only through the flag.Value interface. The values match -// the corresponding constants in C++. -type severity int32 // sync/atomic int32 - -// These constants identify the log levels in order of increasing severity. -// A message written to a high-severity log file is also written to each -// lower-severity log file. -const ( - infoLog severity = iota - warningLog - errorLog - fatalLog - numSeverity = 4 -) - -const severityChar = "IWEF" - -var severityName = []string{ - infoLog: "INFO", - warningLog: "WARNING", - errorLog: "ERROR", - fatalLog: "FATAL", -} - -// get returns the value of the severity. -func (s *severity) get() severity { - return severity(atomic.LoadInt32((*int32)(s))) -} - -// set sets the value of the severity. -func (s *severity) set(val severity) { - atomic.StoreInt32((*int32)(s), int32(val)) -} - -// String is part of the flag.Value interface. -func (s *severity) String() string { - return strconv.FormatInt(int64(*s), 10) -} - -// Get is part of the flag.Value interface. -func (s *severity) Get() interface{} { - return *s -} - -// Set is part of the flag.Value interface. -func (s *severity) Set(value string) error { - var threshold severity - // Is it a known name? - if v, ok := severityByName(value); ok { - threshold = v - } else { - v, err := strconv.Atoi(value) - if err != nil { - return err - } - threshold = severity(v) - } - logging.stderrThreshold.set(threshold) - return nil -} - -func severityByName(s string) (severity, bool) { - s = strings.ToUpper(s) - for i, name := range severityName { - if name == s { - return severity(i), true - } - } - return 0, false -} - -// OutputStats tracks the number of output lines and bytes written. -type OutputStats struct { - lines int64 - bytes int64 -} - -// Lines returns the number of lines written. -func (s *OutputStats) Lines() int64 { - return atomic.LoadInt64(&s.lines) -} - -// Bytes returns the number of bytes written. -func (s *OutputStats) Bytes() int64 { - return atomic.LoadInt64(&s.bytes) -} - -// Stats tracks the number of lines of output and number of bytes -// per severity level. Values must be read with atomic.LoadInt64. -var Stats struct { - Info, Warning, Error OutputStats -} - -var severityStats = [numSeverity]*OutputStats{ - infoLog: &Stats.Info, - warningLog: &Stats.Warning, - errorLog: &Stats.Error, -} - -// Level is exported because it appears in the arguments to V and is -// the type of the v flag, which can be set programmatically. -// It's a distinct type because we want to discriminate it from logType. -// Variables of type level are only changed under logging.mu. -// The -v flag is read only with atomic ops, so the state of the logging -// module is consistent. - -// Level is treated as a sync/atomic int32. - -// Level specifies a level of verbosity for V logs. *Level implements -// flag.Value; the -v flag is of type Level and should be modified -// only through the flag.Value interface. -type Level int32 - -// get returns the value of the Level. -func (l *Level) get() Level { - return Level(atomic.LoadInt32((*int32)(l))) -} - -// set sets the value of the Level. -func (l *Level) set(val Level) { - atomic.StoreInt32((*int32)(l), int32(val)) -} - -// String is part of the flag.Value interface. -func (l *Level) String() string { - return strconv.FormatInt(int64(*l), 10) -} - -// Get is part of the flag.Value interface. -func (l *Level) Get() interface{} { - return *l -} - -// Set is part of the flag.Value interface. -func (l *Level) Set(value string) error { - v, err := strconv.Atoi(value) - if err != nil { - return err - } - logging.mu.Lock() - defer logging.mu.Unlock() - logging.setVState(Level(v), logging.vmodule.filter, false) - return nil -} - -// moduleSpec represents the setting of the -vmodule flag. -type moduleSpec struct { - filter []modulePat -} - -// modulePat contains a filter for the -vmodule flag. -// It holds a verbosity level and a file pattern to match. -type modulePat struct { - pattern string - literal bool // The pattern is a literal string - level Level -} - -// match reports whether the file matches the pattern. It uses a string -// comparison if the pattern contains no metacharacters. -func (m *modulePat) match(file string) bool { - if m.literal { - return file == m.pattern - } - match, _ := filepath.Match(m.pattern, file) - return match -} - -func (m *moduleSpec) String() string { - // Lock because the type is not atomic. TODO: clean this up. - logging.mu.Lock() - defer logging.mu.Unlock() - var b bytes.Buffer - for i, f := range m.filter { - if i > 0 { - b.WriteRune(',') - } - fmt.Fprintf(&b, "%s=%d", f.pattern, f.level) - } - return b.String() -} - -// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the -// struct is not exported. -func (m *moduleSpec) Get() interface{} { - return nil -} - -var errVmoduleSyntax = errors.New("syntax error: expect comma-separated list of filename=N") - -// Syntax: -vmodule=recordio=2,file=1,gfs*=3 -func (m *moduleSpec) Set(value string) error { - var filter []modulePat - for _, pat := range strings.Split(value, ",") { - if len(pat) == 0 { - // Empty strings such as from a trailing comma can be ignored. - continue - } - patLev := strings.Split(pat, "=") - if len(patLev) != 2 || len(patLev[0]) == 0 || len(patLev[1]) == 0 { - return errVmoduleSyntax - } - pattern := patLev[0] - v, err := strconv.Atoi(patLev[1]) - if err != nil { - return errors.New("syntax error: expect comma-separated list of filename=N") - } - if v < 0 { - return errors.New("negative value for vmodule level") - } - if v == 0 { - continue // Ignore. It's harmless but no point in paying the overhead. - } - // TODO: check syntax of filter? - filter = append(filter, modulePat{pattern, isLiteral(pattern), Level(v)}) - } - logging.mu.Lock() - defer logging.mu.Unlock() - logging.setVState(logging.verbosity, filter, true) - return nil -} - -// isLiteral reports whether the pattern is a literal string, that is, has no metacharacters -// that require filepath.Match to be called to match the pattern. -func isLiteral(pattern string) bool { - return !strings.ContainsAny(pattern, `\*?[]`) -} - -// traceLocation represents the setting of the -log_backtrace_at flag. -type traceLocation struct { - file string - line int -} - -// isSet reports whether the trace location has been specified. -// logging.mu is held. -func (t *traceLocation) isSet() bool { - return t.line > 0 -} - -// match reports whether the specified file and line matches the trace location. -// The argument file name is the full path, not the basename specified in the flag. -// logging.mu is held. -func (t *traceLocation) match(file string, line int) bool { - if t.line != line { - return false - } - if i := strings.LastIndex(file, "/"); i >= 0 { - file = file[i+1:] - } - return t.file == file -} - -func (t *traceLocation) String() string { - // Lock because the type is not atomic. TODO: clean this up. - logging.mu.Lock() - defer logging.mu.Unlock() - return fmt.Sprintf("%s:%d", t.file, t.line) -} - -// Get is part of the (Go 1.2) flag.Getter interface. It always returns nil for this flag type since the -// struct is not exported -func (t *traceLocation) Get() interface{} { - return nil -} - -var errTraceSyntax = errors.New("syntax error: expect file.go:234") - -// Syntax: -log_backtrace_at=gopherflakes.go:234 -// Note that unlike vmodule the file extension is included here. -func (t *traceLocation) Set(value string) error { - if value == "" { - // Unset. - t.line = 0 - t.file = "" - } - fields := strings.Split(value, ":") - if len(fields) != 2 { - return errTraceSyntax - } - file, line := fields[0], fields[1] - if !strings.Contains(file, ".") { - return errTraceSyntax - } - v, err := strconv.Atoi(line) - if err != nil { - return errTraceSyntax - } - if v <= 0 { - return errors.New("negative or zero value for level") - } - logging.mu.Lock() - defer logging.mu.Unlock() - t.line = v - t.file = file - return nil -} - -// flushSyncWriter is the interface satisfied by logging destinations. -type flushSyncWriter interface { - Flush() error - Sync() error - io.Writer -} - -func init() { - flag.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error instead of files") - flag.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files") - flag.Var(&logging.verbosity, "v", "log level for V logs") - flag.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr") - flag.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging") - flag.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace") - - // Default stderrThreshold is ERROR. - logging.stderrThreshold = errorLog - - logging.setVState(0, nil, false) - go logging.flushDaemon() -} - -// Flush flushes all pending log I/O. -func Flush() { - logging.lockAndFlushAll() -} - -// loggingT collects all the global state of the logging setup. -type loggingT struct { - // Boolean flags. Not handled atomically because the flag.Value interface - // does not let us avoid the =true, and that shorthand is necessary for - // compatibility. TODO: does this matter enough to fix? Seems unlikely. - toStderr bool // The -logtostderr flag. - alsoToStderr bool // The -alsologtostderr flag. - - // Level flag. Handled atomically. - stderrThreshold severity // The -stderrthreshold flag. - - // freeList is a list of byte buffers, maintained under freeListMu. - freeList *buffer - // freeListMu maintains the free list. It is separate from the main mutex - // so buffers can be grabbed and printed to without holding the main lock, - // for better parallelization. - freeListMu sync.Mutex - - // mu protects the remaining elements of this structure and is - // used to synchronize logging. - mu sync.Mutex - // file holds writer for each of the log types. - file [numSeverity]flushSyncWriter - // pcs is used in V to avoid an allocation when computing the caller's PC. - pcs [1]uintptr - // vmap is a cache of the V Level for each V() call site, identified by PC. - // It is wiped whenever the vmodule flag changes state. - vmap map[uintptr]Level - // filterLength stores the length of the vmodule filter chain. If greater - // than zero, it means vmodule is enabled. It may be read safely - // using sync.LoadInt32, but is only modified under mu. - filterLength int32 - // traceLocation is the state of the -log_backtrace_at flag. - traceLocation traceLocation - // These flags are modified only under lock, although verbosity may be fetched - // safely using atomic.LoadInt32. - vmodule moduleSpec // The state of the -vmodule flag. - verbosity Level // V logging level, the value of the -v flag/ -} - -// buffer holds a byte Buffer for reuse. The zero value is ready for use. -type buffer struct { - bytes.Buffer - tmp [64]byte // temporary byte array for creating headers. - next *buffer -} - -var logging loggingT - -// setVState sets a consistent state for V logging. -// l.mu is held. -func (l *loggingT) setVState(verbosity Level, filter []modulePat, setFilter bool) { - // Turn verbosity off so V will not fire while we are in transition. - logging.verbosity.set(0) - // Ditto for filter length. - atomic.StoreInt32(&logging.filterLength, 0) - - // Set the new filters and wipe the pc->Level map if the filter has changed. - if setFilter { - logging.vmodule.filter = filter - logging.vmap = make(map[uintptr]Level) - } - - // Things are consistent now, so enable filtering and verbosity. - // They are enabled in order opposite to that in V. - atomic.StoreInt32(&logging.filterLength, int32(len(filter))) - logging.verbosity.set(verbosity) -} - -// getBuffer returns a new, ready-to-use buffer. -func (l *loggingT) getBuffer() *buffer { - l.freeListMu.Lock() - b := l.freeList - if b != nil { - l.freeList = b.next - } - l.freeListMu.Unlock() - if b == nil { - b = new(buffer) - } else { - b.next = nil - b.Reset() - } - return b -} - -// putBuffer returns a buffer to the free list. -func (l *loggingT) putBuffer(b *buffer) { - if b.Len() >= 256 { - // Let big buffers die a natural death. - return - } - l.freeListMu.Lock() - b.next = l.freeList - l.freeList = b - l.freeListMu.Unlock() -} - -var timeNow = time.Now // Stubbed out for testing. - -/* -header formats a log header as defined by the C++ implementation. -It returns a buffer containing the formatted header and the user's file and line number. -The depth specifies how many stack frames above lives the source line to be identified in the log message. - -Log lines have this form: - Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg... -where the fields are defined as follows: - L A single character, representing the log level (eg 'I' for INFO) - mm The month (zero padded; ie May is '05') - dd The day (zero padded) - hh:mm:ss.uuuuuu Time in hours, minutes and fractional seconds - threadid The space-padded thread ID as returned by GetTID() - file The file name - line The line number - msg The user-supplied message -*/ -func (l *loggingT) header(s severity, depth int) (*buffer, string, int) { - _, file, line, ok := runtime.Caller(3 + depth) - if !ok { - file = "???" - line = 1 - } else { - slash := strings.LastIndex(file, "/") - if slash >= 0 { - file = file[slash+1:] - } - } - return l.formatHeader(s, file, line), file, line -} - -// formatHeader formats a log header using the provided file name and line number. -func (l *loggingT) formatHeader(s severity, file string, line int) *buffer { - now := timeNow() - if line < 0 { - line = 0 // not a real line number, but acceptable to someDigits - } - if s > fatalLog { - s = infoLog // for safety. - } - buf := l.getBuffer() - - // Avoid Fprintf, for speed. The format is so simple that we can do it quickly by hand. - // It's worth about 3X. Fprintf is hard. - _, month, day := now.Date() - hour, minute, second := now.Clock() - // Lmmdd hh:mm:ss.uuuuuu threadid file:line] - buf.tmp[0] = severityChar[s] - buf.twoDigits(1, int(month)) - buf.twoDigits(3, day) - buf.tmp[5] = ' ' - buf.twoDigits(6, hour) - buf.tmp[8] = ':' - buf.twoDigits(9, minute) - buf.tmp[11] = ':' - buf.twoDigits(12, second) - buf.tmp[14] = '.' - buf.nDigits(6, 15, now.Nanosecond()/1000, '0') - buf.tmp[21] = ' ' - buf.nDigits(7, 22, pid, ' ') // TODO: should be TID - buf.tmp[29] = ' ' - buf.Write(buf.tmp[:30]) - buf.WriteString(file) - buf.tmp[0] = ':' - n := buf.someDigits(1, line) - buf.tmp[n+1] = ']' - buf.tmp[n+2] = ' ' - buf.Write(buf.tmp[:n+3]) - return buf -} - -// Some custom tiny helper functions to print the log header efficiently. - -const digits = "0123456789" - -// twoDigits formats a zero-prefixed two-digit integer at buf.tmp[i]. -func (buf *buffer) twoDigits(i, d int) { - buf.tmp[i+1] = digits[d%10] - d /= 10 - buf.tmp[i] = digits[d%10] -} - -// nDigits formats an n-digit integer at buf.tmp[i], -// padding with pad on the left. -// It assumes d >= 0. -func (buf *buffer) nDigits(n, i, d int, pad byte) { - j := n - 1 - for ; j >= 0 && d > 0; j-- { - buf.tmp[i+j] = digits[d%10] - d /= 10 - } - for ; j >= 0; j-- { - buf.tmp[i+j] = pad - } -} - -// someDigits formats a zero-prefixed variable-width integer at buf.tmp[i]. -func (buf *buffer) someDigits(i, d int) int { - // Print into the top, then copy down. We know there's space for at least - // a 10-digit number. - j := len(buf.tmp) - for { - j-- - buf.tmp[j] = digits[d%10] - d /= 10 - if d == 0 { - break - } - } - return copy(buf.tmp[i:], buf.tmp[j:]) -} - -func (l *loggingT) println(s severity, args ...interface{}) { - buf, file, line := l.header(s, 0) - fmt.Fprintln(buf, args...) - l.output(s, buf, file, line, false) -} - -func (l *loggingT) print(s severity, args ...interface{}) { - l.printDepth(s, 1, args...) -} - -func (l *loggingT) printDepth(s severity, depth int, args ...interface{}) { - buf, file, line := l.header(s, depth) - fmt.Fprint(buf, args...) - if buf.Bytes()[buf.Len()-1] != '\n' { - buf.WriteByte('\n') - } - l.output(s, buf, file, line, false) -} - -func (l *loggingT) printf(s severity, format string, args ...interface{}) { - buf, file, line := l.header(s, 0) - fmt.Fprintf(buf, format, args...) - if buf.Bytes()[buf.Len()-1] != '\n' { - buf.WriteByte('\n') - } - l.output(s, buf, file, line, false) -} - -// printWithFileLine behaves like print but uses the provided file and line number. If -// alsoLogToStderr is true, the log message always appears on standard error; it -// will also appear in the log file unless --logtostderr is set. -func (l *loggingT) printWithFileLine(s severity, file string, line int, alsoToStderr bool, args ...interface{}) { - buf := l.formatHeader(s, file, line) - fmt.Fprint(buf, args...) - if buf.Bytes()[buf.Len()-1] != '\n' { - buf.WriteByte('\n') - } - l.output(s, buf, file, line, alsoToStderr) -} - -// output writes the data to the log files and releases the buffer. -func (l *loggingT) output(s severity, buf *buffer, file string, line int, alsoToStderr bool) { - l.mu.Lock() - if l.traceLocation.isSet() { - if l.traceLocation.match(file, line) { - buf.Write(stacks(false)) - } - } - data := buf.Bytes() - if l.toStderr { - os.Stderr.Write(data) - } else { - if alsoToStderr || l.alsoToStderr || s >= l.stderrThreshold.get() { - os.Stderr.Write(data) - } - if l.file[s] == nil { - if err := l.createFiles(s); err != nil { - os.Stderr.Write(data) // Make sure the message appears somewhere. - l.exit(err) - } - } - switch s { - case fatalLog: - l.file[fatalLog].Write(data) - fallthrough - case errorLog: - l.file[errorLog].Write(data) - fallthrough - case warningLog: - l.file[warningLog].Write(data) - fallthrough - case infoLog: - l.file[infoLog].Write(data) - } - } - if s == fatalLog { - // If we got here via Exit rather than Fatal, print no stacks. - if atomic.LoadUint32(&fatalNoStacks) > 0 { - l.mu.Unlock() - timeoutFlush(10 * time.Second) - os.Exit(1) - } - // Dump all goroutine stacks before exiting. - // First, make sure we see the trace for the current goroutine on standard error. - // If -logtostderr has been specified, the loop below will do that anyway - // as the first stack in the full dump. - if !l.toStderr { - os.Stderr.Write(stacks(false)) - } - // Write the stack trace for all goroutines to the files. - trace := stacks(true) - logExitFunc = func(error) {} // If we get a write error, we'll still exit below. - for log := fatalLog; log >= infoLog; log-- { - if f := l.file[log]; f != nil { // Can be nil if -logtostderr is set. - f.Write(trace) - } - } - l.mu.Unlock() - timeoutFlush(10 * time.Second) - os.Exit(255) // C++ uses -1, which is silly because it's anded with 255 anyway. - } - l.putBuffer(buf) - l.mu.Unlock() - if stats := severityStats[s]; stats != nil { - atomic.AddInt64(&stats.lines, 1) - atomic.AddInt64(&stats.bytes, int64(len(data))) - } -} - -// timeoutFlush calls Flush and returns when it completes or after timeout -// elapses, whichever happens first. This is needed because the hooks invoked -// by Flush may deadlock when glog.Fatal is called from a hook that holds -// a lock. -func timeoutFlush(timeout time.Duration) { - done := make(chan bool, 1) - go func() { - Flush() // calls logging.lockAndFlushAll() - done <- true - }() - select { - case <-done: - case <-time.After(timeout): - fmt.Fprintln(os.Stderr, "glog: Flush took longer than", timeout) - } -} - -// stacks is a wrapper for runtime.Stack that attempts to recover the data for all goroutines. -func stacks(all bool) []byte { - // We don't know how big the traces are, so grow a few times if they don't fit. Start large, though. - n := 10000 - if all { - n = 100000 - } - var trace []byte - for i := 0; i < 5; i++ { - trace = make([]byte, n) - nbytes := runtime.Stack(trace, all) - if nbytes < len(trace) { - return trace[:nbytes] - } - n *= 2 - } - return trace -} - -// logExitFunc provides a simple mechanism to override the default behavior -// of exiting on error. Used in testing and to guarantee we reach a required exit -// for fatal logs. Instead, exit could be a function rather than a method but that -// would make its use clumsier. -var logExitFunc func(error) - -// exit is called if there is trouble creating or writing log files. -// It flushes the logs and exits the program; there's no point in hanging around. -// l.mu is held. -func (l *loggingT) exit(err error) { - fmt.Fprintf(os.Stderr, "log: exiting because of error: %s\n", err) - // If logExitFunc is set, we do that instead of exiting. - if logExitFunc != nil { - logExitFunc(err) - return - } - l.flushAll() - os.Exit(2) -} - -// syncBuffer joins a bufio.Writer to its underlying file, providing access to the -// file's Sync method and providing a wrapper for the Write method that provides log -// file rotation. There are conflicting methods, so the file cannot be embedded. -// l.mu is held for all its methods. -type syncBuffer struct { - logger *loggingT - *bufio.Writer - file *os.File - sev severity - nbytes uint64 // The number of bytes written to this file -} - -func (sb *syncBuffer) Sync() error { - return sb.file.Sync() -} - -func (sb *syncBuffer) Write(p []byte) (n int, err error) { - if sb.nbytes+uint64(len(p)) >= MaxSize { - if err := sb.rotateFile(time.Now()); err != nil { - sb.logger.exit(err) - } - } - n, err = sb.Writer.Write(p) - sb.nbytes += uint64(n) - if err != nil { - sb.logger.exit(err) - } - return -} - -// rotateFile closes the syncBuffer's file and starts a new one. -func (sb *syncBuffer) rotateFile(now time.Time) error { - if sb.file != nil { - sb.Flush() - sb.file.Close() - } - var err error - sb.file, _, err = create(severityName[sb.sev], now) - sb.nbytes = 0 - if err != nil { - return err - } - - sb.Writer = bufio.NewWriterSize(sb.file, bufferSize) - - // Write header. - var buf bytes.Buffer - fmt.Fprintf(&buf, "Log file created at: %s\n", now.Format("2006/01/02 15:04:05")) - fmt.Fprintf(&buf, "Running on machine: %s\n", host) - fmt.Fprintf(&buf, "Binary: Built with %s %s for %s/%s\n", runtime.Compiler, runtime.Version(), runtime.GOOS, runtime.GOARCH) - fmt.Fprintf(&buf, "Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg\n") - n, err := sb.file.Write(buf.Bytes()) - sb.nbytes += uint64(n) - return err -} - -// bufferSize sizes the buffer associated with each log file. It's large -// so that log records can accumulate without the logging thread blocking -// on disk I/O. The flushDaemon will block instead. -const bufferSize = 256 * 1024 - -// createFiles creates all the log files for severity from sev down to infoLog. -// l.mu is held. -func (l *loggingT) createFiles(sev severity) error { - now := time.Now() - // Files are created in decreasing severity order, so as soon as we find one - // has already been created, we can stop. - for s := sev; s >= infoLog && l.file[s] == nil; s-- { - sb := &syncBuffer{ - logger: l, - sev: s, - } - if err := sb.rotateFile(now); err != nil { - return err - } - l.file[s] = sb - } - return nil -} - -const flushInterval = 30 * time.Second - -// flushDaemon periodically flushes the log file buffers. -func (l *loggingT) flushDaemon() { - for _ = range time.NewTicker(flushInterval).C { - l.lockAndFlushAll() - } -} - -// lockAndFlushAll is like flushAll but locks l.mu first. -func (l *loggingT) lockAndFlushAll() { - l.mu.Lock() - l.flushAll() - l.mu.Unlock() -} - -// flushAll flushes all the logs and attempts to "sync" their data to disk. -// l.mu is held. -func (l *loggingT) flushAll() { - // Flush from fatal down, in case there's trouble flushing. - for s := fatalLog; s >= infoLog; s-- { - file := l.file[s] - if file != nil { - file.Flush() // ignore error - file.Sync() // ignore error - } - } -} - -// CopyStandardLogTo arranges for messages written to the Go "log" package's -// default logs to also appear in the Google logs for the named and lower -// severities. Subsequent changes to the standard log's default output location -// or format may break this behavior. -// -// Valid names are "INFO", "WARNING", "ERROR", and "FATAL". If the name is not -// recognized, CopyStandardLogTo panics. -func CopyStandardLogTo(name string) { - sev, ok := severityByName(name) - if !ok { - panic(fmt.Sprintf("log.CopyStandardLogTo(%q): unrecognized severity name", name)) - } - // Set a log format that captures the user's file and line: - // d.go:23: message - stdLog.SetFlags(stdLog.Lshortfile) - stdLog.SetOutput(logBridge(sev)) -} - -// logBridge provides the Write method that enables CopyStandardLogTo to connect -// Go's standard logs to the logs provided by this package. -type logBridge severity - -// Write parses the standard logging line and passes its components to the -// logger for severity(lb). -func (lb logBridge) Write(b []byte) (n int, err error) { - var ( - file = "???" - line = 1 - text string - ) - // Split "d.go:23: message" into "d.go", "23", and "message". - if parts := bytes.SplitN(b, []byte{':'}, 3); len(parts) != 3 || len(parts[0]) < 1 || len(parts[2]) < 1 { - text = fmt.Sprintf("bad log format: %s", b) - } else { - file = string(parts[0]) - text = string(parts[2][1:]) // skip leading space - line, err = strconv.Atoi(string(parts[1])) - if err != nil { - text = fmt.Sprintf("bad line number: %s", b) - line = 1 - } - } - // printWithFileLine with alsoToStderr=true, so standard log messages - // always appear on standard error. - logging.printWithFileLine(severity(lb), file, line, true, text) - return len(b), nil -} - -// setV computes and remembers the V level for a given PC -// when vmodule is enabled. -// File pattern matching takes the basename of the file, stripped -// of its .go suffix, and uses filepath.Match, which is a little more -// general than the *? matching used in C++. -// l.mu is held. -func (l *loggingT) setV(pc uintptr) Level { - fn := runtime.FuncForPC(pc) - file, _ := fn.FileLine(pc) - // The file is something like /a/b/c/d.go. We want just the d. - if strings.HasSuffix(file, ".go") { - file = file[:len(file)-3] - } - if slash := strings.LastIndex(file, "/"); slash >= 0 { - file = file[slash+1:] - } - for _, filter := range l.vmodule.filter { - if filter.match(file) { - l.vmap[pc] = filter.level - return filter.level - } - } - l.vmap[pc] = 0 - return 0 -} - -// Verbose is a boolean type that implements Infof (like Printf) etc. -// See the documentation of V for more information. -type Verbose bool - -// V reports whether verbosity at the call site is at least the requested level. -// The returned value is a boolean of type Verbose, which implements Info, Infoln -// and Infof. These methods will write to the Info log if called. -// Thus, one may write either -// if glog.V(2) { glog.Info("log this") } -// or -// glog.V(2).Info("log this") -// The second form is shorter but the first is cheaper if logging is off because it does -// not evaluate its arguments. -// -// Whether an individual call to V generates a log record depends on the setting of -// the -v and --vmodule flags; both are off by default. If the level in the call to -// V is at least the value of -v, or of -vmodule for the source file containing the -// call, the V call will log. -func V(level Level) Verbose { - // This function tries hard to be cheap unless there's work to do. - // The fast path is two atomic loads and compares. - - // Here is a cheap but safe test to see if V logging is enabled globally. - if logging.verbosity.get() >= level { - return Verbose(true) - } - - // It's off globally but it vmodule may still be set. - // Here is another cheap but safe test to see if vmodule is enabled. - if atomic.LoadInt32(&logging.filterLength) > 0 { - // Now we need a proper lock to use the logging structure. The pcs field - // is shared so we must lock before accessing it. This is fairly expensive, - // but if V logging is enabled we're slow anyway. - logging.mu.Lock() - defer logging.mu.Unlock() - if runtime.Callers(2, logging.pcs[:]) == 0 { - return Verbose(false) - } - v, ok := logging.vmap[logging.pcs[0]] - if !ok { - v = logging.setV(logging.pcs[0]) - } - return Verbose(v >= level) - } - return Verbose(false) -} - -// Info is equivalent to the global Info function, guarded by the value of v. -// See the documentation of V for usage. -func (v Verbose) Info(args ...interface{}) { - if v { - logging.print(infoLog, args...) - } -} - -// Infoln is equivalent to the global Infoln function, guarded by the value of v. -// See the documentation of V for usage. -func (v Verbose) Infoln(args ...interface{}) { - if v { - logging.println(infoLog, args...) - } -} - -// Infof is equivalent to the global Infof function, guarded by the value of v. -// See the documentation of V for usage. -func (v Verbose) Infof(format string, args ...interface{}) { - if v { - logging.printf(infoLog, format, args...) - } -} - -// Info logs to the INFO log. -// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. -func Info(args ...interface{}) { - logging.print(infoLog, args...) -} - -// InfoDepth acts as Info but uses depth to determine which call frame to log. -// InfoDepth(0, "msg") is the same as Info("msg"). -func InfoDepth(depth int, args ...interface{}) { - logging.printDepth(infoLog, depth, args...) -} - -// Infoln logs to the INFO log. -// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. -func Infoln(args ...interface{}) { - logging.println(infoLog, args...) -} - -// Infof logs to the INFO log. -// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. -func Infof(format string, args ...interface{}) { - logging.printf(infoLog, format, args...) -} - -// Warning logs to the WARNING and INFO logs. -// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. -func Warning(args ...interface{}) { - logging.print(warningLog, args...) -} - -// WarningDepth acts as Warning but uses depth to determine which call frame to log. -// WarningDepth(0, "msg") is the same as Warning("msg"). -func WarningDepth(depth int, args ...interface{}) { - logging.printDepth(warningLog, depth, args...) -} - -// Warningln logs to the WARNING and INFO logs. -// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. -func Warningln(args ...interface{}) { - logging.println(warningLog, args...) -} - -// Warningf logs to the WARNING and INFO logs. -// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. -func Warningf(format string, args ...interface{}) { - logging.printf(warningLog, format, args...) -} - -// Error logs to the ERROR, WARNING, and INFO logs. -// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. -func Error(args ...interface{}) { - logging.print(errorLog, args...) -} - -// ErrorDepth acts as Error but uses depth to determine which call frame to log. -// ErrorDepth(0, "msg") is the same as Error("msg"). -func ErrorDepth(depth int, args ...interface{}) { - logging.printDepth(errorLog, depth, args...) -} - -// Errorln logs to the ERROR, WARNING, and INFO logs. -// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. -func Errorln(args ...interface{}) { - logging.println(errorLog, args...) -} - -// Errorf logs to the ERROR, WARNING, and INFO logs. -// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. -func Errorf(format string, args ...interface{}) { - logging.printf(errorLog, format, args...) -} - -// Fatal logs to the FATAL, ERROR, WARNING, and INFO logs, -// including a stack trace of all running goroutines, then calls os.Exit(255). -// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. -func Fatal(args ...interface{}) { - logging.print(fatalLog, args...) -} - -// FatalDepth acts as Fatal but uses depth to determine which call frame to log. -// FatalDepth(0, "msg") is the same as Fatal("msg"). -func FatalDepth(depth int, args ...interface{}) { - logging.printDepth(fatalLog, depth, args...) -} - -// Fatalln logs to the FATAL, ERROR, WARNING, and INFO logs, -// including a stack trace of all running goroutines, then calls os.Exit(255). -// Arguments are handled in the manner of fmt.Println; a newline is appended if missing. -func Fatalln(args ...interface{}) { - logging.println(fatalLog, args...) -} - -// Fatalf logs to the FATAL, ERROR, WARNING, and INFO logs, -// including a stack trace of all running goroutines, then calls os.Exit(255). -// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. -func Fatalf(format string, args ...interface{}) { - logging.printf(fatalLog, format, args...) -} - -// fatalNoStacks is non-zero if we are to exit without dumping goroutine stacks. -// It allows Exit and relatives to use the Fatal logs. -var fatalNoStacks uint32 - -// Exit logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). -// Arguments are handled in the manner of fmt.Print; a newline is appended if missing. -func Exit(args ...interface{}) { - atomic.StoreUint32(&fatalNoStacks, 1) - logging.print(fatalLog, args...) -} - -// ExitDepth acts as Exit but uses depth to determine which call frame to log. -// ExitDepth(0, "msg") is the same as Exit("msg"). -func ExitDepth(depth int, args ...interface{}) { - atomic.StoreUint32(&fatalNoStacks, 1) - logging.printDepth(fatalLog, depth, args...) -} - -// Exitln logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). -func Exitln(args ...interface{}) { - atomic.StoreUint32(&fatalNoStacks, 1) - logging.println(fatalLog, args...) -} - -// Exitf logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). -// Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. -func Exitf(format string, args ...interface{}) { - atomic.StoreUint32(&fatalNoStacks, 1) - logging.printf(fatalLog, format, args...) -} diff --git a/Godeps/_workspace/src/github.com/golang/glog/glog_file.go b/Godeps/_workspace/src/github.com/golang/glog/glog_file.go deleted file mode 100644 index 65075d2811..0000000000 --- a/Godeps/_workspace/src/github.com/golang/glog/glog_file.go +++ /dev/null @@ -1,124 +0,0 @@ -// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ -// -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// File I/O for logs. - -package glog - -import ( - "errors" - "flag" - "fmt" - "os" - "os/user" - "path/filepath" - "strings" - "sync" - "time" -) - -// MaxSize is the maximum size of a log file in bytes. -var MaxSize uint64 = 1024 * 1024 * 1800 - -// logDirs lists the candidate directories for new log files. -var logDirs []string - -// If non-empty, overrides the choice of directory in which to write logs. -// See createLogDirs for the full list of possible destinations. -var logDir = flag.String("log_dir", "", "If non-empty, write log files in this directory") - -func createLogDirs() { - if *logDir != "" { - logDirs = append(logDirs, *logDir) - } - logDirs = append(logDirs, os.TempDir()) -} - -var ( - pid = os.Getpid() - program = filepath.Base(os.Args[0]) - host = "unknownhost" - userName = "unknownuser" -) - -func init() { - h, err := os.Hostname() - if err == nil { - host = shortHostname(h) - } - - current, err := user.Current() - if err == nil { - userName = current.Username - } - - // Sanitize userName since it may contain filepath separators on Windows. - userName = strings.Replace(userName, `\`, "_", -1) -} - -// shortHostname returns its argument, truncating at the first period. -// For instance, given "www.google.com" it returns "www". -func shortHostname(hostname string) string { - if i := strings.Index(hostname, "."); i >= 0 { - return hostname[:i] - } - return hostname -} - -// logName returns a new log file name containing tag, with start time t, and -// the name for the symlink for tag. -func logName(tag string, t time.Time) (name, link string) { - name = fmt.Sprintf("%s.%s.%s.log.%s.%04d%02d%02d-%02d%02d%02d.%d", - program, - host, - userName, - tag, - t.Year(), - t.Month(), - t.Day(), - t.Hour(), - t.Minute(), - t.Second(), - pid) - return name, program + "." + tag -} - -var onceLogDirs sync.Once - -// create creates a new log file and returns the file and its filename, which -// contains tag ("INFO", "FATAL", etc.) and t. If the file is created -// successfully, create also attempts to update the symlink for that tag, ignoring -// errors. -func create(tag string, t time.Time) (f *os.File, filename string, err error) { - onceLogDirs.Do(createLogDirs) - if len(logDirs) == 0 { - return nil, "", errors.New("log: no log dirs") - } - name, link := logName(tag, t) - var lastErr error - for _, dir := range logDirs { - fname := filepath.Join(dir, name) - f, err := os.Create(fname) - if err == nil { - symlink := filepath.Join(dir, link) - os.Remove(symlink) // ignore err - os.Symlink(name, symlink) // ignore err - return f, fname, nil - } - lastErr = err - } - return nil, "", fmt.Errorf("log: cannot create log: %v", lastErr) -} diff --git a/Godeps/_workspace/src/github.com/golang/glog/glog_test.go b/Godeps/_workspace/src/github.com/golang/glog/glog_test.go deleted file mode 100644 index 0fb376e1fd..0000000000 --- a/Godeps/_workspace/src/github.com/golang/glog/glog_test.go +++ /dev/null @@ -1,415 +0,0 @@ -// Go support for leveled logs, analogous to https://code.google.com/p/google-glog/ -// -// Copyright 2013 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package glog - -import ( - "bytes" - "fmt" - stdLog "log" - "path/filepath" - "runtime" - "strconv" - "strings" - "testing" - "time" -) - -// Test that shortHostname works as advertised. -func TestShortHostname(t *testing.T) { - for hostname, expect := range map[string]string{ - "": "", - "host": "host", - "host.google.com": "host", - } { - if got := shortHostname(hostname); expect != got { - t.Errorf("shortHostname(%q): expected %q, got %q", hostname, expect, got) - } - } -} - -// flushBuffer wraps a bytes.Buffer to satisfy flushSyncWriter. -type flushBuffer struct { - bytes.Buffer -} - -func (f *flushBuffer) Flush() error { - return nil -} - -func (f *flushBuffer) Sync() error { - return nil -} - -// swap sets the log writers and returns the old array. -func (l *loggingT) swap(writers [numSeverity]flushSyncWriter) (old [numSeverity]flushSyncWriter) { - l.mu.Lock() - defer l.mu.Unlock() - old = l.file - for i, w := range writers { - logging.file[i] = w - } - return -} - -// newBuffers sets the log writers to all new byte buffers and returns the old array. -func (l *loggingT) newBuffers() [numSeverity]flushSyncWriter { - return l.swap([numSeverity]flushSyncWriter{new(flushBuffer), new(flushBuffer), new(flushBuffer), new(flushBuffer)}) -} - -// contents returns the specified log value as a string. -func contents(s severity) string { - return logging.file[s].(*flushBuffer).String() -} - -// contains reports whether the string is contained in the log. -func contains(s severity, str string, t *testing.T) bool { - return strings.Contains(contents(s), str) -} - -// setFlags configures the logging flags how the test expects them. -func setFlags() { - logging.toStderr = false -} - -// Test that Info works as advertised. -func TestInfo(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - Info("test") - if !contains(infoLog, "I", t) { - t.Errorf("Info has wrong character: %q", contents(infoLog)) - } - if !contains(infoLog, "test", t) { - t.Error("Info failed") - } -} - -func TestInfoDepth(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - - f := func() { InfoDepth(1, "depth-test1") } - - // The next three lines must stay together - _, _, wantLine, _ := runtime.Caller(0) - InfoDepth(0, "depth-test0") - f() - - msgs := strings.Split(strings.TrimSuffix(contents(infoLog), "\n"), "\n") - if len(msgs) != 2 { - t.Fatalf("Got %d lines, expected 2", len(msgs)) - } - - for i, m := range msgs { - if !strings.HasPrefix(m, "I") { - t.Errorf("InfoDepth[%d] has wrong character: %q", i, m) - } - w := fmt.Sprintf("depth-test%d", i) - if !strings.Contains(m, w) { - t.Errorf("InfoDepth[%d] missing %q: %q", i, w, m) - } - - // pull out the line number (between : and ]) - msg := m[strings.LastIndex(m, ":")+1:] - x := strings.Index(msg, "]") - if x < 0 { - t.Errorf("InfoDepth[%d]: missing ']': %q", i, m) - continue - } - line, err := strconv.Atoi(msg[:x]) - if err != nil { - t.Errorf("InfoDepth[%d]: bad line number: %q", i, m) - continue - } - wantLine++ - if wantLine != line { - t.Errorf("InfoDepth[%d]: got line %d, want %d", i, line, wantLine) - } - } -} - -func init() { - CopyStandardLogTo("INFO") -} - -// Test that CopyStandardLogTo panics on bad input. -func TestCopyStandardLogToPanic(t *testing.T) { - defer func() { - if s, ok := recover().(string); !ok || !strings.Contains(s, "LOG") { - t.Errorf(`CopyStandardLogTo("LOG") should have panicked: %v`, s) - } - }() - CopyStandardLogTo("LOG") -} - -// Test that using the standard log package logs to INFO. -func TestStandardLog(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - stdLog.Print("test") - if !contains(infoLog, "I", t) { - t.Errorf("Info has wrong character: %q", contents(infoLog)) - } - if !contains(infoLog, "test", t) { - t.Error("Info failed") - } -} - -// Test that the header has the correct format. -func TestHeader(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - defer func(previous func() time.Time) { timeNow = previous }(timeNow) - timeNow = func() time.Time { - return time.Date(2006, 1, 2, 15, 4, 5, .067890e9, time.Local) - } - pid = 1234 - Info("test") - var line int - format := "I0102 15:04:05.067890 1234 glog_test.go:%d] test\n" - n, err := fmt.Sscanf(contents(infoLog), format, &line) - if n != 1 || err != nil { - t.Errorf("log format error: %d elements, error %s:\n%s", n, err, contents(infoLog)) - } - // Scanf treats multiple spaces as equivalent to a single space, - // so check for correct space-padding also. - want := fmt.Sprintf(format, line) - if contents(infoLog) != want { - t.Errorf("log format error: got:\n\t%q\nwant:\t%q", contents(infoLog), want) - } -} - -// Test that an Error log goes to Warning and Info. -// Even in the Info log, the source character will be E, so the data should -// all be identical. -func TestError(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - Error("test") - if !contains(errorLog, "E", t) { - t.Errorf("Error has wrong character: %q", contents(errorLog)) - } - if !contains(errorLog, "test", t) { - t.Error("Error failed") - } - str := contents(errorLog) - if !contains(warningLog, str, t) { - t.Error("Warning failed") - } - if !contains(infoLog, str, t) { - t.Error("Info failed") - } -} - -// Test that a Warning log goes to Info. -// Even in the Info log, the source character will be W, so the data should -// all be identical. -func TestWarning(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - Warning("test") - if !contains(warningLog, "W", t) { - t.Errorf("Warning has wrong character: %q", contents(warningLog)) - } - if !contains(warningLog, "test", t) { - t.Error("Warning failed") - } - str := contents(warningLog) - if !contains(infoLog, str, t) { - t.Error("Info failed") - } -} - -// Test that a V log goes to Info. -func TestV(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - logging.verbosity.Set("2") - defer logging.verbosity.Set("0") - V(2).Info("test") - if !contains(infoLog, "I", t) { - t.Errorf("Info has wrong character: %q", contents(infoLog)) - } - if !contains(infoLog, "test", t) { - t.Error("Info failed") - } -} - -// Test that a vmodule enables a log in this file. -func TestVmoduleOn(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - logging.vmodule.Set("glog_test=2") - defer logging.vmodule.Set("") - if !V(1) { - t.Error("V not enabled for 1") - } - if !V(2) { - t.Error("V not enabled for 2") - } - if V(3) { - t.Error("V enabled for 3") - } - V(2).Info("test") - if !contains(infoLog, "I", t) { - t.Errorf("Info has wrong character: %q", contents(infoLog)) - } - if !contains(infoLog, "test", t) { - t.Error("Info failed") - } -} - -// Test that a vmodule of another file does not enable a log in this file. -func TestVmoduleOff(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - logging.vmodule.Set("notthisfile=2") - defer logging.vmodule.Set("") - for i := 1; i <= 3; i++ { - if V(Level(i)) { - t.Errorf("V enabled for %d", i) - } - } - V(2).Info("test") - if contents(infoLog) != "" { - t.Error("V logged incorrectly") - } -} - -// vGlobs are patterns that match/don't match this file at V=2. -var vGlobs = map[string]bool{ - // Easy to test the numeric match here. - "glog_test=1": false, // If -vmodule sets V to 1, V(2) will fail. - "glog_test=2": true, - "glog_test=3": true, // If -vmodule sets V to 1, V(3) will succeed. - // These all use 2 and check the patterns. All are true. - "*=2": true, - "?l*=2": true, - "????_*=2": true, - "??[mno]?_*t=2": true, - // These all use 2 and check the patterns. All are false. - "*x=2": false, - "m*=2": false, - "??_*=2": false, - "?[abc]?_*t=2": false, -} - -// Test that vmodule globbing works as advertised. -func testVmoduleGlob(pat string, match bool, t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - defer logging.vmodule.Set("") - logging.vmodule.Set(pat) - if V(2) != Verbose(match) { - t.Errorf("incorrect match for %q: got %t expected %t", pat, V(2), match) - } -} - -// Test that a vmodule globbing works as advertised. -func TestVmoduleGlob(t *testing.T) { - for glob, match := range vGlobs { - testVmoduleGlob(glob, match, t) - } -} - -func TestRollover(t *testing.T) { - setFlags() - var err error - defer func(previous func(error)) { logExitFunc = previous }(logExitFunc) - logExitFunc = func(e error) { - err = e - } - defer func(previous uint64) { MaxSize = previous }(MaxSize) - MaxSize = 512 - - Info("x") // Be sure we have a file. - info, ok := logging.file[infoLog].(*syncBuffer) - if !ok { - t.Fatal("info wasn't created") - } - if err != nil { - t.Fatalf("info has initial error: %v", err) - } - fname0 := info.file.Name() - Info(strings.Repeat("x", int(MaxSize))) // force a rollover - if err != nil { - t.Fatalf("info has error after big write: %v", err) - } - - // Make sure the next log file gets a file name with a different - // time stamp. - // - // TODO: determine whether we need to support subsecond log - // rotation. C++ does not appear to handle this case (nor does it - // handle Daylight Savings Time properly). - time.Sleep(1 * time.Second) - - Info("x") // create a new file - if err != nil { - t.Fatalf("error after rotation: %v", err) - } - fname1 := info.file.Name() - if fname0 == fname1 { - t.Errorf("info.f.Name did not change: %v", fname0) - } - if info.nbytes >= MaxSize { - t.Errorf("file size was not reset: %d", info.nbytes) - } -} - -func TestLogBacktraceAt(t *testing.T) { - setFlags() - defer logging.swap(logging.newBuffers()) - // The peculiar style of this code simplifies line counting and maintenance of the - // tracing block below. - var infoLine string - setTraceLocation := func(file string, line int, ok bool, delta int) { - if !ok { - t.Fatal("could not get file:line") - } - _, file = filepath.Split(file) - infoLine = fmt.Sprintf("%s:%d", file, line+delta) - err := logging.traceLocation.Set(infoLine) - if err != nil { - t.Fatal("error setting log_backtrace_at: ", err) - } - } - { - // Start of tracing block. These lines know about each other's relative position. - _, file, line, ok := runtime.Caller(0) - setTraceLocation(file, line, ok, +2) // Two lines between Caller and Info calls. - Info("we want a stack trace here") - } - numAppearances := strings.Count(contents(infoLog), infoLine) - if numAppearances < 2 { - // Need 2 appearances, one in the log header and one in the trace: - // log_test.go:281: I0511 16:36:06.952398 02238 log_test.go:280] we want a stack trace here - // ... - // github.com/glog/glog_test.go:280 (0x41ba91) - // ... - // We could be more precise but that would require knowing the details - // of the traceback format, which may not be dependable. - t.Fatal("got no trace back; log is ", contents(infoLog)) - } -} - -func BenchmarkHeader(b *testing.B) { - for i := 0; i < b.N; i++ { - buf, _, _ := logging.header(infoLog, 0) - logging.putBuffer(buf) - } -} diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/LICENSE b/Godeps/_workspace/src/github.com/kardianos/osext/LICENSE deleted file mode 100644 index 7448756763..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/README.md b/Godeps/_workspace/src/github.com/kardianos/osext/README.md deleted file mode 100644 index 820e1ecb54..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/README.md +++ /dev/null @@ -1,14 +0,0 @@ -### Extensions to the "os" package. - -## Find the current Executable and ExecutableFolder. - -There is sometimes utility in finding the current executable file -that is running. This can be used for upgrading the current executable -or finding resources located relative to the executable file. - -Multi-platform and supports: - * Linux - * OS X - * Windows - * Plan 9 - * BSDs. diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/osext.go b/Godeps/_workspace/src/github.com/kardianos/osext/osext.go deleted file mode 100644 index 7bef46f03e..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/osext.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Extensions to the standard "os" package. -package osext - -import "path/filepath" - -// Executable returns an absolute path that can be used to -// re-invoke the current program. -// It may not be valid after the current program exits. -func Executable() (string, error) { - p, err := executable() - return filepath.Clean(p), err -} - -// Returns same path as Executable, returns just the folder -// path. Excludes the executable name and any trailing slash. -func ExecutableFolder() (string, error) { - p, err := Executable() - if err != nil { - return "", err - } - - return filepath.Dir(p), nil -} diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/osext_plan9.go b/Godeps/_workspace/src/github.com/kardianos/osext/osext_plan9.go deleted file mode 100644 index 655750c542..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/osext_plan9.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package osext - -import ( - "os" - "strconv" - "syscall" -) - -func executable() (string, error) { - f, err := os.Open("/proc/" + strconv.Itoa(os.Getpid()) + "/text") - if err != nil { - return "", err - } - defer f.Close() - return syscall.Fd2path(int(f.Fd())) -} diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/osext_procfs.go b/Godeps/_workspace/src/github.com/kardianos/osext/osext_procfs.go deleted file mode 100644 index b2598bc77a..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/osext_procfs.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux netbsd openbsd solaris dragonfly - -package osext - -import ( - "errors" - "fmt" - "os" - "runtime" - "strings" -) - -func executable() (string, error) { - switch runtime.GOOS { - case "linux": - const deletedTag = " (deleted)" - execpath, err := os.Readlink("/proc/self/exe") - if err != nil { - return execpath, err - } - execpath = strings.TrimSuffix(execpath, deletedTag) - execpath = strings.TrimPrefix(execpath, deletedTag) - return execpath, nil - case "netbsd": - return os.Readlink("/proc/curproc/exe") - case "openbsd", "dragonfly": - return os.Readlink("/proc/curproc/file") - case "solaris": - return os.Readlink(fmt.Sprintf("/proc/%d/path/a.out", os.Getpid())) - } - return "", errors.New("ExecPath not implemented for " + runtime.GOOS) -} diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/osext_sysctl.go b/Godeps/_workspace/src/github.com/kardianos/osext/osext_sysctl.go deleted file mode 100644 index b66cac878c..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/osext_sysctl.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin freebsd - -package osext - -import ( - "os" - "path/filepath" - "runtime" - "syscall" - "unsafe" -) - -var initCwd, initCwdErr = os.Getwd() - -func executable() (string, error) { - var mib [4]int32 - switch runtime.GOOS { - case "freebsd": - mib = [4]int32{1 /* CTL_KERN */, 14 /* KERN_PROC */, 12 /* KERN_PROC_PATHNAME */, -1} - case "darwin": - mib = [4]int32{1 /* CTL_KERN */, 38 /* KERN_PROCARGS */, int32(os.Getpid()), -1} - } - - n := uintptr(0) - // Get length. - _, _, errNum := syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 4, 0, uintptr(unsafe.Pointer(&n)), 0, 0) - if errNum != 0 { - return "", errNum - } - if n == 0 { // This shouldn't happen. - return "", nil - } - buf := make([]byte, n) - _, _, errNum = syscall.Syscall6(syscall.SYS___SYSCTL, uintptr(unsafe.Pointer(&mib[0])), 4, uintptr(unsafe.Pointer(&buf[0])), uintptr(unsafe.Pointer(&n)), 0, 0) - if errNum != 0 { - return "", errNum - } - if n == 0 { // This shouldn't happen. - return "", nil - } - for i, v := range buf { - if v == 0 { - buf = buf[:i] - break - } - } - var err error - execPath := string(buf) - // execPath will not be empty due to above checks. - // Try to get the absolute path if the execPath is not rooted. - if execPath[0] != '/' { - execPath, err = getAbs(execPath) - if err != nil { - return execPath, err - } - } - // For darwin KERN_PROCARGS may return the path to a symlink rather than the - // actual executable. - if runtime.GOOS == "darwin" { - if execPath, err = filepath.EvalSymlinks(execPath); err != nil { - return execPath, err - } - } - return execPath, nil -} - -func getAbs(execPath string) (string, error) { - if initCwdErr != nil { - return execPath, initCwdErr - } - // The execPath may begin with a "../" or a "./" so clean it first. - // Join the two paths, trailing and starting slashes undetermined, so use - // the generic Join function. - return filepath.Join(initCwd, filepath.Clean(execPath)), nil -} diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/osext_test.go b/Godeps/_workspace/src/github.com/kardianos/osext/osext_test.go deleted file mode 100644 index 77ccc28e9e..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/osext_test.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin linux freebsd netbsd windows - -package osext - -import ( - "bytes" - "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "runtime" - "testing" -) - -const ( - executableEnvVar = "OSTEST_OUTPUT_EXECUTABLE" - - executableEnvValueMatch = "match" - executableEnvValueDelete = "delete" -) - -func TestPrintExecutable(t *testing.T) { - ef, err := Executable() - if err != nil { - t.Fatalf("Executable failed: %v", err) - } - t.Log("Executable:", ef) -} -func TestPrintExecutableFolder(t *testing.T) { - ef, err := ExecutableFolder() - if err != nil { - t.Fatalf("ExecutableFolder failed: %v", err) - } - t.Log("Executable Folder:", ef) -} -func TestExecutableFolder(t *testing.T) { - ef, err := ExecutableFolder() - if err != nil { - t.Fatalf("ExecutableFolder failed: %v", err) - } - if ef[len(ef)-1] == filepath.Separator { - t.Fatal("ExecutableFolder ends with a trailing slash.") - } -} -func TestExecutableMatch(t *testing.T) { - ep, err := Executable() - if err != nil { - t.Fatalf("Executable failed: %v", err) - } - - // fullpath to be of the form "dir/prog". - dir := filepath.Dir(filepath.Dir(ep)) - fullpath, err := filepath.Rel(dir, ep) - if err != nil { - t.Fatalf("filepath.Rel: %v", err) - } - // Make child start with a relative program path. - // Alter argv[0] for child to verify getting real path without argv[0]. - cmd := &exec.Cmd{ - Dir: dir, - Path: fullpath, - Env: []string{fmt.Sprintf("%s=%s", executableEnvVar, executableEnvValueMatch)}, - } - out, err := cmd.CombinedOutput() - if err != nil { - t.Fatalf("exec(self) failed: %v", err) - } - outs := string(out) - if !filepath.IsAbs(outs) { - t.Fatalf("Child returned %q, want an absolute path", out) - } - if !sameFile(outs, ep) { - t.Fatalf("Child returned %q, not the same file as %q", out, ep) - } -} - -func TestExecutableDelete(t *testing.T) { - if runtime.GOOS != "linux" { - t.Skip() - } - fpath, err := Executable() - if err != nil { - t.Fatalf("Executable failed: %v", err) - } - - r, w := io.Pipe() - stderrBuff := &bytes.Buffer{} - stdoutBuff := &bytes.Buffer{} - cmd := &exec.Cmd{ - Path: fpath, - Env: []string{fmt.Sprintf("%s=%s", executableEnvVar, executableEnvValueDelete)}, - Stdin: r, - Stderr: stderrBuff, - Stdout: stdoutBuff, - } - err = cmd.Start() - if err != nil { - t.Fatalf("exec(self) start failed: %v", err) - } - - tempPath := fpath + "_copy" - _ = os.Remove(tempPath) - - err = copyFile(tempPath, fpath) - if err != nil { - t.Fatalf("copy file failed: %v", err) - } - err = os.Remove(fpath) - if err != nil { - t.Fatalf("remove running test file failed: %v", err) - } - err = os.Rename(tempPath, fpath) - if err != nil { - t.Fatalf("rename copy to previous name failed: %v", err) - } - - w.Write([]byte{0}) - w.Close() - - err = cmd.Wait() - if err != nil { - t.Fatalf("exec wait failed: %v", err) - } - - childPath := stderrBuff.String() - if !filepath.IsAbs(childPath) { - t.Fatalf("Child returned %q, want an absolute path", childPath) - } - if !sameFile(childPath, fpath) { - t.Fatalf("Child returned %q, not the same file as %q", childPath, fpath) - } -} - -func sameFile(fn1, fn2 string) bool { - fi1, err := os.Stat(fn1) - if err != nil { - return false - } - fi2, err := os.Stat(fn2) - if err != nil { - return false - } - return os.SameFile(fi1, fi2) -} -func copyFile(dest, src string) error { - df, err := os.Create(dest) - if err != nil { - return err - } - defer df.Close() - - sf, err := os.Open(src) - if err != nil { - return err - } - defer sf.Close() - - _, err = io.Copy(df, sf) - return err -} - -func TestMain(m *testing.M) { - env := os.Getenv(executableEnvVar) - switch env { - case "": - os.Exit(m.Run()) - case executableEnvValueMatch: - // First chdir to another path. - dir := "/" - if runtime.GOOS == "windows" { - dir = filepath.VolumeName(".") - } - os.Chdir(dir) - if ep, err := Executable(); err != nil { - fmt.Fprint(os.Stderr, "ERROR: ", err) - } else { - fmt.Fprint(os.Stderr, ep) - } - case executableEnvValueDelete: - bb := make([]byte, 1) - var err error - n, err := os.Stdin.Read(bb) - if err != nil { - fmt.Fprint(os.Stderr, "ERROR: ", err) - os.Exit(2) - } - if n != 1 { - fmt.Fprint(os.Stderr, "ERROR: n != 1, n == ", n) - os.Exit(2) - } - if ep, err := Executable(); err != nil { - fmt.Fprint(os.Stderr, "ERROR: ", err) - } else { - fmt.Fprint(os.Stderr, ep) - } - } - os.Exit(0) -} diff --git a/Godeps/_workspace/src/github.com/kardianos/osext/osext_windows.go b/Godeps/_workspace/src/github.com/kardianos/osext/osext_windows.go deleted file mode 100644 index 72d282cf8c..0000000000 --- a/Godeps/_workspace/src/github.com/kardianos/osext/osext_windows.go +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package osext - -import ( - "syscall" - "unicode/utf16" - "unsafe" -) - -var ( - kernel = syscall.MustLoadDLL("kernel32.dll") - getModuleFileNameProc = kernel.MustFindProc("GetModuleFileNameW") -) - -// GetModuleFileName() with hModule = NULL -func executable() (exePath string, err error) { - return getModuleFileName() -} - -func getModuleFileName() (string, error) { - var n uint32 - b := make([]uint16, syscall.MAX_PATH) - size := uint32(len(b)) - - r0, _, e1 := getModuleFileNameProc.Call(0, uintptr(unsafe.Pointer(&b[0])), uintptr(size)) - n = uint32(r0) - if n == 0 { - return "", e1 - } - return string(utf16.Decode(b[0:n])), nil -} diff --git a/Godeps/_workspace/src/github.com/leeor/etcd-sync/.gitignore b/Godeps/_workspace/src/github.com/leeor/etcd-sync/.gitignore deleted file mode 100644 index 0925a9d131..0000000000 --- a/Godeps/_workspace/src/github.com/leeor/etcd-sync/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.*.swp -.*.swo -*_etcd_data diff --git a/Godeps/_workspace/src/github.com/leeor/etcd-sync/LICENSE b/Godeps/_workspace/src/github.com/leeor/etcd-sync/LICENSE deleted file mode 100644 index 82431a75db..0000000000 --- a/Godeps/_workspace/src/github.com/leeor/etcd-sync/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2014, Leeor Aharon - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Godeps/_workspace/src/github.com/leeor/etcd-sync/README.md b/Godeps/_workspace/src/github.com/leeor/etcd-sync/README.md deleted file mode 100644 index 5989584193..0000000000 --- a/Godeps/_workspace/src/github.com/leeor/etcd-sync/README.md +++ /dev/null @@ -1,25 +0,0 @@ -etcd-sync -========= - -An etcd-based sync module, aiming at implementing the Go sync pkg over etcd for cluster-wide synchronization. - -Installation -============ - -~~~shell -go get github.com/leeor/etcd-sync -~~~ - -Usage -===== - -At this time, only a simple mutex has been implemented. - -## EtcdMutex - -~~~go -mutex := NewMutexFromServers([]string{"http://127.0.0.1:4001"}, key, 0) -mutex.Lock() -// do some critical stuff -mutex.Unlock() -~~~ diff --git a/Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex.go b/Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex.go deleted file mode 100644 index 4214237e3c..0000000000 --- a/Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex.go +++ /dev/null @@ -1,249 +0,0 @@ -package etcdsync - -import ( - "fmt" - "time" - - "github.com/coreos/go-etcd/etcd" - "github.com/golang/glog" -) - -/* - * etcd-based mutex - * - * Locking works using the following scheme: - * 1. Attempt CompareAndSwap() to grab the lock. If it works -> we have the - * lock. - * 2. If the key does not exist, try creating it with Create(). If that works -> - * we have the lock. If Create() fails, it might be due to a race condition - * with another node which was able to create the key before us. So, - * 3. Attempt to CompareAndSwap() again, expect to find that the key exists, and - * the lock taken by another node. If not, then we have the lock. - * 4. Watch the key, using the index returned by the previous call to - * CompareAndSwap(), and wait for the lock to be released or expire. - * 5. Goto #3. - * - * Once we have the lock, keep refreshing its ttl until we're signaled to - * release it. - */ - -type lockState uint - -const ( - unknown lockState = 0 - released lockState = 1 << iota - acquired lockState = 1 << iota -) - -type EtcdMutex struct { - key string - ttl uint64 - - client *etcd.Client - - state lockState - - quit chan bool - released chan bool - - debug bool -} - -func NewMutexFromClient(client *etcd.Client, key string, ttl uint64) *EtcdMutex { - - m := &EtcdMutex{client: client} - - if ttl == 0 { - - ttl = 3 - } - - m.key = key - m.ttl = ttl - - m.quit = make(chan bool) - m.released = make(chan bool) - - return m -} - -func NewMutexFromServers(servers []string, key string, ttl uint64) *EtcdMutex { - - client := etcd.NewClient(servers) - - return NewMutexFromClient(client, key, ttl) -} - -func (m *EtcdMutex) setDebug(on bool) { - - m.debug = on -} - -func (m *EtcdMutex) Lock() error { - - var ( - state lockState = unknown - index uint64 - ) - - glog.Infof("[%s] Lock called", m.key) - for state != acquired { - - res, err := m.client.CompareAndSwap(m.key, "locked", m.ttl, "released", 0) - if err == nil { - - glog.Infof("[%s] lock acquired (%d)", m.key, res.Node.ModifiedIndex) - state = acquired - index = res.Node.ModifiedIndex - } else { - - glog.Infof("[%s] failed to acquire lock: %#v", m.key, err) - - if etcderr, ok := err.(*etcd.EtcdError); ok { - switch etcderr.ErrorCode { - case 100: - // The key does not exist, let's try to create it - glog.Infof("[%s] lock key does not exist, will attempt to create it", m.key) - if res, err := m.client.Create(m.key, "locked", 1); err != nil { - // Someone has created and locked this key before us. - glog.Infof("[%s] could not create lock key, someone probably beat us to it (%#v)", m.key, err) - state = released - if etcderr, ok := err.(*etcd.EtcdError); ok { - - index = etcderr.Index - } - } else { - - glog.Infof("[%s] created key and locked mutex (%#v, %d)", m.key, res.Node, res.Node.ModifiedIndex) - state = acquired - index = res.Node.ModifiedIndex - } - - case 101: - // couldn't set the key, the prevValue we gave it differs from the - // one in the server. Someone else has this key. - state = released - - if etcderr.Index != 0 { - - index = etcderr.Index - } else if index == 0 { - // we can't start a watch... - glog.Infof("[%s] need to watch, but don't have an index to start with", m.key) - time.Sleep(500 * time.Millisecond) - continue - } - - glog.Infof("[%s] unable to acquire lock, watching key (%#v, %d)", m.key, etcderr, etcderr.Index) - receive := make(chan *etcd.Response) - stop := make(chan bool, 1) - go m.client.Watch(m.key, index, false, receive, stop) - - for res = range receive { - - if res.Node.Value == "released" || res.Action == "expire" { - - glog.Infof("[%s] mutex was either released or has expired (%d)", m.key, res.Node.ModifiedIndex) - stop <- true - } else { - - glog.Infof("[%s] received message (%d): %#v", m.key, res.Node.ModifiedIndex, res) - } - } - glog.Infof("[%s] watch ended", m.key) - - default: - glog.Infof("[%s] unexpected error: %#v", m.key, etcderr) - return fmt.Errorf("Unexpected error trying to acquire lock on key %s: %s", m.key, etcderr) - } - } - } - } - - // by now, state has to be acquired - if state != acquired { - - panic("etcd-sync: mutex not acquired") - } - - glog.Infof("[%s] starting refresh routine", m.key) - go func() { - - tick := time.Tick(time.Second) - - for { - select { - case <-m.quit: - glog.Infof("[%s] quit signaled, releasing lock", m.key) - _, err := m.client.CompareAndSwap(m.key, "released", m.ttl, "locked", index) - if err != nil { - - if etcderr, ok := err.(*etcd.EtcdError); ok { - switch etcderr.ErrorCode { - case 100: - // the key has expired or deleted by a third party, - // pretty bad, but the we were about to release it - // anyway. - glog.Infof("[%s] no such key error when trying to release lock", m.key) - - case 101: - // either the prevValue or prevIndex arguments - // failed to match the current data. Either someone - // else has the lock now or the key was tampered - // with and the mutex is now unusable. As long as - // the TTL was not set to 0, it will become usable - // again with time. - glog.Infof("[%s] CAS failed when trying to release lock (%s)", m.key, etcderr.Cause) - - default: - // as long as the stops getting refreshed, the mutex - // will get "unlocked" one the key expires. - glog.Infof("[%s] unexpected error: %#v", m.key, etcderr) - } - } - } - - index = 0 - m.state = released - m.released <- true - - return - - case <-tick: - glog.Infof("[%s] refreshing TTL", m.key) - res, err := m.client.Update(m.key, "locked", m.ttl) - if err != nil { - - glog.Infof("[%s] failed to refresh ttl (%#v)", m.key, err) - } else { - - glog.Infof("[%s] refreshed ttl (%d)", m.key, res.Node.ModifiedIndex) - index = res.Node.ModifiedIndex - } - } - } - }() - - m.state = state - glog.Infof("[%s] done", m.key) - return nil -} - -func (m *EtcdMutex) Unlock() { - - if m.state != acquired { - - panic("etcd-sync: unlock of unlocked mutex") - } - - if m.quit == nil { - - panic("etcd-sync: locked mutex missing its quit channel") - } - - glog.Infof("[%s] Unlock called, sending quit signal", m.key) - m.quit <- true - - <-m.released - glog.Infof("[%s] lock released", m.key) -} diff --git a/Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex_test.go b/Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex_test.go deleted file mode 100644 index ba2c82ae2b..0000000000 --- a/Godeps/_workspace/src/github.com/leeor/etcd-sync/mutex_test.go +++ /dev/null @@ -1,403 +0,0 @@ -package etcdsync - -import ( - "flag" - "log" - "testing" - "time" - - "github.com/coreos/go-etcd/etcd" -) - -var key string = "test/mutex" - -func init() { - flag.Parse() -} - -func TestTwoNoKey(t *testing.T) { - - //etcd.SetLogger(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - quit1 := make(chan bool) - quit2 := make(chan bool) - errchan := make(chan bool) - - progress := make(chan bool) - - // first thread - go func() { - - mutex := NewMutexFromClient(client, key, 0) - err := mutex.Lock() - if err != nil { - - errchan <- true - } - - progress <- true - - // sleep for 5 seconds, ttl should be refreshed after 3 seconds - time.Sleep(5 * time.Second) - mutex.Unlock() - - quit1 <- true - }() - - select { - case <-progress: - case <-errchan: - t.Fatal("could not acquire lock, is etcd running?") - } - - // second thread - go func() { - - mutex := NewMutexFromClient(client, key, 0) - //mutex := NewMutexFromServers([]string{"http://127.0.0.1:4001/"}, key, 0) - // should take us 5 seconds to acquire the lock - now := time.Now() - - err := mutex.Lock() - if err != nil { - - t.Fatal("could not acquire lock, is etcd running?", err) - errchan <- true - } - - timeToLock := time.Since(now) - if timeToLock < 5*time.Second { - - t.Fatalf("mutex TTL was not refreshed, lock acquired after %v seconds", timeToLock) - } - - mutex.Unlock() - quit2 <- true - }() - - var ( - q1 bool - q2 bool - ) - - for !q1 || !q2 { - select { - case <-quit1: - q1 = true - case <-quit2: - q2 = true - case <-errchan: - t.Fatal("could not acquire lock, is etcd running?") - } - } -} - -func TestTwoExistingKey(t *testing.T) { - - //etcd.SetLogger(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Set(key, "released", 0) - - quit1 := make(chan bool) - quit2 := make(chan bool) - errchan := make(chan bool) - - progress := make(chan bool) - - // first thread - go func() { - - mutex := NewMutexFromServers([]string{"http://127.0.0.1:4001"}, key, 0) - err := mutex.Lock() - if err != nil { - - errchan <- true - } - - progress <- true - - // sleep for 5 seconds, ttl should be refreshed after 3 seconds - time.Sleep(5 * time.Second) - mutex.Unlock() - - quit1 <- true - }() - - select { - case <-progress: - case <-errchan: - t.Fatal("could not acquire lock, is etcd running?") - } - - // second thread - go func() { - - mutex := NewMutexFromClient(client, key, 0) - //mutex := NewMutexFromServers([]string{"http://127.0.0.1:4001/"}, key, 0) - // should take us 5 seconds to acquire the lock - now := time.Now() - - err := mutex.Lock() - if err != nil { - - errchan <- true - } - - timeToLock := time.Since(now) - if timeToLock < 5*time.Second { - - t.Fatalf("mutex TTL was not refreshed, lock acquired after %v seconds", timeToLock) - } - - mutex.Unlock() - quit2 <- true - }() - - var ( - q1 bool - q2 bool - ) - - for !q1 || !q2 { - select { - case <-quit1: - q1 = true - case <-quit2: - q2 = true - case <-errchan: - t.Fatal("could not acquire lock, is etcd running?") - } - } -} - -func TestUnlockReleased(t *testing.T) { - - //etcd.SetLogger(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - mutex := NewMutexFromClient(client, key, 0) - - defer func() { - if msg := recover(); msg == nil { - - t.Fatalf("panic not initiated") - } - }() - mutex.Unlock() -} - -func TestUnlockNoKey(t *testing.T) { - - //etcd.SetLogger(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - mutex := NewMutexFromClient(client, key, 0) - - err := mutex.Lock() - if err != nil { - - t.Fatal("could not acquire lock, is etcd running?", err) - } - - client.Delete(key, false) - time.Sleep(2 * time.Second) - mutex.Unlock() -} - -func _TestUnlockBadIndex(t *testing.T) { - - //etcd.SetLogger(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - mutex := NewMutexFromClient(client, key, 0) - - err := mutex.Lock() - if err != nil { - - t.Fatal("could not acquire lock, is etcd running?", err) - } - - client.Update(key, "locked", 0) - mutex.Unlock() - - trigger := make(chan bool) - errchan := make(chan bool) - go func() { - - err := mutex.Lock() - if err != nil { - - errchan <- true - } - - trigger <- true - mutex.Unlock() - }() - - tick := time.Tick(time.Second) - - select { - case <-errchan: - t.Fatal("could not acquire lock, is etcd running?", err) - case <-trigger: - t.Fatalf("managed to get a lock on an out of sync mutex") - break - case <-tick: - // release the blocked goroutine - client.Delete(key, true) - } -} - -func HammerMutex(m *EtcdMutex, loops int, cdone chan bool, errchan chan error, t *testing.T) { - log.Printf("starting %d iterations", loops) - for i := 0; i < loops; i++ { - err := m.Lock() - if err != nil { - - errchan <- err - return - } - - m.Unlock() - } - log.Printf("completed all iterations") - cdone <- true -} - -func TestConcurrentSingleMutex(t *testing.T) { - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - m := NewMutexFromClient(client, key, 0) - c := make(chan bool) - e := make(chan error) - for i := 0; i < 10; i++ { - go HammerMutex(m, 100, c, e, t) - } - for i := 0; i < 10; i++ { - select { - case <-c: - case err := <-e: - t.Fatal("could not acquire lock, is etcd running?", err) - } - } -} - -func TestConcurrentMultipleMutex(t *testing.T) { - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - c := make(chan bool) - e := make(chan error) - for i := 0; i < 10; i++ { - m := NewMutexFromClient(client, key, 0) - go HammerMutex(m, 100, c, e, t) - } - for i := 0; i < 10; i++ { - select { - case <-c: - case err := <-e: - t.Fatal("could not acquire lock, is etcd running?", err) - } - } -} - -func TestMutexPanic(t *testing.T) { - defer func() { - if recover() == nil { - t.Fatalf("unlock of unlocked mutex did not panic") - } - }() - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - mu := NewMutexFromClient(client, key, 0) - err := mu.Lock() - if err != nil { - - t.Fatal("could not acquire lock, is etcd running?", err) - } - - mu.Unlock() - mu.Unlock() -} - -func BenchmarkMutexUncontended(b *testing.B) { - type PaddedMutex struct { - *EtcdMutex - pad [128]uint8 - } - - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - b.RunParallel(func(pb *testing.PB) { - mu := PaddedMutex{EtcdMutex: NewMutexFromClient(client, key, 0)} - - for pb.Next() { - err := mu.Lock() - if err != nil { - - b.Fatal("could not acquire lock, is etcd running?", err) - } - - mu.Unlock() - } - }) -} - -func benchmarkMutex(b *testing.B, slack, work bool) { - client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) - client.Delete(key, true) - - mu := NewMutexFromClient(client, key, 0) - if slack { - b.SetParallelism(10) - } - b.RunParallel(func(pb *testing.PB) { - foo := 0 - for pb.Next() { - err := mu.Lock() - if err != nil { - - b.Fatal("could not acquire lock, is etcd running?", err) - } - - mu.Unlock() - if work { - for i := 0; i < 100; i++ { - foo *= 2 - foo /= 2 - } - } - } - _ = foo - }) -} - -func BenchmarkMutex(b *testing.B) { - benchmarkMutex(b, false, false) -} - -func BenchmarkMutexSlack(b *testing.B) { - benchmarkMutex(b, true, false) -} - -func BenchmarkMutexWork(b *testing.B) { - benchmarkMutex(b, false, true) -} - -func BenchmarkMutexWorkSlack(b *testing.B) { - benchmarkMutex(b, true, true) -} diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/.gitignore b/Godeps/_workspace/src/github.com/progrium/go-basher/.gitignore deleted file mode 100644 index 528cd5b39b..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/.gitignore +++ /dev/null @@ -1 +0,0 @@ -example/example diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/.travis.yml b/Godeps/_workspace/src/github.com/progrium/go-basher/.travis.yml deleted file mode 100644 index 178fb298fe..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: go -go: - - 1.2 - - 1.3 - - release - - tip - -script: - - go test -v . \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/LICENSE b/Godeps/_workspace/src/github.com/progrium/go-basher/LICENSE deleted file mode 100644 index d86f557ed9..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (C) 2014 Jeff Lindsay - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/README.md b/Godeps/_workspace/src/github.com/progrium/go-basher/README.md deleted file mode 100644 index 629fb321bc..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/README.md +++ /dev/null @@ -1,94 +0,0 @@ -# go-basher - -A Go library for creating Bash environments, exporting Go functions in them as Bash functions, and running commands in that Bash environment. Combined with a tool like [go-bindata](https://github.com/jteeuwen/go-bindata), you can write programs that are part written in Go and part written in Bash that can be distributed as standalone binaries. - -[![Build Status](https://travis-ci.org/progrium/go-basher.png)](https://travis-ci.org/progrium/go-basher) [![GoDoc](https://godoc.org/github.com/progrium/go-basher?status.svg)](http://godoc.org/github.com/progrium/go-basher) - -## Using go-basher - -Here we have a simple Go program that defines a `reverse` function, creates a Bash environment sourcing `main.bash` and then runs `main` in that environment. - -```Go -package main - -import ( - "os" - "io/ioutil" - "log" - "strings" - - "github.com/progrium/go-basher" -) - -func reverse(args []string) int { - bytes, err := ioutil.ReadAll(os.Stdin) - if err != nil { - log.Fatal(err) - } - runes := []rune(strings.Trim(string(bytes), "\n")) - for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { - runes[i], runes[j] = runes[j], runes[i] - } - println(string(runes)) - return 0 -} - -func main() { - bash, _ := basher.NewContext("/bin/bash", false) - bash.ExportFunc("reverse", reverse) - bash.HandleFuncs(os.Args) - - bash.Source("main.bash", nil) - status, err := bash.Run("main", os.Args[1:]) - if err != nil { - log.Fatal(err) - } - os.Exit(status) -} -``` - -Here is our `main.bash` file, the actual heart of the program: - -```bash -main() { - echo "Hello world" | reverse -} -``` - -## Using go-basher with go-bindata - -You can bundle your Bash scripts into your Go binary using [go-bindata](https://github.com/jteeuwen/go-bindata). First install go-bindata: - - $ go get github.com/jteeuwen/go-bindata/... - -Now put all your Bash scripts in a directory called `bash`. The above example program would mean you'd have a `bash/main.bash` file. Run `go-bindata` on the directory: - - $ go-bindata bash - -This will produce a `bindata.go` file that includes all of your Bash scripts. It includes a function called `Asset` that behaves like `ioutil.ReadFile` for files in your `bindata.go`. You can just pass this into the `Source` function when sourcing files. From the above example program, you'd use this line instead: - -```Go -bash.Source("bash/main.bash", Asset) -``` - -If you get ambitious you could also use go-bindata to pack a static version of the Bash binary into your Go binary. Crazy, but cool? - -## Motivation - -Go is a great compiled systems language, but it can still be faster to write and glue existing commands together in Bash. However, there are operations you wouldn't want to do in Bash that are straightforward in Go, for example, writing and reading structured data formats. By allowing them to work together, you can use each where they are strongest. - -Take a common task like making an HTTP request for JSON data. Parsing JSON is easy in Go, but without depending on a tool like `jq` it is not even worth trying in Bash. And some formats like YAML don't even have a good `jq` equivalent. Whereas making an HTTP request in Go in the *simplest* case is going to be 6+ lines, as opposed to Bash where you can use `curl` in one line. If we write our JSON parser in Go and fetch the HTTP doc with `curl`, we can express printing a field from a remote JSON object in one line: - - curl -s https://api.github.com/users/progrium | parse-user-field email - -In this case, the command `parse-user-field` is an app specific function defined in your Go program. - -Why would this ever be worth it? I can think of several basic cases: - - 1. you're writing a program in Bash that involves some complex functionality that should be in Go - 1. you're writing a CLI tool in Go but, to start, prototyping would be quicker in Bash - 1. you're writing a program in Bash and want it to be easier to distribute, like a Go binary - -## License - -BSD \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/SPONSORS b/Godeps/_workspace/src/github.com/progrium/go-basher/SPONSORS deleted file mode 100644 index b93c4c3632..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/SPONSORS +++ /dev/null @@ -1 +0,0 @@ -Deis Project http://deis.io \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/basher.go b/Godeps/_workspace/src/github.com/progrium/go-basher/basher.go deleted file mode 100644 index aa7f76b443..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/basher.go +++ /dev/null @@ -1,237 +0,0 @@ -// Package basher provides an API for running and integrating with Bash from Go -package basher - -import ( - "io" - "io/ioutil" - "log" - "os" - "os/exec" - "strings" - "sync" - "syscall" - - "github.com/kardianos/osext" -) - -func exitStatus(err error) (int, error) { - if err != nil { - if exiterr, ok := err.(*exec.ExitError); ok { - // There is no platform independent way to retrieve - // the exit code, but the following will work on Unix - if status, ok := exiterr.Sys().(syscall.WaitStatus); ok { - return int(status.ExitStatus()), nil - } - } - return 0, err - } - return 0, nil -} - -// Application sets up a common entrypoint for a Bash application that -// uses exported Go functions. It uses the DEBUG environment variable -// to set debug on the Context, and SHELL for the Bash binary if it -// includes the string "bash". You can pass a loader function to use -// for the sourced files, and a boolean for whether or not the -// environment should be copied into the Context process. -func Application( - funcs map[string]func([]string), - scripts []string, - loader func(string) ([]byte, error), - copyEnv bool) { - - var bashPath string - bashPath, err := exec.LookPath("bash") - if err != nil { - if strings.Contains(os.Getenv("SHELL"), "bash") { - bashPath = os.Getenv("SHELL") - } else { - bashPath = "/bin/bash" - } - } - bash, err := NewContext(bashPath, os.Getenv("DEBUG") != "") - if err != nil { - log.Fatal(err) - } - for name, fn := range funcs { - bash.ExportFunc(name, fn) - } - if bash.HandleFuncs(os.Args) { - os.Exit(0) - } - - for _, script := range scripts { - bash.Source(script, loader) - } - if copyEnv { - bash.CopyEnv() - } - status, err := bash.Run("main", os.Args[1:]) - if err != nil { - log.Fatal(err) - } - os.Exit(status) -} - -// A Context is an instance of a Bash interpreter and environment, including -// sourced scripts, environment variables, and embedded Go functions -type Context struct { - sync.Mutex - - // Debug simply leaves the generated BASH_ENV file produced - // from each Run call of this Context for debugging. - Debug bool - - // BashPath is the path to the Bash executable to be used by Run - BashPath string - - // SelfPath is set by NewContext to be the current executable path. - // It's used to call back into the calling Go process to run exported - // functions. - SelfPath string - - // The io.Reader given to Bash for STDIN - Stdin io.Reader - - // The io.Writer given to Bash for STDOUT - Stdout io.Writer - - // The io.Writer given to Bash for STDERR - Stderr io.Writer - - vars []string - scripts [][]byte - funcs map[string]func([]string) -} - -// Creates and initializes a new Context that will use the given Bash executable. -// The debug mode will leave the produced temporary BASH_ENV file for inspection. -func NewContext(bashpath string, debug bool) (*Context, error) { - executable, err := osext.Executable() - if err != nil { - return nil, err - } - return &Context{ - Debug: debug, - BashPath: bashpath, - SelfPath: executable, - Stdin: os.Stdin, - Stdout: os.Stdout, - Stderr: os.Stderr, - scripts: make([][]byte, 0), - vars: make([]string, 0), - funcs: make(map[string]func([]string)), - }, nil -} - -// Copies the current environment variables into the Context -func (c *Context) CopyEnv() { - c.Lock() - defer c.Unlock() - c.vars = append(c.vars, os.Environ()...) -} - -// Adds a shell script to the Context environment. The loader argument can be nil -// which means it will use ioutil.Readfile and load from disk, but it exists so you -// can use the Asset function produced by go-bindata when including script files in -// your Go binary. Calls to Source adds files to the environment in order. -func (c *Context) Source(filepath string, loader func(string) ([]byte, error)) error { - if loader == nil { - loader = ioutil.ReadFile - } - data, err := loader(filepath) - if err != nil { - return err - } - c.Lock() - defer c.Unlock() - c.scripts = append(c.scripts, data) - return nil -} - -// Adds an environment variable to the Context -func (c *Context) Export(name string, value string) { - c.Lock() - defer c.Unlock() - c.vars = append(c.vars, name+"="+value) -} - -// Registers a function with the Context that will produce a Bash function in the environment -// that calls back into your executable triggering the function defined as fn. -func (c *Context) ExportFunc(name string, fn func([]string)) { - c.Lock() - defer c.Unlock() - c.funcs[name] = fn -} - -// Expects your os.Args to parse and handle any callbacks to Go functions registered with -// ExportFunc. You normally call this at the beginning of your program. If a registered -// function is found and handled, HandleFuncs will exit with the appropriate exit code for you. -func (c *Context) HandleFuncs(args []string) bool { - for i, arg := range args { - if arg == "::" && len(args) > i+1 { - c.Lock() - defer c.Unlock() - for cmd := range c.funcs { - if cmd == args[i+1] { - c.funcs[cmd](args[i+2:]) - return true - } - } - return false - } - } - return false -} - -func (c *Context) buildEnvfile() (string, error) { - file, err := ioutil.TempFile(os.TempDir(), "bashenv.") - if err != nil { - return "", err - } - defer file.Close() - // variables - file.Write([]byte("unset BASH_ENV\n")) // unset for future calls to bash - file.Write([]byte("export SELF=" + os.Args[0] + "\n")) - file.Write([]byte("export EXECUTABLE='" + c.SelfPath + "'\n")) - for _, kvp := range c.vars { - file.Write([]byte("export " + strings.Replace( - strings.Replace(kvp, "'", "\\'", -1), "=", "=$'", 1) + "'\n")) - } - // functions - for cmd := range c.funcs { - file.Write([]byte(cmd + "() { $EXECUTABLE :: " + cmd + " \"$@\"; }\n")) - } - // scripts - for _, data := range c.scripts { - file.Write(append(data, '\n')) - } - return file.Name(), nil -} - -// Runs a command in Bash from this Context. With each call, a temporary file -// is generated used as BASH_ENV when calling Bash that includes all variables, -// sourced scripts, and exported functions from the Context. Standard I/O by -// default is attached to the calling process I/O. You can change this by setting -// the Stdout, Stderr, Stdin variables of the Context. -func (c *Context) Run(command string, args []string) (int, error) { - c.Lock() - defer c.Unlock() - envfile, err := c.buildEnvfile() - if err != nil { - return 0, err - } - if !c.Debug { - defer os.Remove(envfile) - } - argstring := "" - for _, arg := range args { - argstring = argstring + " '" + arg + "'" - } - cmd := exec.Command(c.BashPath, "-c", command+argstring) - cmd.Env = []string{"BASH_ENV=" + envfile} - cmd.Stdin = c.Stdin - cmd.Stdout = c.Stdout - cmd.Stderr = c.Stderr - return exitStatus(cmd.Run()) -} diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/basher_test.go b/Godeps/_workspace/src/github.com/progrium/go-basher/basher_test.go deleted file mode 100644 index 812f71ff98..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/basher_test.go +++ /dev/null @@ -1,120 +0,0 @@ -package basher - -import ( - "bytes" - "strings" - "testing" -) - -var bashpath = "/bin/bash" - -var testScripts = map[string]string{ - "hello.sh": `main() { echo "hello"; }`, - "cat.sh": `main() { cat; }`, - "foobar.sh": `main() { echo $FOOBAR; }`, -} - -func testLoader(name string) ([]byte, error) { - return []byte(testScripts[name]), nil -} - -func TestHelloStdout(t *testing.T) { - bash, _ := NewContext(bashpath, false) - bash.Source("hello.sh", testLoader) - - var stdout bytes.Buffer - bash.Stdout = &stdout - status, err := bash.Run("main", []string{}) - if err != nil { - t.Fatal(err) - } - if status != 0 { - t.Fatal("non-zero exit") - } - if stdout.String() != "hello\n" { - t.Fatal("unexpected stdout:", stdout.String()) - } -} - -func TestHelloStdin(t *testing.T) { - bash, _ := NewContext(bashpath, false) - bash.Source("cat.sh", testLoader) - bash.Stdin = bytes.NewBufferString("hello\n") - - var stdout bytes.Buffer - bash.Stdout = &stdout - status, err := bash.Run("main", []string{}) - if err != nil { - t.Fatal(err) - } - if status != 0 { - t.Fatal("non-zero exit") - } - if stdout.String() != "hello\n" { - t.Fatal("unexpected stdout:", stdout.String()) - } -} - -func TestEnvironment(t *testing.T) { - bash, _ := NewContext(bashpath, false) - complexString := "Andy's Laptop says, \"$X=1\"" - bash.Source("foobar.sh", testLoader) - bash.Export("FOOBAR", complexString) - - var stdout bytes.Buffer - bash.Stdout = &stdout - status, err := bash.Run("main", []string{}) - if err != nil { - t.Fatal(err) - } - if status != 0 { - t.Fatal("non-zero exit") - } - if strings.Trim(stdout.String(), "\n") != complexString { - t.Fatal("unexpected stdout:", stdout.String()) - } -} - -func TestFuncCallback(t *testing.T) { - bash, _ := NewContext(bashpath, false) - bash.ExportFunc("myfunc", func(args []string) { - return - }) - bash.SelfPath = "/bin/echo" - - var stdout bytes.Buffer - bash.Stdout = &stdout - status, err := bash.Run("myfunc", []string{"abc", "123"}) - if err != nil { - t.Fatal(err) - } - if status != 0 { - t.Fatal("non-zero exit") - } - if stdout.String() != ":: myfunc abc 123\n" { - t.Fatal("unexpected stdout:", stdout.String()) - } -} - -func TestFuncHandling(t *testing.T) { - exit := make(chan int, 1) - bash, _ := NewContext(bashpath, false) - bash.ExportFunc("test-success", func(args []string) { - exit <- 0 - }) - bash.ExportFunc("test-fail", func(args []string) { - exit <- 2 - }) - - bash.HandleFuncs([]string{"thisprogram", "::", "test-success"}) - status := <-exit - if status != 0 { - t.Fatal("non-zero exit") - } - - bash.HandleFuncs([]string{"thisprogram", "::", "test-fail"}) - status = <-exit - if status != 2 { - t.Fatal("unexpected exit status:", status) - } -} diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/example/Makefile b/Godeps/_workspace/src/github.com/progrium/go-basher/example/Makefile deleted file mode 100644 index 904f76c703..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/example/Makefile +++ /dev/null @@ -1,6 +0,0 @@ - -build: - go get github.com/jteeuwen/go-bindata/... - go-bindata bash - go get - go build \ No newline at end of file diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/example/bash/example.bash b/Godeps/_workspace/src/github.com/progrium/go-basher/example/bash/example.bash deleted file mode 100644 index 2d7ba8fc80..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/example/bash/example.bash +++ /dev/null @@ -1,11 +0,0 @@ -set -eo pipefail - -hello-bash() { - echo "Hello world from Bash" -} - -main() { - echo "Arguments:" "$@" - hello-bash | reverse - curl -s https://api.github.com/repos/progrium/go-basher | json-pointer /owner/login -} diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/example/bindata.go b/Godeps/_workspace/src/github.com/progrium/go-basher/example/bindata.go deleted file mode 100644 index ffac3774eb..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/example/bindata.go +++ /dev/null @@ -1,118 +0,0 @@ -package main - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "strings" -) - -func bindata_read(data []byte, name string) ([]byte, error) { - gz, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - return buf.Bytes(), nil -} - -func bash_example_bash() ([]byte, error) { - return bindata_read([]byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x00, 0xff, 0x4c, 0xce, - 0xb1, 0x4e, 0x45, 0x21, 0x0c, 0xc6, 0xf1, 0xf9, 0xf4, 0x29, 0x1a, 0xe2, - 0xa0, 0x03, 0x97, 0xfd, 0x4e, 0xea, 0xe4, 0x6b, 0x70, 0x8f, 0x3d, 0x50, - 0x03, 0x94, 0xb4, 0xe0, 0x19, 0xd4, 0x77, 0x17, 0xe3, 0xa0, 0x63, 0x9b, - 0x7f, 0x7e, 0xf9, 0x8c, 0x06, 0x7a, 0x12, 0xec, 0xdc, 0xe9, 0x88, 0x5c, - 0x00, 0x32, 0x95, 0x22, 0xfe, 0x16, 0x2d, 0xdf, 0x3f, 0xe0, 0x07, 0x6c, - 0xb4, 0x67, 0x41, 0xf7, 0xf2, 0xf3, 0xc5, 0x53, 0xb4, 0xbc, 0xe2, 0xa1, - 0x52, 0xf1, 0x79, 0x05, 0x0e, 0xbe, 0x00, 0x6a, 0xe4, 0xf6, 0xbf, 0x7c, - 0xd2, 0x34, 0x2b, 0xb5, 0x61, 0x57, 0x87, 0xee, 0xee, 0xd1, 0xc1, 0xf6, - 0x27, 0xe2, 0x27, 0x2a, 0xbd, 0x93, 0x1a, 0xc1, 0xb6, 0x4f, 0x2d, 0xe8, - 0x0d, 0xf3, 0x18, 0xdd, 0xae, 0x21, 0xc4, 0xce, 0x97, 0xc4, 0x23, 0xcf, - 0xdb, 0x65, 0x97, 0x1a, 0x94, 0xba, 0x58, 0xe8, 0x2a, 0x49, 0x79, 0xd6, - 0x90, 0x7e, 0x01, 0xd2, 0x45, 0xbc, 0x99, 0x34, 0xdf, 0x85, 0xdb, 0x58, - 0x67, 0x90, 0xb3, 0x91, 0x86, 0x22, 0x89, 0xdb, 0x9a, 0xf3, 0x1d, 0x00, - 0x00, 0xff, 0xff, 0xca, 0x1c, 0xba, 0x45, 0xd0, 0x00, 0x00, 0x00, - }, - "bash/example.bash", - ) -} - -// Asset loads and returns the asset for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func Asset(name string) ([]byte, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - return f() - } - return nil, fmt.Errorf("Asset %s not found", name) -} - -// AssetNames returns the names of the assets. -func AssetNames() []string { - names := make([]string, 0, len(_bindata)) - for name := range _bindata { - names = append(names, name) - } - return names -} - -// _bindata is a table, holding each asset generator, mapped to its name. -var _bindata = map[string]func() ([]byte, error){ - "bash/example.bash": bash_example_bash, -} -// AssetDir returns the file names below a certain -// directory embedded in the file by go-bindata. -// For example if you run go-bindata on data/... and data contains the -// following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png -// then AssetDir("data") would return []string{"foo.txt", "img"} -// AssetDir("data/img") would return []string{"a.png", "b.png"} -// AssetDir("foo.txt") and AssetDir("notexist") would return an error -// AssetDir("") will return []string{"data"}. -func AssetDir(name string) ([]string, error) { - node := _bintree - if len(name) != 0 { - cannonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(cannonicalName, "/") - for _, p := range pathList { - node = node.Children[p] - if node == nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - } - } - if node.Func != nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - rv := make([]string, 0, len(node.Children)) - for name := range node.Children { - rv = append(rv, name) - } - return rv, nil -} - -type _bintree_t struct { - Func func() ([]byte, error) - Children map[string]*_bintree_t -} -var _bintree = &_bintree_t{nil, map[string]*_bintree_t{ - "bash": &_bintree_t{nil, map[string]*_bintree_t{ - "example.bash": &_bintree_t{bash_example_bash, map[string]*_bintree_t{ - }}, - }}, -}} diff --git a/Godeps/_workspace/src/github.com/progrium/go-basher/example/example.go b/Godeps/_workspace/src/github.com/progrium/go-basher/example/example.go deleted file mode 100644 index aa6780c36d..0000000000 --- a/Godeps/_workspace/src/github.com/progrium/go-basher/example/example.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "encoding/json" - "io/ioutil" - "log" - "os" - "strings" - - "github.com/dustin/go-jsonpointer" - "github.com/progrium/go-basher" -) - -func assert(err error) { - if err != nil { - log.Fatal(err) - } -} - -func jsonPointer(args []string) int { - if len(args) == 0 { - return 3 - } - bytes, err := ioutil.ReadAll(os.Stdin) - assert(err) - var o map[string]interface{} - assert(json.Unmarshal(bytes, &o)) - println(jsonpointer.Get(o, args[0]).(string)) - return 0 -} - -func reverse(args []string) int { - bytes, err := ioutil.ReadAll(os.Stdin) - assert(err) - runes := []rune(strings.Trim(string(bytes), "\n")) - for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { - runes[i], runes[j] = runes[j], runes[i] - } - println(string(runes)) - return 0 -} - -func main() { - bash, _ := basher.NewContext("/bin/bash", false) - bash.ExportFunc("json-pointer", jsonPointer) - bash.ExportFunc("reverse", reverse) - bash.HandleFuncs(os.Args) - - bash.Source("bash/example.bash", Asset) - status, err := bash.Run("main", os.Args[1:]) - assert(err) - os.Exit(status) -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/.gitignore b/Godeps/_workspace/src/github.com/robfig/cron/.gitignore deleted file mode 100644 index 00268614f0..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe diff --git a/Godeps/_workspace/src/github.com/robfig/cron/.travis.yml b/Godeps/_workspace/src/github.com/robfig/cron/.travis.yml deleted file mode 100644 index 4f2ee4d973..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/.travis.yml +++ /dev/null @@ -1 +0,0 @@ -language: go diff --git a/Godeps/_workspace/src/github.com/robfig/cron/LICENSE b/Godeps/_workspace/src/github.com/robfig/cron/LICENSE deleted file mode 100644 index 3a0f627ffe..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (C) 2012 Rob Figueiredo -All Rights Reserved. - -MIT LICENSE - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Godeps/_workspace/src/github.com/robfig/cron/README.md b/Godeps/_workspace/src/github.com/robfig/cron/README.md deleted file mode 100644 index a9db98c35f..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/README.md +++ /dev/null @@ -1 +0,0 @@ -[![GoDoc](http://godoc.org/github.com/robfig/cron?status.png)](http://godoc.org/github.com/robfig/cron) diff --git a/Godeps/_workspace/src/github.com/robfig/cron/constantdelay.go b/Godeps/_workspace/src/github.com/robfig/cron/constantdelay.go deleted file mode 100644 index cd6e7b1be9..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/constantdelay.go +++ /dev/null @@ -1,27 +0,0 @@ -package cron - -import "time" - -// ConstantDelaySchedule represents a simple recurring duty cycle, e.g. "Every 5 minutes". -// It does not support jobs more frequent than once a second. -type ConstantDelaySchedule struct { - Delay time.Duration -} - -// Every returns a crontab Schedule that activates once every duration. -// Delays of less than a second are not supported (will round up to 1 second). -// Any fields less than a Second are truncated. -func Every(duration time.Duration) ConstantDelaySchedule { - if duration < time.Second { - duration = time.Second - } - return ConstantDelaySchedule{ - Delay: duration - time.Duration(duration.Nanoseconds())%time.Second, - } -} - -// Next returns the next time this should be run. -// This rounds so that the next activation time will be on the second. -func (schedule ConstantDelaySchedule) Next(t time.Time) time.Time { - return t.Add(schedule.Delay - time.Duration(t.Nanosecond())*time.Nanosecond) -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/constantdelay_test.go b/Godeps/_workspace/src/github.com/robfig/cron/constantdelay_test.go deleted file mode 100644 index f43a58ad26..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/constantdelay_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package cron - -import ( - "testing" - "time" -) - -func TestConstantDelayNext(t *testing.T) { - tests := []struct { - time string - delay time.Duration - expected string - }{ - // Simple cases - {"Mon Jul 9 14:45 2012", 15*time.Minute + 50*time.Nanosecond, "Mon Jul 9 15:00 2012"}, - {"Mon Jul 9 14:59 2012", 15 * time.Minute, "Mon Jul 9 15:14 2012"}, - {"Mon Jul 9 14:59:59 2012", 15 * time.Minute, "Mon Jul 9 15:14:59 2012"}, - - // Wrap around hours - {"Mon Jul 9 15:45 2012", 35 * time.Minute, "Mon Jul 9 16:20 2012"}, - - // Wrap around days - {"Mon Jul 9 23:46 2012", 14 * time.Minute, "Tue Jul 10 00:00 2012"}, - {"Mon Jul 9 23:45 2012", 35 * time.Minute, "Tue Jul 10 00:20 2012"}, - {"Mon Jul 9 23:35:51 2012", 44*time.Minute + 24*time.Second, "Tue Jul 10 00:20:15 2012"}, - {"Mon Jul 9 23:35:51 2012", 25*time.Hour + 44*time.Minute + 24*time.Second, "Thu Jul 11 01:20:15 2012"}, - - // Wrap around months - {"Mon Jul 9 23:35 2012", 91*24*time.Hour + 25*time.Minute, "Thu Oct 9 00:00 2012"}, - - // Wrap around minute, hour, day, month, and year - {"Mon Dec 31 23:59:45 2012", 15 * time.Second, "Tue Jan 1 00:00:00 2013"}, - - // Round to nearest second on the delay - {"Mon Jul 9 14:45 2012", 15*time.Minute + 50*time.Nanosecond, "Mon Jul 9 15:00 2012"}, - - // Round up to 1 second if the duration is less. - {"Mon Jul 9 14:45:00 2012", 15 * time.Millisecond, "Mon Jul 9 14:45:01 2012"}, - - // Round to nearest second when calculating the next time. - {"Mon Jul 9 14:45:00.005 2012", 15 * time.Minute, "Mon Jul 9 15:00 2012"}, - - // Round to nearest second for both. - {"Mon Jul 9 14:45:00.005 2012", 15*time.Minute + 50*time.Nanosecond, "Mon Jul 9 15:00 2012"}, - } - - for _, c := range tests { - actual := Every(c.delay).Next(getTime(c.time)) - expected := getTime(c.expected) - if actual != expected { - t.Errorf("%s, \"%s\": (expected) %v != %v (actual)", c.time, c.delay, expected, actual) - } - } -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/cron.go b/Godeps/_workspace/src/github.com/robfig/cron/cron.go deleted file mode 100644 index 54e08c6ca1..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/cron.go +++ /dev/null @@ -1,199 +0,0 @@ -// This library implements a cron spec parser and runner. See the README for -// more details. -package cron - -import ( - "sort" - "time" -) - -// Cron keeps track of any number of entries, invoking the associated func as -// specified by the schedule. It may be started, stopped, and the entries may -// be inspected while running. -type Cron struct { - entries []*Entry - stop chan struct{} - add chan *Entry - snapshot chan []*Entry - running bool -} - -// Job is an interface for submitted cron jobs. -type Job interface { - Run() -} - -// The Schedule describes a job's duty cycle. -type Schedule interface { - // Return the next activation time, later than the given time. - // Next is invoked initially, and then each time the job is run. - Next(time.Time) time.Time -} - -// Entry consists of a schedule and the func to execute on that schedule. -type Entry struct { - // The schedule on which this job should be run. - Schedule Schedule - - // The next time the job will run. This is the zero time if Cron has not been - // started or this entry's schedule is unsatisfiable - Next time.Time - - // The last time this job was run. This is the zero time if the job has never - // been run. - Prev time.Time - - // The Job to run. - Job Job -} - -// byTime is a wrapper for sorting the entry array by time -// (with zero time at the end). -type byTime []*Entry - -func (s byTime) Len() int { return len(s) } -func (s byTime) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s byTime) Less(i, j int) bool { - // Two zero times should return false. - // Otherwise, zero is "greater" than any other time. - // (To sort it at the end of the list.) - if s[i].Next.IsZero() { - return false - } - if s[j].Next.IsZero() { - return true - } - return s[i].Next.Before(s[j].Next) -} - -// New returns a new Cron job runner. -func New() *Cron { - return &Cron{ - entries: nil, - add: make(chan *Entry), - stop: make(chan struct{}), - snapshot: make(chan []*Entry), - running: false, - } -} - -// A wrapper that turns a func() into a cron.Job -type FuncJob func() - -func (f FuncJob) Run() { f() } - -// AddFunc adds a func to the Cron to be run on the given schedule. -func (c *Cron) AddFunc(spec string, cmd func()) error { - return c.AddJob(spec, FuncJob(cmd)) -} - -// AddFunc adds a Job to the Cron to be run on the given schedule. -func (c *Cron) AddJob(spec string, cmd Job) error { - schedule, err := Parse(spec) - if err != nil { - return err - } - c.Schedule(schedule, cmd) - return nil -} - -// Schedule adds a Job to the Cron to be run on the given schedule. -func (c *Cron) Schedule(schedule Schedule, cmd Job) { - entry := &Entry{ - Schedule: schedule, - Job: cmd, - } - if !c.running { - c.entries = append(c.entries, entry) - return - } - - c.add <- entry -} - -// Entries returns a snapshot of the cron entries. -func (c *Cron) Entries() []*Entry { - if c.running { - c.snapshot <- nil - x := <-c.snapshot - return x - } - return c.entrySnapshot() -} - -// Start the cron scheduler in its own go-routine. -func (c *Cron) Start() { - c.running = true - go c.run() -} - -// Run the scheduler.. this is private just due to the need to synchronize -// access to the 'running' state variable. -func (c *Cron) run() { - // Figure out the next activation times for each entry. - now := time.Now().Local() - for _, entry := range c.entries { - entry.Next = entry.Schedule.Next(now) - } - - for { - // Determine the next entry to run. - sort.Sort(byTime(c.entries)) - - var effective time.Time - if len(c.entries) == 0 || c.entries[0].Next.IsZero() { - // If there are no entries yet, just sleep - it still handles new entries - // and stop requests. - effective = now.AddDate(10, 0, 0) - } else { - effective = c.entries[0].Next - } - - select { - case now = <-time.After(effective.Sub(now)): - // Run every entry whose next time was this effective time. - for _, e := range c.entries { - if e.Next != effective { - break - } - go e.Job.Run() - e.Prev = e.Next - e.Next = e.Schedule.Next(effective) - } - continue - - case newEntry := <-c.add: - c.entries = append(c.entries, newEntry) - newEntry.Next = newEntry.Schedule.Next(now) - - case <-c.snapshot: - c.snapshot <- c.entrySnapshot() - - case <-c.stop: - return - } - - // 'now' should be updated after newEntry and snapshot cases. - now = time.Now().Local() - } -} - -// Stop the cron scheduler. -func (c *Cron) Stop() { - c.stop <- struct{}{} - c.running = false -} - -// entrySnapshot returns a copy of the current cron entry list. -func (c *Cron) entrySnapshot() []*Entry { - entries := []*Entry{} - for _, e := range c.entries { - entries = append(entries, &Entry{ - Schedule: e.Schedule, - Next: e.Next, - Prev: e.Prev, - Job: e.Job, - }) - } - return entries -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/cron_test.go b/Godeps/_workspace/src/github.com/robfig/cron/cron_test.go deleted file mode 100644 index eea340080b..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/cron_test.go +++ /dev/null @@ -1,255 +0,0 @@ -package cron - -import ( - "fmt" - "sync" - "testing" - "time" -) - -// Many tests schedule a job for every second, and then wait at most a second -// for it to run. This amount is just slightly larger than 1 second to -// compensate for a few milliseconds of runtime. -const ONE_SECOND = 1*time.Second + 10*time.Millisecond - -// Start and stop cron with no entries. -func TestNoEntries(t *testing.T) { - cron := New() - cron.Start() - - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-stop(cron): - } -} - -// Start, stop, then add an entry. Verify entry doesn't run. -func TestStopCausesJobsToNotRun(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(1) - - cron := New() - cron.Start() - cron.Stop() - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - - select { - case <-time.After(ONE_SECOND): - // No job ran! - case <-wait(wg): - t.FailNow() - } -} - -// Add a job, start cron, expect it runs. -func TestAddBeforeRunning(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(1) - - cron := New() - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - cron.Start() - defer cron.Stop() - - // Give cron 2 seconds to run our job (which is always activated). - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-wait(wg): - } -} - -// Start cron, add a job, expect it runs. -func TestAddWhileRunning(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(1) - - cron := New() - cron.Start() - defer cron.Stop() - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-wait(wg): - } -} - -// Test timing with Entries. -func TestSnapshotEntries(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(1) - - cron := New() - cron.AddFunc("@every 2s", func() { wg.Done() }) - cron.Start() - defer cron.Stop() - - // Cron should fire in 2 seconds. After 1 second, call Entries. - select { - case <-time.After(ONE_SECOND): - cron.Entries() - } - - // Even though Entries was called, the cron should fire at the 2 second mark. - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-wait(wg): - } - -} - -// Test that the entries are correctly sorted. -// Add a bunch of long-in-the-future entries, and an immediate entry, and ensure -// that the immediate entry runs immediately. -// Also: Test that multiple jobs run in the same instant. -func TestMultipleEntries(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(2) - - cron := New() - cron.AddFunc("0 0 0 1 1 ?", func() {}) - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - cron.AddFunc("0 0 0 31 12 ?", func() {}) - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - - cron.Start() - defer cron.Stop() - - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-wait(wg): - } -} - -// Test running the same job twice. -func TestRunningJobTwice(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(2) - - cron := New() - cron.AddFunc("0 0 0 1 1 ?", func() {}) - cron.AddFunc("0 0 0 31 12 ?", func() {}) - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - - cron.Start() - defer cron.Stop() - - select { - case <-time.After(2 * ONE_SECOND): - t.FailNow() - case <-wait(wg): - } -} - -func TestRunningMultipleSchedules(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(2) - - cron := New() - cron.AddFunc("0 0 0 1 1 ?", func() {}) - cron.AddFunc("0 0 0 31 12 ?", func() {}) - cron.AddFunc("* * * * * ?", func() { wg.Done() }) - cron.Schedule(Every(time.Minute), FuncJob(func() {})) - cron.Schedule(Every(time.Second), FuncJob(func() { wg.Done() })) - cron.Schedule(Every(time.Hour), FuncJob(func() {})) - - cron.Start() - defer cron.Stop() - - select { - case <-time.After(2 * ONE_SECOND): - t.FailNow() - case <-wait(wg): - } -} - -// Test that the cron is run in the local time zone (as opposed to UTC). -func TestLocalTimezone(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(1) - - now := time.Now().Local() - spec := fmt.Sprintf("%d %d %d %d %d ?", - now.Second()+1, now.Minute(), now.Hour(), now.Day(), now.Month()) - - cron := New() - cron.AddFunc(spec, func() { wg.Done() }) - cron.Start() - defer cron.Stop() - - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-wait(wg): - } -} - -type testJob struct { - wg *sync.WaitGroup - name string -} - -func (t testJob) Run() { - t.wg.Done() -} - -// Simple test using Runnables. -func TestJob(t *testing.T) { - wg := &sync.WaitGroup{} - wg.Add(1) - - cron := New() - cron.AddJob("0 0 0 30 Feb ?", testJob{wg, "job0"}) - cron.AddJob("0 0 0 1 1 ?", testJob{wg, "job1"}) - cron.AddJob("* * * * * ?", testJob{wg, "job2"}) - cron.AddJob("1 0 0 1 1 ?", testJob{wg, "job3"}) - cron.Schedule(Every(5*time.Second+5*time.Nanosecond), testJob{wg, "job4"}) - cron.Schedule(Every(5*time.Minute), testJob{wg, "job5"}) - - cron.Start() - defer cron.Stop() - - select { - case <-time.After(ONE_SECOND): - t.FailNow() - case <-wait(wg): - } - - // Ensure the entries are in the right order. - expecteds := []string{"job2", "job4", "job5", "job1", "job3", "job0"} - - var actuals []string - for _, entry := range cron.Entries() { - actuals = append(actuals, entry.Job.(testJob).name) - } - - for i, expected := range expecteds { - if actuals[i] != expected { - t.Errorf("Jobs not in the right order. (expected) %s != %s (actual)", expecteds, actuals) - t.FailNow() - } - } -} - -func wait(wg *sync.WaitGroup) chan bool { - ch := make(chan bool) - go func() { - wg.Wait() - ch <- true - }() - return ch -} - -func stop(cron *Cron) chan bool { - ch := make(chan bool) - go func() { - cron.Stop() - ch <- true - }() - return ch -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/doc.go b/Godeps/_workspace/src/github.com/robfig/cron/doc.go deleted file mode 100644 index dbdf50127a..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/doc.go +++ /dev/null @@ -1,129 +0,0 @@ -/* -Package cron implements a cron spec parser and job runner. - -Usage - -Callers may register Funcs to be invoked on a given schedule. Cron will run -them in their own goroutines. - - c := cron.New() - c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") }) - c.AddFunc("@hourly", func() { fmt.Println("Every hour") }) - c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") }) - c.Start() - .. - // Funcs are invoked in their own goroutine, asynchronously. - ... - // Funcs may also be added to a running Cron - c.AddFunc("@daily", func() { fmt.Println("Every day") }) - .. - // Inspect the cron job entries' next and previous run times. - inspect(c.Entries()) - .. - c.Stop() // Stop the scheduler (does not stop any jobs already running). - -CRON Expression Format - -A cron expression represents a set of times, using 6 space-separated fields. - - Field name | Mandatory? | Allowed values | Allowed special characters - ---------- | ---------- | -------------- | -------------------------- - Seconds | Yes | 0-59 | * / , - - Minutes | Yes | 0-59 | * / , - - Hours | Yes | 0-23 | * / , - - Day of month | Yes | 1-31 | * / , - ? - Month | Yes | 1-12 or JAN-DEC | * / , - - Day of week | Yes | 0-6 or SUN-SAT | * / , - ? - -Note: Month and Day-of-week field values are case insensitive. "SUN", "Sun", -and "sun" are equally accepted. - -Special Characters - -Asterisk ( * ) - -The asterisk indicates that the cron expression will match for all values of the -field; e.g., using an asterisk in the 5th field (month) would indicate every -month. - -Slash ( / ) - -Slashes are used to describe increments of ranges. For example 3-59/15 in the -1st field (minutes) would indicate the 3rd minute of the hour and every 15 -minutes thereafter. The form "*\/..." is equivalent to the form "first-last/...", -that is, an increment over the largest possible range of the field. The form -"N/..." is accepted as meaning "N-MAX/...", that is, starting at N, use the -increment until the end of that specific range. It does not wrap around. - -Comma ( , ) - -Commas are used to separate items of a list. For example, using "MON,WED,FRI" in -the 5th field (day of week) would mean Mondays, Wednesdays and Fridays. - -Hyphen ( - ) - -Hyphens are used to define ranges. For example, 9-17 would indicate every -hour between 9am and 5pm inclusive. - -Question mark ( ? ) - -Question mark may be used instead of '*' for leaving either day-of-month or -day-of-week blank. - -Predefined schedules - -You may use one of several pre-defined schedules in place of a cron expression. - - Entry | Description | Equivalent To - ----- | ----------- | ------------- - @yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 0 1 1 * - @monthly | Run once a month, midnight, first of month | 0 0 0 1 * * - @weekly | Run once a week, midnight on Sunday | 0 0 0 * * 0 - @daily (or @midnight) | Run once a day, midnight | 0 0 0 * * * - @hourly | Run once an hour, beginning of hour | 0 0 * * * * - -Intervals - -You may also schedule a job to execute at fixed intervals. This is supported by -formatting the cron spec like this: - - @every - -where "duration" is a string accepted by time.ParseDuration -(http://golang.org/pkg/time/#ParseDuration). - -For example, "@every 1h30m10s" would indicate a schedule that activates every -1 hour, 30 minutes, 10 seconds. - -Note: The interval does not take the job runtime into account. For example, -if a job takes 3 minutes to run, and it is scheduled to run every 5 minutes, -it will have only 2 minutes of idle time between each run. - -Time zones - -All interpretation and scheduling is done in the machine's local time zone (as -provided by the Go time package (http://www.golang.org/pkg/time). - -Be aware that jobs scheduled during daylight-savings leap-ahead transitions will -not be run! - -Thread safety - -Since the Cron service runs concurrently with the calling code, some amount of -care must be taken to ensure proper synchronization. - -All cron methods are designed to be correctly synchronized as long as the caller -ensures that invocations have a clear happens-before ordering between them. - -Implementation - -Cron entries are stored in an array, sorted by their next activation time. Cron -sleeps until the next job is due to be run. - -Upon waking: - - it runs each entry that is active on that second - - it calculates the next run times for the jobs that were run - - it re-sorts the array of entries by next activation time. - - it goes to sleep until the soonest job. -*/ -package cron diff --git a/Godeps/_workspace/src/github.com/robfig/cron/parser.go b/Godeps/_workspace/src/github.com/robfig/cron/parser.go deleted file mode 100644 index 4224fa9308..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/parser.go +++ /dev/null @@ -1,231 +0,0 @@ -package cron - -import ( - "fmt" - "log" - "math" - "strconv" - "strings" - "time" -) - -// Parse returns a new crontab schedule representing the given spec. -// It returns a descriptive error if the spec is not valid. -// -// It accepts -// - Full crontab specs, e.g. "* * * * * ?" -// - Descriptors, e.g. "@midnight", "@every 1h30m" -func Parse(spec string) (_ Schedule, err error) { - // Convert panics into errors - defer func() { - if recovered := recover(); recovered != nil { - err = fmt.Errorf("%v", recovered) - } - }() - - if spec[0] == '@' { - return parseDescriptor(spec), nil - } - - // Split on whitespace. We require 5 or 6 fields. - // (second) (minute) (hour) (day of month) (month) (day of week, optional) - fields := strings.Fields(spec) - if len(fields) != 5 && len(fields) != 6 { - log.Panicf("Expected 5 or 6 fields, found %d: %s", len(fields), spec) - } - - // If a sixth field is not provided (DayOfWeek), then it is equivalent to star. - if len(fields) == 5 { - fields = append(fields, "*") - } - - schedule := &SpecSchedule{ - Second: getField(fields[0], seconds), - Minute: getField(fields[1], minutes), - Hour: getField(fields[2], hours), - Dom: getField(fields[3], dom), - Month: getField(fields[4], months), - Dow: getField(fields[5], dow), - } - - return schedule, nil -} - -// getField returns an Int with the bits set representing all of the times that -// the field represents. A "field" is a comma-separated list of "ranges". -func getField(field string, r bounds) uint64 { - // list = range {"," range} - var bits uint64 - ranges := strings.FieldsFunc(field, func(r rune) bool { return r == ',' }) - for _, expr := range ranges { - bits |= getRange(expr, r) - } - return bits -} - -// getRange returns the bits indicated by the given expression: -// number | number "-" number [ "/" number ] -func getRange(expr string, r bounds) uint64 { - - var ( - start, end, step uint - rangeAndStep = strings.Split(expr, "/") - lowAndHigh = strings.Split(rangeAndStep[0], "-") - singleDigit = len(lowAndHigh) == 1 - ) - - var extra_star uint64 - if lowAndHigh[0] == "*" || lowAndHigh[0] == "?" { - start = r.min - end = r.max - extra_star = starBit - } else { - start = parseIntOrName(lowAndHigh[0], r.names) - switch len(lowAndHigh) { - case 1: - end = start - case 2: - end = parseIntOrName(lowAndHigh[1], r.names) - default: - log.Panicf("Too many hyphens: %s", expr) - } - } - - switch len(rangeAndStep) { - case 1: - step = 1 - case 2: - step = mustParseInt(rangeAndStep[1]) - - // Special handling: "N/step" means "N-max/step". - if singleDigit { - end = r.max - } - default: - log.Panicf("Too many slashes: %s", expr) - } - - if start < r.min { - log.Panicf("Beginning of range (%d) below minimum (%d): %s", start, r.min, expr) - } - if end > r.max { - log.Panicf("End of range (%d) above maximum (%d): %s", end, r.max, expr) - } - if start > end { - log.Panicf("Beginning of range (%d) beyond end of range (%d): %s", start, end, expr) - } - - return getBits(start, end, step) | extra_star -} - -// parseIntOrName returns the (possibly-named) integer contained in expr. -func parseIntOrName(expr string, names map[string]uint) uint { - if names != nil { - if namedInt, ok := names[strings.ToLower(expr)]; ok { - return namedInt - } - } - return mustParseInt(expr) -} - -// mustParseInt parses the given expression as an int or panics. -func mustParseInt(expr string) uint { - num, err := strconv.Atoi(expr) - if err != nil { - log.Panicf("Failed to parse int from %s: %s", expr, err) - } - if num < 0 { - log.Panicf("Negative number (%d) not allowed: %s", num, expr) - } - - return uint(num) -} - -// getBits sets all bits in the range [min, max], modulo the given step size. -func getBits(min, max, step uint) uint64 { - var bits uint64 - - // If step is 1, use shifts. - if step == 1 { - return ^(math.MaxUint64 << (max + 1)) & (math.MaxUint64 << min) - } - - // Else, use a simple loop. - for i := min; i <= max; i += step { - bits |= 1 << i - } - return bits -} - -// all returns all bits within the given bounds. (plus the star bit) -func all(r bounds) uint64 { - return getBits(r.min, r.max, 1) | starBit -} - -// parseDescriptor returns a pre-defined schedule for the expression, or panics -// if none matches. -func parseDescriptor(spec string) Schedule { - switch spec { - case "@yearly", "@annually": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: 1 << dom.min, - Month: 1 << months.min, - Dow: all(dow), - } - - case "@monthly": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: 1 << dom.min, - Month: all(months), - Dow: all(dow), - } - - case "@weekly": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: all(dom), - Month: all(months), - Dow: 1 << dow.min, - } - - case "@daily", "@midnight": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: 1 << hours.min, - Dom: all(dom), - Month: all(months), - Dow: all(dow), - } - - case "@hourly": - return &SpecSchedule{ - Second: 1 << seconds.min, - Minute: 1 << minutes.min, - Hour: all(hours), - Dom: all(dom), - Month: all(months), - Dow: all(dow), - } - } - - const every = "@every " - if strings.HasPrefix(spec, every) { - duration, err := time.ParseDuration(spec[len(every):]) - if err != nil { - log.Panicf("Failed to parse duration %s: %s", spec, err) - } - return Every(duration) - } - - log.Panicf("Unrecognized descriptor: %s", spec) - return nil -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/parser_test.go b/Godeps/_workspace/src/github.com/robfig/cron/parser_test.go deleted file mode 100644 index 9050cf7869..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/parser_test.go +++ /dev/null @@ -1,117 +0,0 @@ -package cron - -import ( - "reflect" - "testing" - "time" -) - -func TestRange(t *testing.T) { - ranges := []struct { - expr string - min, max uint - expected uint64 - }{ - {"5", 0, 7, 1 << 5}, - {"0", 0, 7, 1 << 0}, - {"7", 0, 7, 1 << 7}, - - {"5-5", 0, 7, 1 << 5}, - {"5-6", 0, 7, 1<<5 | 1<<6}, - {"5-7", 0, 7, 1<<5 | 1<<6 | 1<<7}, - - {"5-6/2", 0, 7, 1 << 5}, - {"5-7/2", 0, 7, 1<<5 | 1<<7}, - {"5-7/1", 0, 7, 1<<5 | 1<<6 | 1<<7}, - - {"*", 1, 3, 1<<1 | 1<<2 | 1<<3 | starBit}, - {"*/2", 1, 3, 1<<1 | 1<<3 | starBit}, - } - - for _, c := range ranges { - actual := getRange(c.expr, bounds{c.min, c.max, nil}) - if actual != c.expected { - t.Errorf("%s => (expected) %d != %d (actual)", c.expr, c.expected, actual) - } - } -} - -func TestField(t *testing.T) { - fields := []struct { - expr string - min, max uint - expected uint64 - }{ - {"5", 1, 7, 1 << 5}, - {"5,6", 1, 7, 1<<5 | 1<<6}, - {"5,6,7", 1, 7, 1<<5 | 1<<6 | 1<<7}, - {"1,5-7/2,3", 1, 7, 1<<1 | 1<<5 | 1<<7 | 1<<3}, - } - - for _, c := range fields { - actual := getField(c.expr, bounds{c.min, c.max, nil}) - if actual != c.expected { - t.Errorf("%s => (expected) %d != %d (actual)", c.expr, c.expected, actual) - } - } -} - -func TestBits(t *testing.T) { - allBits := []struct { - r bounds - expected uint64 - }{ - {minutes, 0xfffffffffffffff}, // 0-59: 60 ones - {hours, 0xffffff}, // 0-23: 24 ones - {dom, 0xfffffffe}, // 1-31: 31 ones, 1 zero - {months, 0x1ffe}, // 1-12: 12 ones, 1 zero - {dow, 0x7f}, // 0-6: 7 ones - } - - for _, c := range allBits { - actual := all(c.r) // all() adds the starBit, so compensate for that.. - if c.expected|starBit != actual { - t.Errorf("%d-%d/%d => (expected) %b != %b (actual)", - c.r.min, c.r.max, 1, c.expected|starBit, actual) - } - } - - bits := []struct { - min, max, step uint - expected uint64 - }{ - - {0, 0, 1, 0x1}, - {1, 1, 1, 0x2}, - {1, 5, 2, 0x2a}, // 101010 - {1, 4, 2, 0xa}, // 1010 - } - - for _, c := range bits { - actual := getBits(c.min, c.max, c.step) - if c.expected != actual { - t.Errorf("%d-%d/%d => (expected) %b != %b (actual)", - c.min, c.max, c.step, c.expected, actual) - } - } -} - -func TestSpecSchedule(t *testing.T) { - entries := []struct { - expr string - expected Schedule - }{ - {"* 5 * * * *", &SpecSchedule{all(seconds), 1 << 5, all(hours), all(dom), all(months), all(dow)}}, - {"@every 5m", ConstantDelaySchedule{time.Duration(5) * time.Minute}}, - } - - for _, c := range entries { - actual, err := Parse(c.expr) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(actual, c.expected) { - t.Errorf("%s => (expected) %b != %b (actual)", c.expr, c.expected, actual) - } - } -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/spec.go b/Godeps/_workspace/src/github.com/robfig/cron/spec.go deleted file mode 100644 index afa5ac86cc..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/spec.go +++ /dev/null @@ -1,159 +0,0 @@ -package cron - -import "time" - -// SpecSchedule specifies a duty cycle (to the second granularity), based on a -// traditional crontab specification. It is computed initially and stored as bit sets. -type SpecSchedule struct { - Second, Minute, Hour, Dom, Month, Dow uint64 -} - -// bounds provides a range of acceptable values (plus a map of name to value). -type bounds struct { - min, max uint - names map[string]uint -} - -// The bounds for each field. -var ( - seconds = bounds{0, 59, nil} - minutes = bounds{0, 59, nil} - hours = bounds{0, 23, nil} - dom = bounds{1, 31, nil} - months = bounds{1, 12, map[string]uint{ - "jan": 1, - "feb": 2, - "mar": 3, - "apr": 4, - "may": 5, - "jun": 6, - "jul": 7, - "aug": 8, - "sep": 9, - "oct": 10, - "nov": 11, - "dec": 12, - }} - dow = bounds{0, 6, map[string]uint{ - "sun": 0, - "mon": 1, - "tue": 2, - "wed": 3, - "thu": 4, - "fri": 5, - "sat": 6, - }} -) - -const ( - // Set the top bit if a star was included in the expression. - starBit = 1 << 63 -) - -// Next returns the next time this schedule is activated, greater than the given -// time. If no time can be found to satisfy the schedule, return the zero time. -func (s *SpecSchedule) Next(t time.Time) time.Time { - // General approach: - // For Month, Day, Hour, Minute, Second: - // Check if the time value matches. If yes, continue to the next field. - // If the field doesn't match the schedule, then increment the field until it matches. - // While incrementing the field, a wrap-around brings it back to the beginning - // of the field list (since it is necessary to re-verify previous field - // values) - - // Start at the earliest possible time (the upcoming second). - t = t.Add(1*time.Second - time.Duration(t.Nanosecond())*time.Nanosecond) - - // This flag indicates whether a field has been incremented. - added := false - - // If no time is found within five years, return zero. - yearLimit := t.Year() + 5 - -WRAP: - if t.Year() > yearLimit { - return time.Time{} - } - - // Find the first applicable month. - // If it's this month, then do nothing. - for 1< 0 - dowMatch bool = 1< 0 - ) - - if s.Dom&starBit > 0 || s.Dow&starBit > 0 { - return domMatch && dowMatch - } - return domMatch || dowMatch -} diff --git a/Godeps/_workspace/src/github.com/robfig/cron/spec_test.go b/Godeps/_workspace/src/github.com/robfig/cron/spec_test.go deleted file mode 100644 index 41540bca49..0000000000 --- a/Godeps/_workspace/src/github.com/robfig/cron/spec_test.go +++ /dev/null @@ -1,204 +0,0 @@ -package cron - -import ( - "testing" - "time" -) - -func TestActivation(t *testing.T) { - tests := []struct { - time, spec string - expected bool - }{ - // Every fifteen minutes. - {"Mon Jul 9 15:00 2012", "0 0/15 * * *", true}, - {"Mon Jul 9 15:45 2012", "0 0/15 * * *", true}, - {"Mon Jul 9 15:40 2012", "0 0/15 * * *", false}, - - // Every fifteen minutes, starting at 5 minutes. - {"Mon Jul 9 15:05 2012", "0 5/15 * * *", true}, - {"Mon Jul 9 15:20 2012", "0 5/15 * * *", true}, - {"Mon Jul 9 15:50 2012", "0 5/15 * * *", true}, - - // Named months - {"Sun Jul 15 15:00 2012", "0 0/15 * * Jul", true}, - {"Sun Jul 15 15:00 2012", "0 0/15 * * Jun", false}, - - // Everything set. - {"Sun Jul 15 08:30 2012", "0 30 08 ? Jul Sun", true}, - {"Sun Jul 15 08:30 2012", "0 30 08 15 Jul ?", true}, - {"Mon Jul 16 08:30 2012", "0 30 08 ? Jul Sun", false}, - {"Mon Jul 16 08:30 2012", "0 30 08 15 Jul ?", false}, - - // Predefined schedules - {"Mon Jul 9 15:00 2012", "@hourly", true}, - {"Mon Jul 9 15:04 2012", "@hourly", false}, - {"Mon Jul 9 15:00 2012", "@daily", false}, - {"Mon Jul 9 00:00 2012", "@daily", true}, - {"Mon Jul 9 00:00 2012", "@weekly", false}, - {"Sun Jul 8 00:00 2012", "@weekly", true}, - {"Sun Jul 8 01:00 2012", "@weekly", false}, - {"Sun Jul 8 00:00 2012", "@monthly", false}, - {"Sun Jul 1 00:00 2012", "@monthly", true}, - - // Test interaction of DOW and DOM. - // If both are specified, then only one needs to match. - {"Sun Jul 15 00:00 2012", "0 * * 1,15 * Sun", true}, - {"Fri Jun 15 00:00 2012", "0 * * 1,15 * Sun", true}, - {"Wed Aug 1 00:00 2012", "0 * * 1,15 * Sun", true}, - - // However, if one has a star, then both need to match. - {"Sun Jul 15 00:00 2012", "0 * * * * Mon", false}, - {"Sun Jul 15 00:00 2012", "0 * * */10 * Sun", false}, - {"Mon Jul 9 00:00 2012", "0 * * 1,15 * *", false}, - {"Sun Jul 15 00:00 2012", "0 * * 1,15 * *", true}, - {"Sun Jul 15 00:00 2012", "0 * * */2 * Sun", true}, - } - - for _, test := range tests { - sched, err := Parse(test.spec) - if err != nil { - t.Error(err) - continue - } - actual := sched.Next(getTime(test.time).Add(-1 * time.Second)) - expected := getTime(test.time) - if test.expected && expected != actual || !test.expected && expected == actual { - t.Errorf("Fail evaluating %s on %s: (expected) %s != %s (actual)", - test.spec, test.time, expected, actual) - } - } -} - -func TestNext(t *testing.T) { - runs := []struct { - time, spec string - expected string - }{ - // Simple cases - {"Mon Jul 9 14:45 2012", "0 0/15 * * *", "Mon Jul 9 15:00 2012"}, - {"Mon Jul 9 14:59 2012", "0 0/15 * * *", "Mon Jul 9 15:00 2012"}, - {"Mon Jul 9 14:59:59 2012", "0 0/15 * * *", "Mon Jul 9 15:00 2012"}, - - // Wrap around hours - {"Mon Jul 9 15:45 2012", "0 20-35/15 * * *", "Mon Jul 9 16:20 2012"}, - - // Wrap around days - {"Mon Jul 9 23:46 2012", "0 */15 * * *", "Tue Jul 10 00:00 2012"}, - {"Mon Jul 9 23:45 2012", "0 20-35/15 * * *", "Tue Jul 10 00:20 2012"}, - {"Mon Jul 9 23:35:51 2012", "15/35 20-35/15 * * *", "Tue Jul 10 00:20:15 2012"}, - {"Mon Jul 9 23:35:51 2012", "15/35 20-35/15 1/2 * *", "Tue Jul 10 01:20:15 2012"}, - {"Mon Jul 9 23:35:51 2012", "15/35 20-35/15 10-12 * *", "Tue Jul 10 10:20:15 2012"}, - - {"Mon Jul 9 23:35:51 2012", "15/35 20-35/15 1/2 */2 * *", "Thu Jul 11 01:20:15 2012"}, - {"Mon Jul 9 23:35:51 2012", "15/35 20-35/15 * 9-20 * *", "Wed Jul 10 00:20:15 2012"}, - {"Mon Jul 9 23:35:51 2012", "15/35 20-35/15 * 9-20 Jul *", "Wed Jul 10 00:20:15 2012"}, - - // Wrap around months - {"Mon Jul 9 23:35 2012", "0 0 0 9 Apr-Oct ?", "Thu Aug 9 00:00 2012"}, - {"Mon Jul 9 23:35 2012", "0 0 0 */5 Apr,Aug,Oct Mon", "Mon Aug 6 00:00 2012"}, - {"Mon Jul 9 23:35 2012", "0 0 0 */5 Oct Mon", "Mon Oct 1 00:00 2012"}, - - // Wrap around years - {"Mon Jul 9 23:35 2012", "0 0 0 * Feb Mon", "Mon Feb 4 00:00 2013"}, - {"Mon Jul 9 23:35 2012", "0 0 0 * Feb Mon/2", "Fri Feb 1 00:00 2013"}, - - // Wrap around minute, hour, day, month, and year - {"Mon Dec 31 23:59:45 2012", "0 * * * * *", "Tue Jan 1 00:00:00 2013"}, - - // Leap year - {"Mon Jul 9 23:35 2012", "0 0 0 29 Feb ?", "Mon Feb 29 00:00 2016"}, - - // Daylight savings time 2am EST (-5) -> 3am EDT (-4) - {"2012-03-11T00:00:00-0500", "0 30 2 11 Mar ?", "2013-03-11T02:30:00-0400"}, - - // hourly job - {"2012-03-11T00:00:00-0500", "0 0 * * * ?", "2012-03-11T01:00:00-0500"}, - {"2012-03-11T01:00:00-0500", "0 0 * * * ?", "2012-03-11T03:00:00-0400"}, - {"2012-03-11T03:00:00-0400", "0 0 * * * ?", "2012-03-11T04:00:00-0400"}, - {"2012-03-11T04:00:00-0400", "0 0 * * * ?", "2012-03-11T05:00:00-0400"}, - - // 1am nightly job - {"2012-03-11T00:00:00-0500", "0 0 1 * * ?", "2012-03-11T01:00:00-0500"}, - {"2012-03-11T01:00:00-0500", "0 0 1 * * ?", "2012-03-12T01:00:00-0400"}, - - // 2am nightly job (skipped) - {"2012-03-11T00:00:00-0500", "0 0 2 * * ?", "2012-03-12T02:00:00-0400"}, - - // Daylight savings time 2am EDT (-4) => 1am EST (-5) - {"2012-11-04T00:00:00-0400", "0 30 2 04 Nov ?", "2012-11-04T02:30:00-0500"}, - {"2012-11-04T01:45:00-0400", "0 30 1 04 Nov ?", "2012-11-04T01:30:00-0500"}, - - // hourly job - {"2012-11-04T00:00:00-0400", "0 0 * * * ?", "2012-11-04T01:00:00-0400"}, - {"2012-11-04T01:00:00-0400", "0 0 * * * ?", "2012-11-04T01:00:00-0500"}, - {"2012-11-04T01:00:00-0500", "0 0 * * * ?", "2012-11-04T02:00:00-0500"}, - - // 1am nightly job (runs twice) - {"2012-11-04T00:00:00-0400", "0 0 1 * * ?", "2012-11-04T01:00:00-0400"}, - {"2012-11-04T01:00:00-0400", "0 0 1 * * ?", "2012-11-04T01:00:00-0500"}, - {"2012-11-04T01:00:00-0500", "0 0 1 * * ?", "2012-11-05T01:00:00-0500"}, - - // 2am nightly job - {"2012-11-04T00:00:00-0400", "0 0 2 * * ?", "2012-11-04T02:00:00-0500"}, - {"2012-11-04T02:00:00-0500", "0 0 2 * * ?", "2012-11-05T02:00:00-0500"}, - - // 3am nightly job - {"2012-11-04T00:00:00-0400", "0 0 3 * * ?", "2012-11-04T03:00:00-0500"}, - {"2012-11-04T03:00:00-0500", "0 0 3 * * ?", "2012-11-05T03:00:00-0500"}, - - // Unsatisfiable - {"Mon Jul 9 23:35 2012", "0 0 0 30 Feb ?", ""}, - {"Mon Jul 9 23:35 2012", "0 0 0 31 Apr ?", ""}, - } - - for _, c := range runs { - sched, err := Parse(c.spec) - if err != nil { - t.Error(err) - continue - } - actual := sched.Next(getTime(c.time)) - expected := getTime(c.expected) - if !actual.Equal(expected) { - t.Errorf("%s, \"%s\": (expected) %v != %v (actual)", c.time, c.spec, expected, actual) - } - } -} - -func TestErrors(t *testing.T) { - invalidSpecs := []string{ - "xyz", - "60 0 * * *", - "0 60 * * *", - "0 0 * * XYZ", - } - for _, spec := range invalidSpecs { - _, err := Parse(spec) - if err == nil { - t.Error("expected an error parsing: ", spec) - } - } -} - -func getTime(value string) time.Time { - if value == "" { - return time.Time{} - } - t, err := time.Parse("Mon Jan 2 15:04 2006", value) - if err != nil { - t, err = time.Parse("Mon Jan 2 15:04:05 2006", value) - if err != nil { - t, err = time.Parse("2006-01-02T15:04:05-0700", value) - if err != nil { - panic(err) - } - // Daylight savings time tests require location - if ny, err := time.LoadLocation("America/New_York"); err == nil { - t = t.In(ny) - } - } - } - - return t -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/context.go b/Godeps/_workspace/src/golang.org/x/net/context/context.go deleted file mode 100644 index e7ee376c47..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/context.go +++ /dev/null @@ -1,447 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package context defines the Context type, which carries deadlines, -// cancelation signals, and other request-scoped values across API boundaries -// and between processes. -// -// Incoming requests to a server should create a Context, and outgoing calls to -// servers should accept a Context. The chain of function calls between must -// propagate the Context, optionally replacing it with a modified copy created -// using WithDeadline, WithTimeout, WithCancel, or WithValue. -// -// Programs that use Contexts should follow these rules to keep interfaces -// consistent across packages and enable static analysis tools to check context -// propagation: -// -// Do not store Contexts inside a struct type; instead, pass a Context -// explicitly to each function that needs it. The Context should be the first -// parameter, typically named ctx: -// -// func DoSomething(ctx context.Context, arg Arg) error { -// // ... use ctx ... -// } -// -// Do not pass a nil Context, even if a function permits it. Pass context.TODO -// if you are unsure about which Context to use. -// -// Use context Values only for request-scoped data that transits processes and -// APIs, not for passing optional parameters to functions. -// -// The same Context may be passed to functions running in different goroutines; -// Contexts are safe for simultaneous use by multiple goroutines. -// -// See http://blog.golang.org/context for example code for a server that uses -// Contexts. -package context // import "golang.org/x/net/context" - -import ( - "errors" - "fmt" - "sync" - "time" -) - -// A Context carries a deadline, a cancelation signal, and other values across -// API boundaries. -// -// Context's methods may be called by multiple goroutines simultaneously. -type Context interface { - // Deadline returns the time when work done on behalf of this context - // should be canceled. Deadline returns ok==false when no deadline is - // set. Successive calls to Deadline return the same results. - Deadline() (deadline time.Time, ok bool) - - // Done returns a channel that's closed when work done on behalf of this - // context should be canceled. Done may return nil if this context can - // never be canceled. Successive calls to Done return the same value. - // - // WithCancel arranges for Done to be closed when cancel is called; - // WithDeadline arranges for Done to be closed when the deadline - // expires; WithTimeout arranges for Done to be closed when the timeout - // elapses. - // - // Done is provided for use in select statements: - // - // // Stream generates values with DoSomething and sends them to out - // // until DoSomething returns an error or ctx.Done is closed. - // func Stream(ctx context.Context, out <-chan Value) error { - // for { - // v, err := DoSomething(ctx) - // if err != nil { - // return err - // } - // select { - // case <-ctx.Done(): - // return ctx.Err() - // case out <- v: - // } - // } - // } - // - // See http://blog.golang.org/pipelines for more examples of how to use - // a Done channel for cancelation. - Done() <-chan struct{} - - // Err returns a non-nil error value after Done is closed. Err returns - // Canceled if the context was canceled or DeadlineExceeded if the - // context's deadline passed. No other values for Err are defined. - // After Done is closed, successive calls to Err return the same value. - Err() error - - // Value returns the value associated with this context for key, or nil - // if no value is associated with key. Successive calls to Value with - // the same key returns the same result. - // - // Use context values only for request-scoped data that transits - // processes and API boundaries, not for passing optional parameters to - // functions. - // - // A key identifies a specific value in a Context. Functions that wish - // to store values in Context typically allocate a key in a global - // variable then use that key as the argument to context.WithValue and - // Context.Value. A key can be any type that supports equality; - // packages should define keys as an unexported type to avoid - // collisions. - // - // Packages that define a Context key should provide type-safe accessors - // for the values stores using that key: - // - // // Package user defines a User type that's stored in Contexts. - // package user - // - // import "golang.org/x/net/context" - // - // // User is the type of value stored in the Contexts. - // type User struct {...} - // - // // key is an unexported type for keys defined in this package. - // // This prevents collisions with keys defined in other packages. - // type key int - // - // // userKey is the key for user.User values in Contexts. It is - // // unexported; clients use user.NewContext and user.FromContext - // // instead of using this key directly. - // var userKey key = 0 - // - // // NewContext returns a new Context that carries value u. - // func NewContext(ctx context.Context, u *User) context.Context { - // return context.WithValue(ctx, userKey, u) - // } - // - // // FromContext returns the User value stored in ctx, if any. - // func FromContext(ctx context.Context) (*User, bool) { - // u, ok := ctx.Value(userKey).(*User) - // return u, ok - // } - Value(key interface{}) interface{} -} - -// Canceled is the error returned by Context.Err when the context is canceled. -var Canceled = errors.New("context canceled") - -// DeadlineExceeded is the error returned by Context.Err when the context's -// deadline passes. -var DeadlineExceeded = errors.New("context deadline exceeded") - -// An emptyCtx is never canceled, has no values, and has no deadline. It is not -// struct{}, since vars of this type must have distinct addresses. -type emptyCtx int - -func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { - return -} - -func (*emptyCtx) Done() <-chan struct{} { - return nil -} - -func (*emptyCtx) Err() error { - return nil -} - -func (*emptyCtx) Value(key interface{}) interface{} { - return nil -} - -func (e *emptyCtx) String() string { - switch e { - case background: - return "context.Background" - case todo: - return "context.TODO" - } - return "unknown empty Context" -} - -var ( - background = new(emptyCtx) - todo = new(emptyCtx) -) - -// Background returns a non-nil, empty Context. It is never canceled, has no -// values, and has no deadline. It is typically used by the main function, -// initialization, and tests, and as the top-level Context for incoming -// requests. -func Background() Context { - return background -} - -// TODO returns a non-nil, empty Context. Code should use context.TODO when -// it's unclear which Context to use or it's is not yet available (because the -// surrounding function has not yet been extended to accept a Context -// parameter). TODO is recognized by static analysis tools that determine -// whether Contexts are propagated correctly in a program. -func TODO() Context { - return todo -} - -// A CancelFunc tells an operation to abandon its work. -// A CancelFunc does not wait for the work to stop. -// After the first call, subsequent calls to a CancelFunc do nothing. -type CancelFunc func() - -// WithCancel returns a copy of parent with a new Done channel. The returned -// context's Done channel is closed when the returned cancel function is called -// or when the parent context's Done channel is closed, whichever happens first. -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete. -func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { - c := newCancelCtx(parent) - propagateCancel(parent, &c) - return &c, func() { c.cancel(true, Canceled) } -} - -// newCancelCtx returns an initialized cancelCtx. -func newCancelCtx(parent Context) cancelCtx { - return cancelCtx{ - Context: parent, - done: make(chan struct{}), - } -} - -// propagateCancel arranges for child to be canceled when parent is. -func propagateCancel(parent Context, child canceler) { - if parent.Done() == nil { - return // parent is never canceled - } - if p, ok := parentCancelCtx(parent); ok { - p.mu.Lock() - if p.err != nil { - // parent has already been canceled - child.cancel(false, p.err) - } else { - if p.children == nil { - p.children = make(map[canceler]bool) - } - p.children[child] = true - } - p.mu.Unlock() - } else { - go func() { - select { - case <-parent.Done(): - child.cancel(false, parent.Err()) - case <-child.Done(): - } - }() - } -} - -// parentCancelCtx follows a chain of parent references until it finds a -// *cancelCtx. This function understands how each of the concrete types in this -// package represents its parent. -func parentCancelCtx(parent Context) (*cancelCtx, bool) { - for { - switch c := parent.(type) { - case *cancelCtx: - return c, true - case *timerCtx: - return &c.cancelCtx, true - case *valueCtx: - parent = c.Context - default: - return nil, false - } - } -} - -// removeChild removes a context from its parent. -func removeChild(parent Context, child canceler) { - p, ok := parentCancelCtx(parent) - if !ok { - return - } - p.mu.Lock() - if p.children != nil { - delete(p.children, child) - } - p.mu.Unlock() -} - -// A canceler is a context type that can be canceled directly. The -// implementations are *cancelCtx and *timerCtx. -type canceler interface { - cancel(removeFromParent bool, err error) - Done() <-chan struct{} -} - -// A cancelCtx can be canceled. When canceled, it also cancels any children -// that implement canceler. -type cancelCtx struct { - Context - - done chan struct{} // closed by the first cancel call. - - mu sync.Mutex - children map[canceler]bool // set to nil by the first cancel call - err error // set to non-nil by the first cancel call -} - -func (c *cancelCtx) Done() <-chan struct{} { - return c.done -} - -func (c *cancelCtx) Err() error { - c.mu.Lock() - defer c.mu.Unlock() - return c.err -} - -func (c *cancelCtx) String() string { - return fmt.Sprintf("%v.WithCancel", c.Context) -} - -// cancel closes c.done, cancels each of c's children, and, if -// removeFromParent is true, removes c from its parent's children. -func (c *cancelCtx) cancel(removeFromParent bool, err error) { - if err == nil { - panic("context: internal error: missing cancel error") - } - c.mu.Lock() - if c.err != nil { - c.mu.Unlock() - return // already canceled - } - c.err = err - close(c.done) - for child := range c.children { - // NOTE: acquiring the child's lock while holding parent's lock. - child.cancel(false, err) - } - c.children = nil - c.mu.Unlock() - - if removeFromParent { - removeChild(c.Context, c) - } -} - -// WithDeadline returns a copy of the parent context with the deadline adjusted -// to be no later than d. If the parent's deadline is already earlier than d, -// WithDeadline(parent, d) is semantically equivalent to parent. The returned -// context's Done channel is closed when the deadline expires, when the returned -// cancel function is called, or when the parent context's Done channel is -// closed, whichever happens first. -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete. -func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { - if cur, ok := parent.Deadline(); ok && cur.Before(deadline) { - // The current deadline is already sooner than the new one. - return WithCancel(parent) - } - c := &timerCtx{ - cancelCtx: newCancelCtx(parent), - deadline: deadline, - } - propagateCancel(parent, c) - d := deadline.Sub(time.Now()) - if d <= 0 { - c.cancel(true, DeadlineExceeded) // deadline has already passed - return c, func() { c.cancel(true, Canceled) } - } - c.mu.Lock() - defer c.mu.Unlock() - if c.err == nil { - c.timer = time.AfterFunc(d, func() { - c.cancel(true, DeadlineExceeded) - }) - } - return c, func() { c.cancel(true, Canceled) } -} - -// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to -// implement Done and Err. It implements cancel by stopping its timer then -// delegating to cancelCtx.cancel. -type timerCtx struct { - cancelCtx - timer *time.Timer // Under cancelCtx.mu. - - deadline time.Time -} - -func (c *timerCtx) Deadline() (deadline time.Time, ok bool) { - return c.deadline, true -} - -func (c *timerCtx) String() string { - return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now())) -} - -func (c *timerCtx) cancel(removeFromParent bool, err error) { - c.cancelCtx.cancel(false, err) - if removeFromParent { - // Remove this timerCtx from its parent cancelCtx's children. - removeChild(c.cancelCtx.Context, c) - } - c.mu.Lock() - if c.timer != nil { - c.timer.Stop() - c.timer = nil - } - c.mu.Unlock() -} - -// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). -// -// Canceling this context releases resources associated with it, so code should -// call cancel as soon as the operations running in this Context complete: -// -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } -func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { - return WithDeadline(parent, time.Now().Add(timeout)) -} - -// WithValue returns a copy of parent in which the value associated with key is -// val. -// -// Use context Values only for request-scoped data that transits processes and -// APIs, not for passing optional parameters to functions. -func WithValue(parent Context, key interface{}, val interface{}) Context { - return &valueCtx{parent, key, val} -} - -// A valueCtx carries a key-value pair. It implements Value for that key and -// delegates all other calls to the embedded Context. -type valueCtx struct { - Context - key, val interface{} -} - -func (c *valueCtx) String() string { - return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val) -} - -func (c *valueCtx) Value(key interface{}) interface{} { - if c.key == key { - return c.val - } - return c.Context.Value(key) -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/context_test.go b/Godeps/_workspace/src/golang.org/x/net/context/context_test.go deleted file mode 100644 index 05345fc5e5..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/context_test.go +++ /dev/null @@ -1,575 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package context - -import ( - "fmt" - "math/rand" - "runtime" - "strings" - "sync" - "testing" - "time" -) - -// otherContext is a Context that's not one of the types defined in context.go. -// This lets us test code paths that differ based on the underlying type of the -// Context. -type otherContext struct { - Context -} - -func TestBackground(t *testing.T) { - c := Background() - if c == nil { - t.Fatalf("Background returned nil") - } - select { - case x := <-c.Done(): - t.Errorf("<-c.Done() == %v want nothing (it should block)", x) - default: - } - if got, want := fmt.Sprint(c), "context.Background"; got != want { - t.Errorf("Background().String() = %q want %q", got, want) - } -} - -func TestTODO(t *testing.T) { - c := TODO() - if c == nil { - t.Fatalf("TODO returned nil") - } - select { - case x := <-c.Done(): - t.Errorf("<-c.Done() == %v want nothing (it should block)", x) - default: - } - if got, want := fmt.Sprint(c), "context.TODO"; got != want { - t.Errorf("TODO().String() = %q want %q", got, want) - } -} - -func TestWithCancel(t *testing.T) { - c1, cancel := WithCancel(Background()) - - if got, want := fmt.Sprint(c1), "context.Background.WithCancel"; got != want { - t.Errorf("c1.String() = %q want %q", got, want) - } - - o := otherContext{c1} - c2, _ := WithCancel(o) - contexts := []Context{c1, o, c2} - - for i, c := range contexts { - if d := c.Done(); d == nil { - t.Errorf("c[%d].Done() == %v want non-nil", i, d) - } - if e := c.Err(); e != nil { - t.Errorf("c[%d].Err() == %v want nil", i, e) - } - - select { - case x := <-c.Done(): - t.Errorf("<-c.Done() == %v want nothing (it should block)", x) - default: - } - } - - cancel() - time.Sleep(100 * time.Millisecond) // let cancelation propagate - - for i, c := range contexts { - select { - case <-c.Done(): - default: - t.Errorf("<-c[%d].Done() blocked, but shouldn't have", i) - } - if e := c.Err(); e != Canceled { - t.Errorf("c[%d].Err() == %v want %v", i, e, Canceled) - } - } -} - -func TestParentFinishesChild(t *testing.T) { - // Context tree: - // parent -> cancelChild - // parent -> valueChild -> timerChild - parent, cancel := WithCancel(Background()) - cancelChild, stop := WithCancel(parent) - defer stop() - valueChild := WithValue(parent, "key", "value") - timerChild, stop := WithTimeout(valueChild, 10000*time.Hour) - defer stop() - - select { - case x := <-parent.Done(): - t.Errorf("<-parent.Done() == %v want nothing (it should block)", x) - case x := <-cancelChild.Done(): - t.Errorf("<-cancelChild.Done() == %v want nothing (it should block)", x) - case x := <-timerChild.Done(): - t.Errorf("<-timerChild.Done() == %v want nothing (it should block)", x) - case x := <-valueChild.Done(): - t.Errorf("<-valueChild.Done() == %v want nothing (it should block)", x) - default: - } - - // The parent's children should contain the two cancelable children. - pc := parent.(*cancelCtx) - cc := cancelChild.(*cancelCtx) - tc := timerChild.(*timerCtx) - pc.mu.Lock() - if len(pc.children) != 2 || !pc.children[cc] || !pc.children[tc] { - t.Errorf("bad linkage: pc.children = %v, want %v and %v", - pc.children, cc, tc) - } - pc.mu.Unlock() - - if p, ok := parentCancelCtx(cc.Context); !ok || p != pc { - t.Errorf("bad linkage: parentCancelCtx(cancelChild.Context) = %v, %v want %v, true", p, ok, pc) - } - if p, ok := parentCancelCtx(tc.Context); !ok || p != pc { - t.Errorf("bad linkage: parentCancelCtx(timerChild.Context) = %v, %v want %v, true", p, ok, pc) - } - - cancel() - - pc.mu.Lock() - if len(pc.children) != 0 { - t.Errorf("pc.cancel didn't clear pc.children = %v", pc.children) - } - pc.mu.Unlock() - - // parent and children should all be finished. - check := func(ctx Context, name string) { - select { - case <-ctx.Done(): - default: - t.Errorf("<-%s.Done() blocked, but shouldn't have", name) - } - if e := ctx.Err(); e != Canceled { - t.Errorf("%s.Err() == %v want %v", name, e, Canceled) - } - } - check(parent, "parent") - check(cancelChild, "cancelChild") - check(valueChild, "valueChild") - check(timerChild, "timerChild") - - // WithCancel should return a canceled context on a canceled parent. - precanceledChild := WithValue(parent, "key", "value") - select { - case <-precanceledChild.Done(): - default: - t.Errorf("<-precanceledChild.Done() blocked, but shouldn't have") - } - if e := precanceledChild.Err(); e != Canceled { - t.Errorf("precanceledChild.Err() == %v want %v", e, Canceled) - } -} - -func TestChildFinishesFirst(t *testing.T) { - cancelable, stop := WithCancel(Background()) - defer stop() - for _, parent := range []Context{Background(), cancelable} { - child, cancel := WithCancel(parent) - - select { - case x := <-parent.Done(): - t.Errorf("<-parent.Done() == %v want nothing (it should block)", x) - case x := <-child.Done(): - t.Errorf("<-child.Done() == %v want nothing (it should block)", x) - default: - } - - cc := child.(*cancelCtx) - pc, pcok := parent.(*cancelCtx) // pcok == false when parent == Background() - if p, ok := parentCancelCtx(cc.Context); ok != pcok || (ok && pc != p) { - t.Errorf("bad linkage: parentCancelCtx(cc.Context) = %v, %v want %v, %v", p, ok, pc, pcok) - } - - if pcok { - pc.mu.Lock() - if len(pc.children) != 1 || !pc.children[cc] { - t.Errorf("bad linkage: pc.children = %v, cc = %v", pc.children, cc) - } - pc.mu.Unlock() - } - - cancel() - - if pcok { - pc.mu.Lock() - if len(pc.children) != 0 { - t.Errorf("child's cancel didn't remove self from pc.children = %v", pc.children) - } - pc.mu.Unlock() - } - - // child should be finished. - select { - case <-child.Done(): - default: - t.Errorf("<-child.Done() blocked, but shouldn't have") - } - if e := child.Err(); e != Canceled { - t.Errorf("child.Err() == %v want %v", e, Canceled) - } - - // parent should not be finished. - select { - case x := <-parent.Done(): - t.Errorf("<-parent.Done() == %v want nothing (it should block)", x) - default: - } - if e := parent.Err(); e != nil { - t.Errorf("parent.Err() == %v want nil", e) - } - } -} - -func testDeadline(c Context, wait time.Duration, t *testing.T) { - select { - case <-time.After(wait): - t.Fatalf("context should have timed out") - case <-c.Done(): - } - if e := c.Err(); e != DeadlineExceeded { - t.Errorf("c.Err() == %v want %v", e, DeadlineExceeded) - } -} - -func TestDeadline(t *testing.T) { - c, _ := WithDeadline(Background(), time.Now().Add(100*time.Millisecond)) - if got, prefix := fmt.Sprint(c), "context.Background.WithDeadline("; !strings.HasPrefix(got, prefix) { - t.Errorf("c.String() = %q want prefix %q", got, prefix) - } - testDeadline(c, 200*time.Millisecond, t) - - c, _ = WithDeadline(Background(), time.Now().Add(100*time.Millisecond)) - o := otherContext{c} - testDeadline(o, 200*time.Millisecond, t) - - c, _ = WithDeadline(Background(), time.Now().Add(100*time.Millisecond)) - o = otherContext{c} - c, _ = WithDeadline(o, time.Now().Add(300*time.Millisecond)) - testDeadline(c, 200*time.Millisecond, t) -} - -func TestTimeout(t *testing.T) { - c, _ := WithTimeout(Background(), 100*time.Millisecond) - if got, prefix := fmt.Sprint(c), "context.Background.WithDeadline("; !strings.HasPrefix(got, prefix) { - t.Errorf("c.String() = %q want prefix %q", got, prefix) - } - testDeadline(c, 200*time.Millisecond, t) - - c, _ = WithTimeout(Background(), 100*time.Millisecond) - o := otherContext{c} - testDeadline(o, 200*time.Millisecond, t) - - c, _ = WithTimeout(Background(), 100*time.Millisecond) - o = otherContext{c} - c, _ = WithTimeout(o, 300*time.Millisecond) - testDeadline(c, 200*time.Millisecond, t) -} - -func TestCanceledTimeout(t *testing.T) { - c, _ := WithTimeout(Background(), 200*time.Millisecond) - o := otherContext{c} - c, cancel := WithTimeout(o, 400*time.Millisecond) - cancel() - time.Sleep(100 * time.Millisecond) // let cancelation propagate - select { - case <-c.Done(): - default: - t.Errorf("<-c.Done() blocked, but shouldn't have") - } - if e := c.Err(); e != Canceled { - t.Errorf("c.Err() == %v want %v", e, Canceled) - } -} - -type key1 int -type key2 int - -var k1 = key1(1) -var k2 = key2(1) // same int as k1, different type -var k3 = key2(3) // same type as k2, different int - -func TestValues(t *testing.T) { - check := func(c Context, nm, v1, v2, v3 string) { - if v, ok := c.Value(k1).(string); ok == (len(v1) == 0) || v != v1 { - t.Errorf(`%s.Value(k1).(string) = %q, %t want %q, %t`, nm, v, ok, v1, len(v1) != 0) - } - if v, ok := c.Value(k2).(string); ok == (len(v2) == 0) || v != v2 { - t.Errorf(`%s.Value(k2).(string) = %q, %t want %q, %t`, nm, v, ok, v2, len(v2) != 0) - } - if v, ok := c.Value(k3).(string); ok == (len(v3) == 0) || v != v3 { - t.Errorf(`%s.Value(k3).(string) = %q, %t want %q, %t`, nm, v, ok, v3, len(v3) != 0) - } - } - - c0 := Background() - check(c0, "c0", "", "", "") - - c1 := WithValue(Background(), k1, "c1k1") - check(c1, "c1", "c1k1", "", "") - - if got, want := fmt.Sprint(c1), `context.Background.WithValue(1, "c1k1")`; got != want { - t.Errorf("c.String() = %q want %q", got, want) - } - - c2 := WithValue(c1, k2, "c2k2") - check(c2, "c2", "c1k1", "c2k2", "") - - c3 := WithValue(c2, k3, "c3k3") - check(c3, "c2", "c1k1", "c2k2", "c3k3") - - c4 := WithValue(c3, k1, nil) - check(c4, "c4", "", "c2k2", "c3k3") - - o0 := otherContext{Background()} - check(o0, "o0", "", "", "") - - o1 := otherContext{WithValue(Background(), k1, "c1k1")} - check(o1, "o1", "c1k1", "", "") - - o2 := WithValue(o1, k2, "o2k2") - check(o2, "o2", "c1k1", "o2k2", "") - - o3 := otherContext{c4} - check(o3, "o3", "", "c2k2", "c3k3") - - o4 := WithValue(o3, k3, nil) - check(o4, "o4", "", "c2k2", "") -} - -func TestAllocs(t *testing.T) { - bg := Background() - for _, test := range []struct { - desc string - f func() - limit float64 - gccgoLimit float64 - }{ - { - desc: "Background()", - f: func() { Background() }, - limit: 0, - gccgoLimit: 0, - }, - { - desc: fmt.Sprintf("WithValue(bg, %v, nil)", k1), - f: func() { - c := WithValue(bg, k1, nil) - c.Value(k1) - }, - limit: 3, - gccgoLimit: 3, - }, - { - desc: "WithTimeout(bg, 15*time.Millisecond)", - f: func() { - c, _ := WithTimeout(bg, 15*time.Millisecond) - <-c.Done() - }, - limit: 8, - gccgoLimit: 15, - }, - { - desc: "WithCancel(bg)", - f: func() { - c, cancel := WithCancel(bg) - cancel() - <-c.Done() - }, - limit: 5, - gccgoLimit: 8, - }, - { - desc: "WithTimeout(bg, 100*time.Millisecond)", - f: func() { - c, cancel := WithTimeout(bg, 100*time.Millisecond) - cancel() - <-c.Done() - }, - limit: 8, - gccgoLimit: 25, - }, - } { - limit := test.limit - if runtime.Compiler == "gccgo" { - // gccgo does not yet do escape analysis. - // TOOD(iant): Remove this when gccgo does do escape analysis. - limit = test.gccgoLimit - } - if n := testing.AllocsPerRun(100, test.f); n > limit { - t.Errorf("%s allocs = %f want %d", test.desc, n, int(limit)) - } - } -} - -func TestSimultaneousCancels(t *testing.T) { - root, cancel := WithCancel(Background()) - m := map[Context]CancelFunc{root: cancel} - q := []Context{root} - // Create a tree of contexts. - for len(q) != 0 && len(m) < 100 { - parent := q[0] - q = q[1:] - for i := 0; i < 4; i++ { - ctx, cancel := WithCancel(parent) - m[ctx] = cancel - q = append(q, ctx) - } - } - // Start all the cancels in a random order. - var wg sync.WaitGroup - wg.Add(len(m)) - for _, cancel := range m { - go func(cancel CancelFunc) { - cancel() - wg.Done() - }(cancel) - } - // Wait on all the contexts in a random order. - for ctx := range m { - select { - case <-ctx.Done(): - case <-time.After(1 * time.Second): - buf := make([]byte, 10<<10) - n := runtime.Stack(buf, true) - t.Fatalf("timed out waiting for <-ctx.Done(); stacks:\n%s", buf[:n]) - } - } - // Wait for all the cancel functions to return. - done := make(chan struct{}) - go func() { - wg.Wait() - close(done) - }() - select { - case <-done: - case <-time.After(1 * time.Second): - buf := make([]byte, 10<<10) - n := runtime.Stack(buf, true) - t.Fatalf("timed out waiting for cancel functions; stacks:\n%s", buf[:n]) - } -} - -func TestInterlockedCancels(t *testing.T) { - parent, cancelParent := WithCancel(Background()) - child, cancelChild := WithCancel(parent) - go func() { - parent.Done() - cancelChild() - }() - cancelParent() - select { - case <-child.Done(): - case <-time.After(1 * time.Second): - buf := make([]byte, 10<<10) - n := runtime.Stack(buf, true) - t.Fatalf("timed out waiting for child.Done(); stacks:\n%s", buf[:n]) - } -} - -func TestLayersCancel(t *testing.T) { - testLayers(t, time.Now().UnixNano(), false) -} - -func TestLayersTimeout(t *testing.T) { - testLayers(t, time.Now().UnixNano(), true) -} - -func testLayers(t *testing.T, seed int64, testTimeout bool) { - rand.Seed(seed) - errorf := func(format string, a ...interface{}) { - t.Errorf(fmt.Sprintf("seed=%d: %s", seed, format), a...) - } - const ( - timeout = 200 * time.Millisecond - minLayers = 30 - ) - type value int - var ( - vals []*value - cancels []CancelFunc - numTimers int - ctx = Background() - ) - for i := 0; i < minLayers || numTimers == 0 || len(cancels) == 0 || len(vals) == 0; i++ { - switch rand.Intn(3) { - case 0: - v := new(value) - ctx = WithValue(ctx, v, v) - vals = append(vals, v) - case 1: - var cancel CancelFunc - ctx, cancel = WithCancel(ctx) - cancels = append(cancels, cancel) - case 2: - var cancel CancelFunc - ctx, cancel = WithTimeout(ctx, timeout) - cancels = append(cancels, cancel) - numTimers++ - } - } - checkValues := func(when string) { - for _, key := range vals { - if val := ctx.Value(key).(*value); key != val { - errorf("%s: ctx.Value(%p) = %p want %p", when, key, val, key) - } - } - } - select { - case <-ctx.Done(): - errorf("ctx should not be canceled yet") - default: - } - if s, prefix := fmt.Sprint(ctx), "context.Background."; !strings.HasPrefix(s, prefix) { - t.Errorf("ctx.String() = %q want prefix %q", s, prefix) - } - t.Log(ctx) - checkValues("before cancel") - if testTimeout { - select { - case <-ctx.Done(): - case <-time.After(timeout + 100*time.Millisecond): - errorf("ctx should have timed out") - } - checkValues("after timeout") - } else { - cancel := cancels[rand.Intn(len(cancels))] - cancel() - select { - case <-ctx.Done(): - default: - errorf("ctx should be canceled") - } - checkValues("after cancel") - } -} - -func TestCancelRemoves(t *testing.T) { - checkChildren := func(when string, ctx Context, want int) { - if got := len(ctx.(*cancelCtx).children); got != want { - t.Errorf("%s: context has %d children, want %d", when, got, want) - } - } - - ctx, _ := WithCancel(Background()) - checkChildren("after creation", ctx, 0) - _, cancel := WithCancel(ctx) - checkChildren("with WithCancel child ", ctx, 1) - cancel() - checkChildren("after cancelling WithCancel child", ctx, 0) - - ctx, _ = WithCancel(Background()) - checkChildren("after creation", ctx, 0) - _, cancel = WithTimeout(ctx, 60*time.Minute) - checkChildren("with WithTimeout child ", ctx, 1) - cancel() - checkChildren("after cancelling WithTimeout child", ctx, 0) -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq.go b/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq.go deleted file mode 100644 index 48610e3627..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.5 - -package ctxhttp - -import "net/http" - -func canceler(client *http.Client, req *http.Request) func() { - ch := make(chan struct{}) - req.Cancel = ch - - return func() { - close(ch) - } -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq_go14.go b/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq_go14.go deleted file mode 100644 index 56bcbadb85..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/cancelreq_go14.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.5 - -package ctxhttp - -import "net/http" - -type requestCanceler interface { - CancelRequest(*http.Request) -} - -func canceler(client *http.Client, req *http.Request) func() { - rc, ok := client.Transport.(requestCanceler) - if !ok { - return func() {} - } - return func() { - rc.CancelRequest(req) - } -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp.go b/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp.go deleted file mode 100644 index 504dd63ed9..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package ctxhttp provides helper functions for performing context-aware HTTP requests. -package ctxhttp // import "golang.org/x/net/context/ctxhttp" - -import ( - "io" - "net/http" - "net/url" - "strings" - - "golang.org/x/net/context" -) - -// Do sends an HTTP request with the provided http.Client and returns an HTTP response. -// If the client is nil, http.DefaultClient is used. -// If the context is canceled or times out, ctx.Err() will be returned. -func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) { - if client == nil { - client = http.DefaultClient - } - - // Request cancelation changed in Go 1.5, see cancelreq.go and cancelreq_go14.go. - cancel := canceler(client, req) - - type responseAndError struct { - resp *http.Response - err error - } - result := make(chan responseAndError, 1) - - go func() { - resp, err := client.Do(req) - result <- responseAndError{resp, err} - }() - - select { - case <-ctx.Done(): - cancel() - return nil, ctx.Err() - case r := <-result: - return r.resp, r.err - } -} - -// Get issues a GET request via the Do function. -func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - return Do(ctx, client, req) -} - -// Head issues a HEAD request via the Do function. -func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) { - req, err := http.NewRequest("HEAD", url, nil) - if err != nil { - return nil, err - } - return Do(ctx, client, req) -} - -// Post issues a POST request via the Do function. -func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) { - req, err := http.NewRequest("POST", url, body) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", bodyType) - return Do(ctx, client, req) -} - -// PostForm issues a POST request via the Do function. -func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) { - return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp_test.go b/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp_test.go deleted file mode 100644 index 47b53d7f18..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/ctxhttp/ctxhttp_test.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package ctxhttp - -import ( - "io/ioutil" - "net/http" - "net/http/httptest" - "testing" - "time" - - "golang.org/x/net/context" -) - -const ( - requestDuration = 100 * time.Millisecond - requestBody = "ok" -) - -func TestNoTimeout(t *testing.T) { - ctx := context.Background() - resp, err := doRequest(ctx) - - if resp == nil || err != nil { - t.Fatalf("error received from client: %v %v", err, resp) - } -} -func TestCancel(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - go func() { - time.Sleep(requestDuration / 2) - cancel() - }() - - resp, err := doRequest(ctx) - - if resp != nil || err == nil { - t.Fatalf("expected error, didn't get one. resp: %v", resp) - } - if err != ctx.Err() { - t.Fatalf("expected error from context but got: %v", err) - } -} - -func TestCancelAfterRequest(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - - resp, err := doRequest(ctx) - - // Cancel before reading the body. - // Request.Body should still be readable after the context is canceled. - cancel() - - b, err := ioutil.ReadAll(resp.Body) - if err != nil || string(b) != requestBody { - t.Fatalf("could not read body: %q %v", b, err) - } -} - -func doRequest(ctx context.Context) (*http.Response, error) { - var okHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - time.Sleep(requestDuration) - w.Write([]byte(requestBody)) - }) - - serv := httptest.NewServer(okHandler) - defer serv.Close() - - return Get(ctx, nil, serv.URL) -} diff --git a/Godeps/_workspace/src/golang.org/x/net/context/withtimeout_test.go b/Godeps/_workspace/src/golang.org/x/net/context/withtimeout_test.go deleted file mode 100644 index a6754dc368..0000000000 --- a/Godeps/_workspace/src/golang.org/x/net/context/withtimeout_test.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2014 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package context_test - -import ( - "fmt" - "time" - - "golang.org/x/net/context" -) - -func ExampleWithTimeout() { - // Pass a context with a timeout to tell a blocking function that it - // should abandon its work after the timeout elapses. - ctx, _ := context.WithTimeout(context.Background(), 100*time.Millisecond) - select { - case <-time.After(200 * time.Millisecond): - fmt.Println("overslept") - case <-ctx.Done(): - fmt.Println(ctx.Err()) // prints "context deadline exceeded" - } - // Output: - // context deadline exceeded -} From 4721bc7f55c1e68163ab8e1cb05249b751d4f1e9 Mon Sep 17 00:00:00 2001 From: Kent Rancourt Date: Tue, 26 Jan 2016 15:34:00 -0500 Subject: [PATCH 021/178] fix(router): Fix issues establishing real end-client IP --- router/rootfs/etc/confd/templates/deis.conf | 5 ++- router/rootfs/etc/confd/templates/nginx.conf | 42 +++++--------------- 2 files changed, 12 insertions(+), 35 deletions(-) diff --git a/router/rootfs/etc/confd/templates/deis.conf b/router/rootfs/etc/confd/templates/deis.conf index 895d5cd3c2..67dfbd0e7d 100644 --- a/router/rootfs/etc/confd/templates/deis.conf +++ b/router/rootfs/etc/confd/templates/deis.conf @@ -1,9 +1,10 @@ +{{ $useProxyProtocol := or (getv "/deis/router/proxyProtocol") "false" }} server_name_in_redirect off; port_in_redirect off; -listen 80{{ if exists "/deis/router/proxyProtocol" }} proxy_protocol{{ end }}; +listen 80{{ if ne $useProxyProtocol "false" }} proxy_protocol{{ end }}; {{ if exists "/deis/router/sslCert" }} -listen 443 ssl http2{{ if exists "/deis/router/proxyProtocol" }} proxy_protocol{{ end }}; +listen 443 ssl http2{{ if ne $useProxyProtocol "false" }} proxy_protocol{{ end }}; ssl_certificate /etc/ssl/deis.cert; ssl_certificate_key /etc/ssl/deis.key; include ssl.conf; diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 9c94571690..c67ce43100 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -49,12 +49,12 @@ http { {{ $firewallErrorCode := or (getv "/deis/router/firewall/errorCode") "400" }} client_max_body_size "{{ or (getv "/deis/router/bodySize") "1m" }}"; - {{ $useProxyProtocol := or (getv "/deis/router/proxyProtocol") "false" }}{{ if ne $useProxyProtocol "false" }} set_real_ip_from {{ or (getv "/deis/router/proxyRealIpCidr") "10.0.0.0/8" }}; - real_ip_header proxy_protocol; + {{ $useProxyProtocol := or (getv "/deis/router/proxyProtocol") "false" }}{{ if ne $useProxyProtocol "false" }} + real_ip_header proxy_protocol;{{ else }}real_ip_header X-Forwarded-For; {{ end }} - log_format upstreaminfo '[$time_local] - {{ if ne $useProxyProtocol "false" }}$proxy_protocol_addr{{ else }}$remote_addr{{ end }} - $remote_user - $status - "$request" - $bytes_sent - "$http_referer" - "$http_user_agent" - "$server_name" - $upstream_addr - $http_host - $upstream_response_time - $request_time'; + log_format upstreaminfo '[$time_local] - $remote_addr - $remote_user - $status - "$request" - $bytes_sent - "$http_referer" - "$http_user_agent" - "$server_name" - $upstream_addr - $http_host - $upstream_response_time - $request_time'; # send logs to STDOUT so they can be seen using 'docker logs' access_log /opt/nginx/logs/access.log upstreaminfo; @@ -116,11 +116,7 @@ http { {{ if eq $useFirewall "true" }}include /opt/nginx/firewall/active-mode.rules;{{ end }} proxy_buffering off; proxy_set_header Host $host; - {{ if ne $useProxyProtocol "false" }} - proxy_set_header X-Forwarded-For $proxy_protocol_addr; - {{ else }} - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - {{ end }} + proxy_set_header X-Forwarded-For $remote_addr; proxy_redirect off; proxy_connect_timeout {{ or (getv "/deis/router/controller/timeout/connect") "10s" }}; proxy_send_timeout {{ or (getv "/deis/router/controller/timeout/send") "20m" }}; @@ -169,11 +165,7 @@ http { {{ if eq $useFirewall "true" }}include /opt/nginx/firewall/active-mode.rules;{{ end }} proxy_buffering off; proxy_set_header Host $host; - {{ if ne $useProxyProtocol "false" }} - proxy_set_header X-Forwarded-For $proxy_protocol_addr; - {{ else }} - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - {{ end }} + proxy_set_header X-Forwarded-For $remote_addr; proxy_redirect off; proxy_connect_timeout 10s; proxy_send_timeout {{ $defaultTimeout }}s; @@ -250,11 +242,7 @@ http { } proxy_set_header X-Forwarded-Port $access_port; proxy_set_header X-Forwarded-Proto $access_scheme; - {{ if ne $useProxyProtocol "false" }} - proxy_set_header X-Forwarded-For $proxy_protocol_addr; - {{ else }} - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - {{ end }} + proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Ssl $access_ssl; proxy_redirect off; proxy_connect_timeout 30s; @@ -327,11 +315,7 @@ http { } proxy_set_header X-Forwarded-Port $access_port; proxy_set_header X-Forwarded-Proto $access_scheme; - {{ if ne $useProxyProtocol "false" }} - proxy_set_header X-Forwarded-For $proxy_protocol_addr; - {{ else }} - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - {{ end }} + proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Ssl $access_ssl; proxy_redirect off; proxy_connect_timeout 30s; @@ -455,11 +439,7 @@ http { } proxy_set_header X-Forwarded-Port $access_port; proxy_set_header X-Forwarded-Proto $access_scheme; - {{ if ne $useProxyProtocol "false" }} - proxy_set_header X-Forwarded-For $proxy_protocol_addr; - {{ else }} - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - {{ end }} + proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Ssl $access_ssl; proxy_redirect off; proxy_connect_timeout 30s; @@ -517,11 +497,7 @@ http { } proxy_set_header X-Forwarded-Port $access_port; proxy_set_header X-Forwarded-Proto $access_scheme; - {{ if ne $useProxyProtocol "false" }} - proxy_set_header X-Forwarded-For $proxy_protocol_addr; - {{ else }} - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - {{ end }} + proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Ssl $access_ssl; proxy_redirect off; proxy_connect_timeout 30s; From 0576a364607f0a0ff55d5523e4b8ed5cbe96bfb2 Mon Sep 17 00:00:00 2001 From: Ben Wilber Date: Sat, 12 Sep 2015 00:01:17 -0400 Subject: [PATCH 022/178] feat(controller): add simple health check view --- controller/api/tests/__init__.py | 1 + controller/api/tests/test_healthcheck.py | 24 ++++++++++++++++++++++++ controller/api/views.py | 12 ++++++++++++ controller/bin/boot | 6 +++--- controller/deis/urls.py | 2 ++ 5 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 controller/api/tests/test_healthcheck.py diff --git a/controller/api/tests/__init__.py b/controller/api/tests/__init__.py index 76566aacfd..a2b42e5869 100644 --- a/controller/api/tests/__init__.py +++ b/controller/api/tests/__init__.py @@ -57,6 +57,7 @@ def mock_status_ok(*args, **kwargs): from .test_config import * # noqa from .test_container import * # noqa from .test_domain import * # noqa +from .test_healthcheck import * # noqa from .test_hooks import * # noqa from .test_key import * # noqa from .test_limits import * # noqa diff --git a/controller/api/tests/test_healthcheck.py b/controller/api/tests/test_healthcheck.py new file mode 100644 index 0000000000..81836f5441 --- /dev/null +++ b/controller/api/tests/test_healthcheck.py @@ -0,0 +1,24 @@ +from __future__ import unicode_literals + +from django.test import TestCase + + +class HealthCheckTest(TestCase): + + def setUp(self): + self.url = '/health-check' + + def test_healthcheck(self): + # GET and HEAD (no auth required) + resp = self.client.get(self.url) + self.assertEqual(resp.status_code, 200) + self.assertEqual(resp.content, "OK") + + resp = self.client.head(self.url) + self.assertEqual(resp.status_code, 200) + + def test_healthcheck_invalid(self): + for method in ('put', 'post', 'patch', 'delete'): + resp = getattr(self.client, method)(self.url) + # method not allowed + self.assertEqual(resp.status_code, 405) diff --git a/controller/api/views.py b/controller/api/views.py index e159cf4ab2..6ceb85fb17 100644 --- a/controller/api/views.py +++ b/controller/api/views.py @@ -4,9 +4,11 @@ from django.conf import settings from django.core.exceptions import ValidationError from django.contrib.auth.models import User +from django.http import HttpResponse from django.shortcuts import get_object_or_404 from guardian.shortcuts import assign_perm, get_objects_for_user, \ get_users_with_perms, remove_perm +from django.views.generic import View from rest_framework import mixins, renderers, status from rest_framework.exceptions import PermissionDenied from rest_framework.permissions import IsAuthenticated @@ -19,6 +21,16 @@ import requests +class HealthCheckView(View): + """Simple health check view to determine if the server + is responding to HTTP requests. + """ + + def get(self, request): + return HttpResponse("OK") + head = get + + class UserRegistrationViewSet(GenericViewSet, mixins.CreateModelMixin): """ViewSet to handle registering new users. The logic is in the serializer.""" diff --git a/controller/bin/boot b/controller/bin/boot index 76437c9205..0aa04bc5d1 100755 --- a/controller/bin/boot +++ b/controller/bin/boot @@ -113,15 +113,15 @@ if [[ ! -z $EXTERNAL_PORT ]]; then # configure service discovery PORT=${PORT:-8000} - PROTO=${PROTO:-tcp} + PROTO=${PROTO:-http} set +e # wait for the service to become available on PORT - sleep 1 && while [[ -z $(netstat -lnt | awk "\$6 == \"LISTEN\" && \$4 ~ \".$PORT\" && \$1 ~ \"$PROTO.?\"") ]] ; do sleep 1; done + sleep 1 && while ! curl -sf "${PROTO}://localhost:${PORT}/health-check" > /dev/null ; do sleep 1; done # while the port is listening, publish to etcd - while [[ ! -z $(netstat -lnt | awk "\$6 == \"LISTEN\" && \$4 ~ \".$PORT\" && \$1 ~ \"$PROTO.?\"") ]] ; do + while curl -sf "${PROTO}://localhost:${PORT}/health-check" > /dev/null ; do etcdctl --no-sync -C "$ETCD" set "$ETCD_PATH/host" "$HOST" --ttl "$ETCD_TTL" >/dev/null etcdctl --no-sync -C "$ETCD" set "$ETCD_PATH/port" "$EXTERNAL_PORT" --ttl "$ETCD_TTL" >/dev/null sleep $((ETCD_TTL/2)) # sleep for half the TTL diff --git a/controller/deis/urls.py b/controller/deis/urls.py index e7df3d405a..d2db968546 100644 --- a/controller/deis/urls.py +++ b/controller/deis/urls.py @@ -10,6 +10,7 @@ from django.conf import settings from django.conf.urls import patterns, include, url from django.contrib import admin +from api.views import HealthCheckView admin.autodiscover() @@ -17,6 +18,7 @@ urlpatterns = patterns( '', + url(r'^health-check$', HealthCheckView.as_view()), url(r'^v1/', include('api.urls')), ) From ebbc78c039533fe7f7a46ed38d0f56ce5de6d08b Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 27 Jan 2016 11:55:14 -0800 Subject: [PATCH 023/178] ref(controller): change healthcheck URL to healthz --- controller/api/tests/test_healthcheck.py | 2 +- controller/bin/boot | 4 ++-- controller/deis/urls.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/controller/api/tests/test_healthcheck.py b/controller/api/tests/test_healthcheck.py index 81836f5441..e62ce5f4d0 100644 --- a/controller/api/tests/test_healthcheck.py +++ b/controller/api/tests/test_healthcheck.py @@ -6,7 +6,7 @@ class HealthCheckTest(TestCase): def setUp(self): - self.url = '/health-check' + self.url = '/healthz' def test_healthcheck(self): # GET and HEAD (no auth required) diff --git a/controller/bin/boot b/controller/bin/boot index 0aa04bc5d1..87bf995fd5 100755 --- a/controller/bin/boot +++ b/controller/bin/boot @@ -118,10 +118,10 @@ if [[ ! -z $EXTERNAL_PORT ]]; then set +e # wait for the service to become available on PORT - sleep 1 && while ! curl -sf "${PROTO}://localhost:${PORT}/health-check" > /dev/null ; do sleep 1; done + sleep 1 && while ! curl -sf "${PROTO}://localhost:${PORT}/healthz" > /dev/null ; do sleep 1; done # while the port is listening, publish to etcd - while curl -sf "${PROTO}://localhost:${PORT}/health-check" > /dev/null ; do + while curl -sf "${PROTO}://localhost:${PORT}/healthz" > /dev/null ; do etcdctl --no-sync -C "$ETCD" set "$ETCD_PATH/host" "$HOST" --ttl "$ETCD_TTL" >/dev/null etcdctl --no-sync -C "$ETCD" set "$ETCD_PATH/port" "$EXTERNAL_PORT" --ttl "$ETCD_TTL" >/dev/null sleep $((ETCD_TTL/2)) # sleep for half the TTL diff --git a/controller/deis/urls.py b/controller/deis/urls.py index d2db968546..e864fe5612 100644 --- a/controller/deis/urls.py +++ b/controller/deis/urls.py @@ -18,7 +18,7 @@ urlpatterns = patterns( '', - url(r'^health-check$', HealthCheckView.as_view()), + url(r'^healthz$', HealthCheckView.as_view()), url(r'^v1/', include('api.urls')), ) From 68d46280044887bef8923a79cd80fa6534b5a540 Mon Sep 17 00:00:00 2001 From: Matthew Date: Wed, 27 Jan 2016 11:59:23 -0800 Subject: [PATCH 024/178] style(controller): fix flake8 --- controller/api/tests/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/api/tests/__init__.py b/controller/api/tests/__init__.py index a2b42e5869..114cbabba9 100644 --- a/controller/api/tests/__init__.py +++ b/controller/api/tests/__init__.py @@ -57,7 +57,7 @@ def mock_status_ok(*args, **kwargs): from .test_config import * # noqa from .test_container import * # noqa from .test_domain import * # noqa -from .test_healthcheck import * # noqa +from .test_healthcheck import * # noqa from .test_hooks import * # noqa from .test_key import * # noqa from .test_limits import * # noqa From a0da307f4fec1492b5883e823bd01b14d4d6a232 Mon Sep 17 00:00:00 2001 From: Kent Rancourt Date: Tue, 26 Jan 2016 13:27:14 -0500 Subject: [PATCH 025/178] fix(logspout): Truncate lines too big for a single UDP packet --- logspout/logspout.go | 45 +++++++++++++++++++++++++++++--------------- tests/apps_test.go | 27 ++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 17 deletions(-) diff --git a/logspout/logspout.go b/logspout/logspout.go index a44da119d0..531dbd2efa 100644 --- a/logspout/logspout.go +++ b/logspout/logspout.go @@ -20,6 +20,11 @@ import ( "golang.org/x/net/websocket" ) +const ( + MAX_UDP_MSG_BYTES = 65507 + MAX_TCP_MSG_BYTES = 1048576 +) + var debugMode bool func debug(v ...interface{}) { @@ -65,32 +70,42 @@ func syslogStreamer(target Target, types []string, logstream chan *Log) { continue } tag, pid, data := getLogParts(logline) - var conn net.Conn + + // HACK: Go's syslog package hardcodes the log format, so let's send our own message + data = fmt.Sprintf("%s %s[%s]: %s", + time.Now().Format(getopt("DATETIME_FORMAT", dtime.DeisDatetimeFormat)), + tag, + pid, + data) + if strings.EqualFold(target.Protocol, "tcp") { addr, err := net.ResolveTCPAddr("tcp", target.Addr) assert(err, "syslog") - tcpconn, err := net.DialTCP("tcp", nil, addr) + conn, err := net.DialTCP("tcp", nil, addr) + assert(err, "syslog") + assert(conn.SetWriteBuffer(MAX_TCP_MSG_BYTES), "syslog") + _, err = fmt.Fprintln(conn, data) assert(err, "syslog") - assert(tcpconn.SetWriteBuffer(1048576), "syslog") - conn = tcpconn } else if strings.EqualFold(target.Protocol, "udp") { + // Truncate the message if it's too long to fit in a single UDP packet. + // Get the bytes first. If the string has non-UTF8 chars, the number of + // bytes might exceed the number of characters and it would be good to + // know that up front. + dataBytes := []byte(data) + if len(dataBytes) > MAX_UDP_MSG_BYTES { + // Truncate the bytes and add ellipses. + dataBytes = append(dataBytes[:MAX_UDP_MSG_BYTES-3], "..."...) + } addr, err := net.ResolveUDPAddr("udp", target.Addr) assert(err, "syslog") - udpconn, err := net.DialUDP("udp", nil, addr) + conn, err := net.DialUDP("udp", nil, addr) + assert(err, "syslog") + assert(conn.SetWriteBuffer(MAX_UDP_MSG_BYTES), "syslog") + _, err = conn.Write(dataBytes) assert(err, "syslog") - assert(udpconn.SetWriteBuffer(1048576), "syslog") - conn = udpconn } else { assert(fmt.Errorf("%s is not a supported protocol, use either udp or tcp", target.Protocol), "syslog") } - // HACK: Go's syslog package hardcodes the log format, so let's send our own message - _, err := fmt.Fprintf(conn, - "%s %s[%s]: %s", - time.Now().Format(getopt("DATETIME_FORMAT", dtime.DeisDatetimeFormat)), - tag, - pid, - data) - assert(err, "syslog") } } diff --git a/tests/apps_test.go b/tests/apps_test.go index a8318b5b3e..5686f1bc70 100644 --- a/tests/apps_test.go +++ b/tests/apps_test.go @@ -6,7 +6,9 @@ import ( "fmt" "math/rand" "os" + "strings" "testing" + "time" "github.com/deis/deis/tests/utils" ) @@ -27,6 +29,9 @@ var ( ) func randomString(n int) string { + // Be sure we've seeded the random number generator, otherwise we could get the same string + // every time. + rand.Seed(time.Now().UnixNano()) var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") b := make([]rune, n) for i := range b { @@ -121,9 +126,27 @@ func appsRunTest(t *testing.T, params *utils.DeisTestConfig) { } utils.CheckList(t, cmd, params, "Hello, 世界", false) utils.Execute(t, "apps:run env", params, true, "GIT_SHA") - // run a REALLY large command to test https://github.com/deis/deis/issues/2046 + // Fleet/systemd unit files have a limit of 2048 characters per line or else one encounters + // problems parsing the unit. To verify long log messages are truncated and do not crash + // logspout (see https://github.com/deis/deis/issues/2046) we must issue a (relatively) short + // command via `deis apps:run` that produces a LONG, but testable (predictable) log message we + // can search for in the output of `deis logs`. + // + // The strategy for achieving this is to generate 1k random characters, then use that with a + // command submitted via `deis apps:run` that will echo those 1k bytes 64x (on a single line). + // Such a message is long enough to crash logspout if handled improperly and ALSO gives us a + // large, distinct, and predictable string we can search for in the logs to assert success (and + // assert that the message didn't crash logspout) WITHOUT ever needing to transmit such an + // egregiously long command via `deis apps:run`. largeString := randomString(1024) - utils.Execute(t, "apps:run echo "+largeString, params, false, largeString) + utils.Execute(t, fmt.Sprintf("apps:run \"printf '%s%%.0s' {1..64}\"", largeString), params, false, largeString) + // To assert the long message didn't crash logspout AND made it to the logger, we will search + // the logs for a fragment of the long message-- specifically 2x the random string we generated. + // This will help us ensure the actual log message made it through and not JUST the log message + // that states the command being execured via `deis apps:run`. We want to find the former, not + // the latter because the latter is too short a message to have possibly crashed logspout if + // mishandled. + utils.Execute(t, "logs", params, false, strings.Repeat(largeString, 2)) if err := utils.Chdir(".."); err != nil { t.Fatal(err) } From 31a9b9949e0746ee7a5e99f91022bfefe6c2f2d7 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Thu, 28 Jan 2016 15:09:53 -0800 Subject: [PATCH 026/178] chore(*): remove k8s scheduler code This code is now considered dead for v1.13.0 LTS, so let's remove it. --- contrib/coreos/user-data.example | 28 ---- deisctl/units/deis-router.service | 1 - logspout/logspout.go | 4 - router/cmd/boot/boot.go | 1 - .../rootfs/etc/confd/conf.d/nginx.conf.toml | 1 - router/rootfs/etc/confd/templates/nginx.conf | 151 ------------------ 6 files changed, 186 deletions(-) diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index bd3d8582a9..f47f66b4d7 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -277,31 +277,3 @@ write_files: sleep 1 && echo .; done; exit $? - - path: /opt/bin/download-k8s-binary - permissions: '0755' - content: | - #!/usr/bin/env bash - export K8S_VERSION="v1.0.1" - mkdir -p /opt/bin - FILE=$1 - if [ ! -f /opt/bin/$FILE ]; then - curl -sSL -o /opt/bin/$FILE https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/linux/amd64/$FILE - chmod +x /opt/bin/$FILE - else - # we check the version of the binary - INSTALLED_VERSION=$(/opt/bin/$FILE --version) - MATCH=$(echo "${INSTALLED_VERSION}" | grep -c "${K8S_VERSION}") - if [ $MATCH -eq 0 ]; then - # the version is different - curl -sSL -o /opt/bin/$FILE https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/linux/amd64/$FILE - chmod +x /opt/bin/$FILE - fi - fi - - path: /opt/bin/scheduler-policy.json - content: | - { - "kind": "Policy", - "apiVersion": "v1", - "predicates": [{"name": "PodFitsPorts"},{"name": "PodFitsResources"},{"name": "NoDiskConflict"},{"name": "MatchNodeSelector"},{"name": "HostName"}], - "priorities": [{"name": "LeastRequestedPriority","weight": 1},{"name": "BalancedResourceAllocation","weight": 1},{"name": "ServiceSpreadingPriority","weight": 2},{"name": "EqualPriority","weight": 1}] - } diff --git a/deisctl/units/deis-router.service b/deisctl/units/deis-router.service index 325188159c..e67f4dd8c2 100644 --- a/deisctl/units/deis-router.service +++ b/deisctl/units/deis-router.service @@ -4,7 +4,6 @@ Description=deis-router [Service] EnvironmentFile=/etc/environment TimeoutStartSec=20m -ExecStartPre=-/usr/bin/etcdctl mkdir /registry/services/ >/dev/null 2>&1 ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/router` && docker history $IMAGE >/dev/null 2>&1 || flock -w 1200 /var/run/lock/alpine-pull docker pull $IMAGE" ExecStartPre=/bin/sh -c "docker inspect deis-router >/dev/null 2>&1 && docker rm -f deis-router || true" ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/router` && docker run --name deis-router --rm -p 80:80 -p 2222:2222 -p 443:443 -p 9090:9090 -e EXTERNAL_PORT=80 -e HOST=$COREOS_PRIVATE_IPV4 $IMAGE" diff --git a/logspout/logspout.go b/logspout/logspout.go index a44da119d0..be8462eb35 100644 --- a/logspout/logspout.go +++ b/logspout/logspout.go @@ -106,10 +106,6 @@ func getLogParts(logline *Log) (string, string, string) { if match != nil { return match[1], match[3], logline.Data } - match = getMatch(`^k8s_([a-z0-9-]+)-[a-z]+\.[\da-f]+_[a-z0-9-]+-([a-z]+-[\da-z]*)_`, logline.Name) - if match != nil { - return match[1], match[2], logline.Data - } if logline.Name == "deis-controller" { data_match := getMatch(`^[A-Z]+ \[([a-z0-9-]+)\]: (.*)`, logline.Data) if data_match != nil { diff --git a/router/cmd/boot/boot.go b/router/cmd/boot/boot.go index a6ae42c96f..982bdfc001 100644 --- a/router/cmd/boot/boot.go +++ b/router/cmd/boot/boot.go @@ -60,7 +60,6 @@ func main() { mkdirEtcd(client, "/deis/certs") mkdirEtcd(client, "/deis/router/hosts") mkdirEtcd(client, "/deis/router/hsts") - mkdirEtcd(client, "/registry/services/specs/default") setDefaultEtcd(client, etcdPath+"/gzip", "on") diff --git a/router/rootfs/etc/confd/conf.d/nginx.conf.toml b/router/rootfs/etc/confd/conf.d/nginx.conf.toml index 5f54379ca1..8bfb5d4ffc 100644 --- a/router/rootfs/etc/confd/conf.d/nginx.conf.toml +++ b/router/rootfs/etc/confd/conf.d/nginx.conf.toml @@ -13,7 +13,6 @@ keys = [ "/deis/builder", "/deis/store/gateway", "/deis/certs", - "/registry/services/", ] check_cmd = "check {{ .src }}" reload_cmd = "/opt/nginx/sbin/nginx -s reload" diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 1be5cd780f..93a7fe0c77 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -351,19 +351,13 @@ http { }{{ end }} ## end service definitions for each application - {{ $scheduler := or (getv "/deis/controller/schedulerModule") "fleet" }} - # default server, including "classic" healthcheck server { listen 80 default_server reuseport{{ if ne $useProxyProtocol "false" }} proxy_protocol{{ end }}; location /health-check { access_log off; - {{ if eq $scheduler "k8s" }} - proxy_pass http://{{ getenv "HOST" }}:10249/healthz; - {{ else }} default_type 'text/plain'; return 200; - {{ end }} } {{ if eq (getv "/deis/router/enableNginxStatus") "true" }}location /router-nginx-status { vhost_traffic_status_display; @@ -379,158 +373,13 @@ http { listen 9090 default_server; location /health-check { access_log off; - {{ if eq $scheduler "k8s" }} - proxy_pass http://{{ getenv "HOST" }}:10249/healthz; - {{ else }} default_type 'text/plain'; return 200; - {{ end }} } location / { return 404; } } - - #start k8s apps - {{ range $k8namespace := lsdir "/registry/services/specs/" }} - {{ $k8appdir := printf "/registry/services/specs/%s/" $k8namespace}}{{ range $kapp := ls $k8appdir }} - {{ $k8appPath := printf "/registry/services/specs/%s/%s" $k8namespace $kapp}}{{ $k8Svc := json (getv $k8appPath) }} - {{ $upstreams := printf "/registry/services/specs/%s/%s" $k8namespace $kapp}} - upstream {{ if $k8Svc.metadata.labels.name }}{{ $k8Svc.metadata.labels.name }}{{ else }}{{ $k8Svc.metadata.name }}{{ end }} { - {{ if exists "/deis/router/affinityArg" }} - hash $arg_{{ getv "/deis/router/affinityArg" }} consistent; - {{ end }} - server {{ $k8Svc.spec.clusterIP }}:80; - } - {{ $appContainers := gets $upstreams }}{{ $appContainerLen := len $appContainers }} - {{ $k8sappname := or $k8Svc.metadata.labels.name $k8Svc.metadata.name }} - ## server entries for custom domains - {{ range $app_domain := $domains }}{{ if eq $k8sappname (getv (printf "/deis/domains/%s" $app_domain)) }} - server { - server_name {{ $app_domain }}; - {{/* if a SSL certificate is installed for this domain, use SSL */}} - {{/* NOTE (bacongobbler): domains are separate from the default platform domain, */}} - {{/* so we can't rely on deis.conf as each domain is an island */}} - {{ if exists (printf "/deis/certs/%s/cert" $app_domain) }} - server_name_in_redirect off; - port_in_redirect off; - listen 80{{ if ne $useProxyProtocol "false" }} proxy_protocol{{ end }}; - listen 443 ssl http2{{ if ne $useProxyProtocol "false" }} proxy_protocol{{ end }}; - ssl_certificate /etc/ssl/deis/certs/{{ $app_domain }}.cert; - ssl_certificate_key /etc/ssl/deis/keys/{{ $app_domain }}.key; - include ssl.conf; - {{/* if there's no app SSL cert but we have a router SSL cert, enable that instead */}} - {{/* TODO (bacongobbler): wait for https://github.com/kelseyhightower/confd/issues/270 */}} - {{/* so we can apply this config to just subdomains of the platform domain. */}} - {{/* ref: https://github.com/deis/deis/pull/3519 */}} - {{ else }} - include deis.conf; - {{ end }} - {{ if ne $appContainerLen 0 }} - location / { - {{ if eq $useFirewall "true" }}include /opt/nginx/firewall/active-mode.rules;{{ end }} - proxy_buffering off; - proxy_set_header Host $host; - set $access_ssl 'off'; - set $access_port '80'; - if ($access_scheme ~ https) { - set $access_ssl 'on'; - set $access_port '443'; - } - proxy_set_header X-Forwarded-Port $access_port; - proxy_set_header X-Forwarded-Proto $access_scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_set_header X-Forwarded-Ssl $access_ssl; - proxy_redirect off; - proxy_connect_timeout 30s; - proxy_send_timeout {{ $defaultTimeout }}s; - proxy_read_timeout {{ $defaultTimeout }}s; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - proxy_next_upstream error timeout http_502 http_503 http_504; - - {{ if eq $enforceHTTPS "true" }} - if ($access_scheme != "https") { - return 301 https://$host$request_uri; - } - {{ end }} - - {{ if eq $enableHSTS "true" }} - add_header Strict-Transport-Security $sts always; - {{ end }} - - ## workaround for nginx hashing empty string bug http://trac.nginx.org/nginx/ticket/765 - {{ if exists "/deis/router/affinityArg" }} - set_random $prng 0 99; - set_if_empty $arg_{{ getv "/deis/router/affinityArg" }} $prng; - {{ end }} - - proxy_pass http://{{ if $k8Svc.metadata.labels.name }}{{ $k8Svc.metadata.labels.name }}{{ else }}{{ $k8Svc.metadata.name }}{{ end }}; - } - {{ else }} - location / { - return 503; - } - {{ end }} - {{ if eq $useFirewall "true" }}location /RequestDenied { - return {{ $firewallErrorCode }}; - } - {{ end }} - }{{ end }}{{ end }} - ## end entries for custom domains - - server { - server_name ~^{{ if $k8Svc.metadata.labels.name }}{{ $k8Svc.metadata.labels.name }}{{ else }}{{ $k8Svc.metadata.name }}{{ end }}\.(?.+)$; - include deis.conf; - {{ if ne $appContainerLen 0 }} - location / { - {{ if eq $useFirewall "true" }}include /opt/nginx/firewall/active-mode.rules;{{ end }} - proxy_buffering off; - proxy_set_header Host $host; - set $access_ssl 'off'; - set $access_port '80'; - if ($access_scheme ~ https) { - set $access_ssl 'on'; - set $access_port '443'; - } - proxy_set_header X-Forwarded-Port $access_port; - proxy_set_header X-Forwarded-Proto $access_scheme; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_set_header X-Forwarded-Ssl $access_ssl; - proxy_redirect off; - proxy_connect_timeout 30s; - proxy_send_timeout {{ $defaultTimeout }}s; - proxy_read_timeout {{ $defaultTimeout }}s; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - - proxy_next_upstream error timeout http_502 http_503 http_504; - - {{ if eq $enforceHTTPS "true" }} - if ($access_scheme != "https") { - return 301 https://$host$request_uri; - } - {{ end }} - - {{ if eq $enableHSTS "true" }} - add_header Strict-Transport-Security $sts always; - {{ end }} - - proxy_pass http://{{ if $k8Svc.metadata.labels.name }}{{ $k8Svc.metadata.labels.name }}{{ else }}{{ $k8Svc.metadata.name }}{{ end }}; - } - {{ else }} - location / { - return 503; - } - {{ end }} - {{ if eq $useFirewall "true" }}location /RequestDenied { - return {{ $firewallErrorCode }}; - } - {{ end }} - }{{end}}{{end}} } ## start builder From dfdeb44f0d78264d158b9424b439a596c1869d3b Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 29 Jan 2016 10:08:08 -0800 Subject: [PATCH 027/178] fix(builder): remove empty newline --- builder/rootfs/etc/confd/templates/builder | 1 - 1 file changed, 1 deletion(-) diff --git a/builder/rootfs/etc/confd/templates/builder b/builder/rootfs/etc/confd/templates/builder index b1c88dad5b..bf0ab9839a 100755 --- a/builder/rootfs/etc/confd/templates/builder +++ b/builder/rootfs/etc/confd/templates/builder @@ -131,7 +131,6 @@ puts-step "Building Docker image" docker build -t $TMP_IMAGE . 2>&1 puts-step "Pushing image to private registry" docker push $TMP_IMAGE &>/dev/null -echo # use Procfile if provided, otherwise try default process types from ./release if [ -f Procfile ]; then From 7909cb0e1a70cad4ca9c49d19c9b6d1e9c18b72b Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Mon, 1 Feb 2016 13:55:32 -0800 Subject: [PATCH 028/178] feat(client): document deis version This feature flips docopt-go's version parsing logic switch off in favour of our own in-house version parsing lib. This has the following side-benefits, all of which are valid commands: - `deis -v` - `deis version` - `deis help version` --- client/deis.go | 18 +++++++++++++----- client/parser/version.go | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 client/parser/version.go diff --git a/client/deis.go b/client/deis.go index ab9363d772..05a46c6151 100644 --- a/client/deis.go +++ b/client/deis.go @@ -8,7 +8,6 @@ import ( "syscall" "github.com/deis/deis/client/parser" - "github.com/deis/deis/version" docopt "github.com/docopt/docopt-go" ) @@ -25,6 +24,11 @@ The Deis command-line client issues API calls to a Deis controller. Usage: deis [...] +Option flags:: + + -h --help display help information + -v --version display client version + Auth commands:: register register a new user with a controller @@ -47,6 +51,7 @@ Subcommands, use 'deis help [subcommand]' to learn more:: perms manage permissions for applications git manage git for applications users manage users + version display client version Shortcut commands, use 'deis shortcuts' to see all:: @@ -64,7 +69,7 @@ Use 'git push deis master' to deploy to an application. // Reorganize some command line flags and commands. command, argv := parseArgs(argv) // Give docopt an optional final false arg so it doesn't call os.Exit(). - _, err := docopt.Parse(usage, []string{command}, false, version.Version, true, false) + _, err := docopt.Parse(usage, []string{command}, false, "", true, false) if err != nil { fmt.Fprintln(os.Stderr, err) @@ -107,11 +112,11 @@ Use 'git push deis master' to deploy to an application. err = parser.Git(argv) case "users": err = parser.Users(argv) + case "version": + err = parser.Version(argv) case "help": fmt.Print(usage) return 0 - case "--version": - return 0 default: env := os.Environ() extCmd := "deis-" + command @@ -149,9 +154,12 @@ Use 'git push deis master' to deploy to an application. // expands shortcuts and formats commands to be properly routed. func parseArgs(argv []string) (string, []string) { if len(argv) == 1 { - // rearrange "deis --help" as "deis help" if argv[0] == "--help" || argv[0] == "-h" { + // rearrange "deis --help" as "deis help" argv[0] = "help" + } else if argv[0] == "--version" || argv[0] == "-v" { + // rearrange "deis --version" as "deis version" + argv[0] = "version" } } diff --git a/client/parser/version.go b/client/parser/version.go new file mode 100644 index 0000000000..023267791f --- /dev/null +++ b/client/parser/version.go @@ -0,0 +1,25 @@ +package parser + +import ( + "fmt" + + "github.com/deis/deis/version" + docopt "github.com/docopt/docopt-go" +) + +// Version displays the client version +func Version(argv []string) error { + usage := ` +Displays the client version. + +Usage: deis version + +Use 'deis help [command]' to learn more. +` + if _, err := docopt.Parse(usage, argv, true, "", false, true); err != nil { + return err + } + + fmt.Println(version.Version) + return nil +} From bcf7a047907fff7f33973f35aaa476225cc5b1e4 Mon Sep 17 00:00:00 2001 From: Maciej Malecki Date: Wed, 3 Feb 2016 11:48:13 +0100 Subject: [PATCH 029/178] fix(controller): do not require slash at the end of the `GET /v1/users` Documentation includes sample code for listing all users using API. It shows `GET /v1/users` endpoint which did not work. API required a slash character at the end of URL. Make the slash optional so both, `GET /v1/users` and `GET /v1/users/` versions will work. --- controller/api/tests/test_users.py | 4 ++-- controller/api/urls.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/controller/api/tests/test_users.py b/controller/api/tests/test_users.py index 55c3963689..0ea59568e4 100644 --- a/controller/api/tests/test_users.py +++ b/controller/api/tests/test_users.py @@ -12,7 +12,7 @@ class TestUsers(TestCase): fixtures = ['tests.json'] def test_super_user_can_list(self): - url = '/v1/users/' + url = '/v1/users' user = User.objects.get(username='autotest') token = Token.objects.get(user=user) @@ -24,7 +24,7 @@ def test_super_user_can_list(self): self.assertEqual(len(response.data['results']), 3) def test_non_super_user_cannot_list(self): - url = '/v1/users/' + url = '/v1/users' user = User.objects.get(username='autotest2') token = Token.objects.get(user=user) diff --git a/controller/api/urls.py b/controller/api/urls.py index 99eada5fb9..6b3ab21429 100644 --- a/controller/api/urls.py +++ b/controller/api/urls.py @@ -99,5 +99,5 @@ url(r'^certs/?', views.CertificateViewSet.as_view({'get': 'list', 'post': 'create'})), # list users - url(r'^users/', views.UserView.as_view({'get': 'list'})), + url(r'^users/?', views.UserView.as_view({'get': 'list'})), ) From f1648bf92b59f2c0ba3db8009f9665ccb35185cd Mon Sep 17 00:00:00 2001 From: Chris Armstrong Date: Mon, 8 Feb 2016 11:18:26 -0800 Subject: [PATCH 030/178] chore(*): bump CoreOS to 835.12.0 Fixes a high severity OpenSSL vulnerability: https://coreos.com/releases/#835.12.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 4 ++-- contrib/utils.sh | 2 +- docs/installing_deis/baremetal.rst | 2 +- docs/installing_deis/gce.rst | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index b65390c290..85f5543117 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "835.11.0" + "value": "835.12.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 669f9957e5..1fe4adef5d 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -13,7 +13,7 @@ import paramiko from linodeapi import LinodeApiCommand -import linodeutils +import linodeutils class ProvisionCommand(LinodeApiCommand): _created_linodes = [] @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='835.11.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='835.12.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index 55e134ef6a..b8e78333d4 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-835.11.0} +export COREOS_VERSION=${COREOS_VERSION:-835.12.0} export DEIS_RELEASE=1.13.0-dev diff --git a/docs/installing_deis/baremetal.rst b/docs/installing_deis/baremetal.rst index 2a90bcd817..4fb958e96b 100644 --- a/docs/installing_deis/baremetal.rst +++ b/docs/installing_deis/baremetal.rst @@ -94,7 +94,7 @@ Start the installation .. code-block:: console - coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.11.0 + coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.12.0 This will install the latest `CoreOS`_ stable release that has been known to work diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 1fa35e02da..0f2607ac39 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-835-11-0-v20160122 \ + --image coreos-stable-835-12-0-v20160202 \ --image-project coreos-cloud; done From 20b17ec261c7c981d79a98a3e5b12f1a42b568b8 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 09:58:22 -0700 Subject: [PATCH 031/178] chore(buildpacks): update heroku-buildpack-ruby to v144 See https://github.com/heroku/heroku-buildpack-ruby/compare/v140...v144 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 73715c3e5e..dbe40b5ebc 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -29,7 +29,7 @@ download_buildpack() { mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git 26fa21a -download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v140 +download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v86 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v40 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v12 From e10da3569fdedc0815ae7fa1f7baf4dd197f8482 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 09:59:02 -0700 Subject: [PATCH 032/178] chore(buildpacks): update heroku-buildpack-nodejs to v87 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v86...v87 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index dbe40b5ebc..b04a0b5e1e 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -30,7 +30,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git 26fa21a download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 -download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v86 +download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v87 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v40 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v12 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 From ad725e216fbc9e4b9322a30238172fbfcdcc0a17 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:00:08 -0700 Subject: [PATCH 033/178] chore(buildpacks): update heroku-buildpack-java to v43 See https://github.com/heroku/heroku-buildpack-java/compare/v40...v43 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index b04a0b5e1e..140029170d 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -31,7 +31,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git 26fa21a download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v87 -download_buildpack https://github.com/heroku/heroku-buildpack-java.git v40 +download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v12 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v24 From 5571406fd8ebd0d76714c3aece0def4bae33714d Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:01:09 -0700 Subject: [PATCH 034/178] chore(buildpacks): update heroku-buildpack-gradle to v17 See https://github.com/heroku/heroku-buildpack-gradle/compare/v12...v17 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 140029170d..9bdc78cb83 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -32,7 +32,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-multi.git download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v87 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 -download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v12 +download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v24 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v70 From 552de0a15f98be476dc6eecca1a5cfdb555c3a42 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:02:51 -0700 Subject: [PATCH 035/178] chore(buildpacks): update heroku-buildpack-play to v26 See https://github.com/heroku/heroku-buildpack-play/compare/v24...v26 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 9bdc78cb83..fad8be22f2 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -34,7 +34,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 -download_buildpack https://github.com/heroku/heroku-buildpack-play.git v24 +download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v70 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v82 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v70 From 3a9e0b1dffe4cdd7bc28bcaee528e6d826c9859c Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:03:49 -0700 Subject: [PATCH 036/178] chore(buildpacks): update heroku-buildpack-python to v77 See https://github.com/heroku/heroku-buildpack-python/compare/v70...v77 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index fad8be22f2..5d47f2f27c 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -35,7 +35,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-java.git download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 -download_buildpack https://github.com/heroku/heroku-buildpack-python.git v70 +download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v82 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v70 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v63 From 15e352af32b795cc2e1e46f37d772e67f938bb33 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:04:55 -0700 Subject: [PATCH 037/178] chore(buildpacks): update heroku-buildpack-php to v92 See https://github.com/heroku/heroku-buildpack-php/compare/v82...v92 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 5d47f2f27c..991e7fa258 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v82 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v70 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v63 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v18 From 4485f3f9cb4509f02d58f619836395229531cd81 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:05:48 -0700 Subject: [PATCH 038/178] chore(buildpacks): update heroku-buildpack-clojure to v75 See https://github.com/heroku/heroku-buildpack-clojure/compare/v70...v75 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 991e7fa258..5e1a9c57f7 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -37,6 +37,6 @@ download_buildpack https://github.com/heroku/heroku-buildpack-grails.git download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 -download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v70 +download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v63 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v18 From 098299d158c3b193da2623e9c1859c0dd36b4a3d Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:06:47 -0700 Subject: [PATCH 039/178] chore(buildpacks): update heroku-buildpack-scala to v65 See https://github.com/heroku/heroku-buildpack-scala/compare/v63...v65 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 5e1a9c57f7..27129a0d24 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -38,5 +38,5 @@ download_buildpack https://github.com/heroku/heroku-buildpack-play.git download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 -download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v63 +download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v65 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v18 From 4c8ade199cd5a0e3cce0717aa9e42c03cee40a28 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 10:09:08 -0700 Subject: [PATCH 040/178] chore(buildpacks): update heroku-buildpack-go to v30 See https://github.com/heroku/heroku-buildpack-go/compare/v15...v30 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 27129a0d24..2653c1d952 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v65 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v18 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v30 From cd362f4d981e7fc115b66d61f06ad42e7a1b236a Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 Feb 2016 15:41:48 -0700 Subject: [PATCH 041/178] chore(release): update version in master to v1.12.3 --- README.md | 2 +- contrib/coreos/user-data.example | 4 +- docs/_includes/_get-the-source.rst | 2 +- docs/installing_deis/install-deisctl.rst | 10 +-- docs/installing_deis/install-platform.rst | 2 +- docs/managing_deis/upgrading-deis.rst | 14 ++-- docs/reference/api-v1.7.rst | 84 +++++++++++------------ docs/troubleshooting_deis/index.rst | 2 +- 8 files changed, 60 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 0233a283d2..37e59ecdd6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. [![Build Status](https://ci.deis.io/buildStatus/icon?job=test-acceptance)](https://ci.deis.io/job/test-acceptance/) -[![Current Release](http://img.shields.io/badge/release-v1.12.2-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.12.2) +[![Current Release](http://img.shields.io/badge/release-v1.12.3-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.12.3) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) ![Deis Graphic](https://s3-us-west-2.amazonaws.com/deis-images/deis-graphic.png) diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index f47f66b4d7..0b809dea24 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -103,7 +103,7 @@ coreos: [Service] Type=oneshot - ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.12.2' + ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.12.3' - name: increase-nf_conntrack-connections.service command: start content: | @@ -117,7 +117,7 @@ coreos: write_files: - path: /etc/deis-release content: | - DEIS_RELEASE=v1.12.2 + DEIS_RELEASE=v1.12.3 - path: /etc/motd content: " \e[31m* * \e[34m* \e[32m***** \e[39mddddd eeeeeee iiiiiii ssss\n\e[31m* * \e[34m* * \e[32m* * \e[39md d e e i s s\n \e[31m* * \e[34m***** \e[32m***** \e[39md d e i s\n\e[32m***** \e[31m* * \e[34m* \e[39md d e i s\n\e[32m* * \e[31m* * \e[34m* * \e[39md d eee i sss\n\e[32m***** \e[31m* * \e[34m***** \e[39md d e i s\n \e[34m* \e[32m***** \e[31m* * \e[39md d e i s\n \e[34m* * \e[32m* * \e[31m* * \e[39md d e e i s s\n\e[34m***** \e[32m***** \e[31m* * \e[39mddddd eeeeeee iiiiiii ssss\n\n\e[39mWelcome to Deis\t\t\tPowered by Core\e[38;5;45mO\e[38;5;206mS\e[39m\n" - path: /etc/profile.d/nse-function.sh diff --git a/docs/_includes/_get-the-source.rst b/docs/_includes/_get-the-source.rst index 94bac92d8b..40b72e4c18 100644 --- a/docs/_includes/_get-the-source.rst +++ b/docs/_includes/_get-the-source.rst @@ -6,7 +6,7 @@ this documentation. Download an archive file from the `releases page`_, or use $ git clone https://github.com/deis/deis.git $ cd deis - $ git checkout v1.12.2 + $ git checkout v1.12.3 Check out the latest Deis release, rather than using the default (master). diff --git a/docs/installing_deis/install-deisctl.rst b/docs/installing_deis/install-deisctl.rst index 6cd46dfa18..735f3b5484 100644 --- a/docs/installing_deis/install-deisctl.rst +++ b/docs/installing_deis/install-deisctl.rst @@ -18,11 +18,11 @@ and run the latest installer: .. code-block:: console $ cd ~/bin - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.2 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.3 $ # on CoreOS, add "sudo" to install to /opt/bin/deisctl - $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.12.2 + $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.12.3 -This installs ``deisctl`` version 1.12.2 to the current directory, and downloads the matching +This installs ``deisctl`` version 1.12.3 to the current directory, and downloads the matching Deis systemd unit files used to schedule the components. Link ``deisctl`` into /usr/local/bin, so it will be in your ``$PATH``: @@ -33,10 +33,10 @@ it will be in your ``$PATH``: To change installation options, save the installer directly: .. image:: download-linux-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.12.2-linux-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.12.3-linux-amd64.run .. image:: download-osx-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.12.2-darwin-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.12.3-darwin-amd64.run Then run the downloaded file as a shell script. Append ``--help`` to see what options are available. diff --git a/docs/installing_deis/install-platform.rst b/docs/installing_deis/install-platform.rst index f445b8ee25..a00790aa08 100644 --- a/docs/installing_deis/install-platform.rst +++ b/docs/installing_deis/install-platform.rst @@ -14,7 +14,7 @@ First check that you have ``deisctl`` installed and the version is correct. .. code-block:: console $ deisctl --version - 1.12.2 + 1.12.3 If not, follow instructions to :ref:`install_deisctl`. diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index 407a68cc2c..62dcccb1b9 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -41,10 +41,10 @@ Finally, update ``deisctl`` to the new version and reinstall: .. code-block:: console - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.2 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.3 $ deisctl --version # should match the desired platform - 1.12.2 - $ deisctl config platform set version=v1.12.2 + 1.12.3 + $ deisctl config platform set version=v1.12.3 $ deisctl install platform $ deisctl start platform @@ -99,11 +99,11 @@ to. Care should be taken not to overwrite the existing ``deisctl`` version. .. code-block:: console $ mkdir /tmp/upgrade - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.2 /tmp/upgrade + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.3 /tmp/upgrade $ /tmp/upgrade/deisctl --version # should match the desired platform - 1.12.2 + 1.12.3 $ /tmp/upgrade/deisctl refresh-units - $ /tmp/upgrade/deisctl config platform set version=v1.12.2 + $ /tmp/upgrade/deisctl config platform set version=v1.12.3 Now it is possible to prepare the cluster for the upgrade using the old ``deisctl`` binary. This command will shutdown and uninstall all components of the cluster except the router and publisher. This means your services should still be @@ -128,7 +128,7 @@ If the process were to fail, the old version can be restored manually by reinsta $ /tmp/upgrade/deisctl stop platform $ /tmp/upgrade/deisctl uninstall platform - $ /tmp/upgrade/deisctl config platform set version=v1.12.2 + $ /tmp/upgrade/deisctl config platform set version=v1.12.3 $ /opt/bin/deisctl refresh-units $ /opt/bin/deisctl install platform $ /opt/bin/deisctl start platform diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index e52916be2d..85cb24fe1b 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -51,7 +51,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -89,7 +89,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json {"token": "abc123"} @@ -112,7 +112,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Regenerate Token ```````````````` @@ -144,7 +144,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json {"token": "abc123"} @@ -182,7 +182,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Applications @@ -206,7 +206,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -252,7 +252,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -283,7 +283,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 List Application Details @@ -303,7 +303,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -367,7 +367,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: text/plain "16:51:14 deis[api]: test created initial release\n" @@ -391,7 +391,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json [0, "hi\n"] @@ -418,7 +418,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -451,7 +451,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -496,7 +496,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -526,7 +526,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Containers @@ -550,7 +550,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -590,7 +590,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -630,7 +630,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json [ @@ -665,7 +665,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json [ @@ -700,7 +700,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json [ @@ -738,7 +738,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Configuration @@ -762,7 +762,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -800,7 +800,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json X-Deis-Release: 3 @@ -843,7 +843,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json X-Deis-Release: 4 @@ -885,7 +885,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -923,7 +923,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -953,7 +953,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Builds @@ -977,7 +977,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1032,7 +1032,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json X-Deis-Release: 4 @@ -1070,7 +1070,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1132,7 +1132,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1168,7 +1168,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json {"version": 5} @@ -1195,7 +1195,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1237,7 +1237,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1267,7 +1267,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Permissions @@ -1295,7 +1295,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1325,7 +1325,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Remove Application Permission @@ -1345,7 +1345,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 List Administrators ``````````````````` @@ -1364,7 +1364,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { @@ -1407,7 +1407,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Remove User's Administrative Privileges ``````````````````````````````````````` @@ -1430,7 +1430,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Users ----- @@ -1456,7 +1456,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.2 + DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: application/json { diff --git a/docs/troubleshooting_deis/index.rst b/docs/troubleshooting_deis/index.rst index 22de7a69f4..1f7323cbd5 100644 --- a/docs/troubleshooting_deis/index.rst +++ b/docs/troubleshooting_deis/index.rst @@ -107,7 +107,7 @@ If you built ``deisctl`` locally or didn't use its installer, you may see an err This is because ``deisctl`` could not find unit files for Deis locally. Run ``deisctl help refresh-units`` to see where ``deisctl`` searches, and then run a command such as -``deisctl refresh-units --tag=v1.12.2``, or set the ``$DEISCTL_UNITS`` environment variable to a directory +``deisctl refresh-units --tag=v1.12.3``, or set the ``$DEISCTL_UNITS`` environment variable to a directory containing the unit files. Other issues From fb8080d1a8a7f9afbf282cbe24bcc28986aabc4d Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sun, 14 Feb 2016 15:06:52 +0800 Subject: [PATCH 042/178] docs(Add/Remove hosts): fix wrong filepath to user-data.example --- docs/managing_deis/add_remove_host.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/managing_deis/add_remove_host.rst b/docs/managing_deis/add_remove_host.rst index 914fc04e36..a690eb678a 100644 --- a/docs/managing_deis/add_remove_host.rst +++ b/docs/managing_deis/add_remove_host.rst @@ -288,7 +288,7 @@ This can be achieved by making a request to the etcd API. See `remove machines`_ Automatic Host Removal ====================== -The ``contrib/user-data.example`` provides 2 units, ``graceful-etcd-shutdown.service`` and +The ``contrib/coreos/user-data.example`` provides 2 units, ``graceful-etcd-shutdown.service`` and ``graceful-ceph-shutdown.service``, that contain some experimental logic to clean-up a Deis node's cluster membership before reboot, shutdown or halt events. The units can be used independently or together. From fd4376b9bef2811b68764f25256f73e7f47cbeca Mon Sep 17 00:00:00 2001 From: dhilipsiva Date: Wed, 17 Feb 2016 10:18:42 +0530 Subject: [PATCH 043/178] docs(installing_deis): fix GCE command invocations --- docs/installing_deis/gce.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 0f2607ac39..b41de4384b 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -191,7 +191,7 @@ Now edit the zone to add the Deis endpoint and wildcard DNS: .. code-block:: console - $ gcloud dns record-sets --zone deisdemoio transaction start + $ gcloud dns record-sets transaction start --zone deisdemoio This exports a `transaction.yaml` file. @@ -232,7 +232,7 @@ You will want to add two records as YAML objects. Here is an example edit for th ttl: 21600 type: A - kind: dns#resourceRecordSet - name: *.dev.deisdemo.io. + name: "*.dev.deisdemo.io." rrdatas: - 23.251.153.6 ttl: 21600 @@ -249,7 +249,7 @@ And finally execute the transaction. .. code-block:: console - $ gcloud dns record-sets --zone deisdemoio transaction execute + $ gcloud dns record-sets transaction execute --zone deisdemoio Install Deis Platform From 645ae7f66c02e31e9cf142a4e3cc6adcb50dd579 Mon Sep 17 00:00:00 2001 From: helgi Date: Wed, 17 Feb 2016 18:13:01 -0800 Subject: [PATCH 044/178] fix(client): only delete local ~/.deis/client.json if cancelling logged in user --- client/cmd/auth.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cmd/auth.go b/client/cmd/auth.go index 293b437594..216218f6f1 100644 --- a/client/cmd/auth.go +++ b/client/cmd/auth.go @@ -247,7 +247,7 @@ func Cancel(username string, password string, yes bool) error { } // If user targets themselves, logout. - if username != "" || c.Username == username { + if username == "" || c.Username == username { if err := client.Delete(); err != nil { return err } From 951857675dda643154377bf64906f81b141ce99b Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 18 Feb 2016 15:09:21 -0700 Subject: [PATCH 045/178] chore(requirements): update docker-py to 1.7.0 See https://github.com/docker/docker-py/blob/master/docs/change_log.md#170 --- controller/requirements.txt | 2 +- docs/docs_requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/controller/requirements.txt b/controller/requirements.txt index 38bfab2030..93d9a1b0bf 100644 --- a/controller/requirements.txt +++ b/controller/requirements.txt @@ -8,7 +8,7 @@ django-guardian==1.2.5 django-json-field==0.5.7 django-auth-ldap==1.2.5 djangorestframework==3.0.5 -docker-py==1.6.0 +docker-py==1.7.0 gunicorn==19.3.0 marathon==0.6.15 paramiko==1.15.2 diff --git a/docs/docs_requirements.txt b/docs/docs_requirements.txt index 05243785c9..a2ccf7b91c 100644 --- a/docs/docs_requirements.txt +++ b/docs/docs_requirements.txt @@ -11,7 +11,7 @@ django-fsm==2.2.0 django-guardian==1.2.5 django-json-field==0.5.7 djangorestframework==3.0.5 -docker-py==1.6.0 +docker-py==1.7.0 gunicorn==19.3.0 paramiko==1.15.2 python-etcd==0.3.2 From 93e04a85d9ae050118ffbb119398c8d6ea894b6e Mon Sep 17 00:00:00 2001 From: Bruce Chen <662005@qq.com> Date: Sat, 20 Feb 2016 10:54:55 +0800 Subject: [PATCH 046/178] Add deis-phppgadmin to README.md feat(contrib): Add deis-phppgadmin (Custom Deis Components) Add deis-phppgadmin (optional components) [deis-phppgadmin](https://github.com/HeheCloud/deis-phppgadmin) by [hehecloud](https://github.com/HeheCloud) - An addon for deis-database (phpPgAdmin) --- contrib/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/README.md b/contrib/README.md index 6e12671463..f964dde2fe 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -31,6 +31,8 @@ Please add to this list by opening a pull request! * [deis-netstat](https://github.com/lorieri/deis-netstat) by [@lorieri](https://github.com/lorieri) - A cluster-wide netstat tool for Deis * [deis-proxy](https://github.com/lorieri/deis-proxy) by [@lorieri](https://github.com/lorieri) - A transparent proxy for Deis * [deis-store-dashboard](https://github.com/aledbf/deis/tree/optional_store_dashboard) by [@aledbf](https://github.com/aledbf) - An implementation of [ceph-dash](https://github.com/Crapworks/ceph-dash) to view `deis-store` health +* [deis-phppgadmin](https://github.com/HeheCloud/deis-phppgadmin) by [hehecloud](https://github.com/HeheCloud) - An addon for deis-database (phpPgAdmin) + ### CoreOS Unit Files * [CoreOS unit files](https://github.com/ianblenke/coreos-vagrant-kitchen-sink/tree/master/cloud-init) by [@ianblenke](https://github.com/ianblenke) - Unit files to launch various services on CoreOS hosts From f014efa1690b7ea9a04859dfba973bd5155e2719 Mon Sep 17 00:00:00 2001 From: Chris Armstrong Date: Fri, 19 Feb 2016 22:41:31 -0800 Subject: [PATCH 047/178] chore(*): bump CoreOS to 835.13.0 Patches the glibc CVEs: https://coreos.com/releases/#835.13.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/baremetal.rst | 2 +- docs/installing_deis/gce.rst | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 85f5543117..8f9f6e337a 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "835.12.0" + "value": "835.13.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 1fe4adef5d..0a8d6c432e 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='835.12.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='835.13.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index b8e78333d4..0ffb76a255 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-835.12.0} +export COREOS_VERSION=${COREOS_VERSION:-835.13.0} export DEIS_RELEASE=1.13.0-dev diff --git a/docs/installing_deis/baremetal.rst b/docs/installing_deis/baremetal.rst index 4fb958e96b..cacae6d9bf 100644 --- a/docs/installing_deis/baremetal.rst +++ b/docs/installing_deis/baremetal.rst @@ -94,7 +94,7 @@ Start the installation .. code-block:: console - coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.12.0 + coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.13.0 This will install the latest `CoreOS`_ stable release that has been known to work diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 0f2607ac39..fd0013917e 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-835-12-0-v20160202 \ + --image coreos-stable-835-13-0-v20160218 \ --image-project coreos-cloud; done From 78967e2d5d9368150db49a2451d40ff77b6e9f40 Mon Sep 17 00:00:00 2001 From: Bruce Chen <662005@qq.com> Date: Sat, 20 Feb 2016 18:20:09 +0800 Subject: [PATCH 048/178] docs(contrib): Add deis-phppgadmin (An addon for deis-databas) to contrib/README.md (custom components) docs(contrib): Add deis-phppgadmin (An addon for deis-databas) to contrib/README.md (custom components) Add deis-phppgadmin to contrib/README.md (custom components) deis-phppgadmin by hehecloud - An addon for deis-database (phpPgAdmin) --- contrib/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/README.md b/contrib/README.md index f964dde2fe..5665ebca93 100644 --- a/contrib/README.md +++ b/contrib/README.md @@ -31,7 +31,7 @@ Please add to this list by opening a pull request! * [deis-netstat](https://github.com/lorieri/deis-netstat) by [@lorieri](https://github.com/lorieri) - A cluster-wide netstat tool for Deis * [deis-proxy](https://github.com/lorieri/deis-proxy) by [@lorieri](https://github.com/lorieri) - A transparent proxy for Deis * [deis-store-dashboard](https://github.com/aledbf/deis/tree/optional_store_dashboard) by [@aledbf](https://github.com/aledbf) - An implementation of [ceph-dash](https://github.com/Crapworks/ceph-dash) to view `deis-store` health -* [deis-phppgadmin](https://github.com/HeheCloud/deis-phppgadmin) by [hehecloud](https://github.com/HeheCloud) - An addon for deis-database (phpPgAdmin) +* [deis-phppgadmin](https://github.com/HeheCloud/deis-phppgadmin) by [hehecloud](https://github.com/HeheCloud) - An addon (database dashboard) for deis-database (phpPgAdmin) ### CoreOS Unit Files From 47f32f5f76eff420f07b1a4bcf0875792297908e Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 24 Feb 2016 22:22:39 -0800 Subject: [PATCH 049/178] docs(reference): remove sidenote about pushing only to master You can now push to any branch, which will trigger a build. --- docs/reference/terms/build.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/reference/terms/build.rst b/docs/reference/terms/build.rst index db10e205a6..6328b44ea1 100644 --- a/docs/reference/terms/build.rst +++ b/docs/reference/terms/build.rst @@ -9,6 +9,3 @@ Deis builds are created automatically on the controller when a developer uses ``git push deis master``. When a new build is created, a new :ref:`release` is created automatically. - -.. note:: - Deis only supports ``git push`` to the **master** branch. From f3b5d00d86a654f9483713a3d2b168c51d5f92b4 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 24 Feb 2016 23:22:56 -0800 Subject: [PATCH 050/178] fix(builder): demote handshake failure log to debug It's okay for connections to probe the server without initiating a handshake, but it's still useful for developers to see when incoming connections are not connecting. --- builder/sshd/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/sshd/server.go b/builder/sshd/server.go index dc54cbfe34..68dd1b0c39 100644 --- a/builder/sshd/server.go +++ b/builder/sshd/server.go @@ -134,7 +134,7 @@ func (s *server) handleConn(conn net.Conn, conf *ssh.ServerConfig) { _, chans, reqs, err := ssh.NewServerConn(conn, conf) if err != nil { // Handshake failure. - log.Errf(s.c, "Failed handshake: %s (%v)", err, conn) + log.Debugf(s.c, "Failed handshake: %s", err) return } From a59a4b47a7052cf13acaf74868dec485e60a8bee Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 26 Feb 2016 17:03:09 -0700 Subject: [PATCH 051/178] fix(client): strip controller port when parsing git remotes --- client/pkg/git/git.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/pkg/git/git.go b/client/pkg/git/git.go index 8391b5a42d..7057c68d53 100644 --- a/client/pkg/git/git.go +++ b/client/pkg/git/git.go @@ -93,6 +93,9 @@ func findRemote(host string) (string, error) { cmd := string(out) + // Strip off any trailing :port number after the host name. + host = strings.Split(host, ":")[0] + for _, line := range strings.Split(cmd, "\n") { for _, remote := range strings.Split(line, " ") { if strings.Contains(remote, host) { From b681b2ea60d564e0305d74f92a1822c5ba457c93 Mon Sep 17 00:00:00 2001 From: Naphat Sanguansin Date: Sun, 28 Feb 2016 16:45:28 -0500 Subject: [PATCH 052/178] fix(vagrant): fix Vagrantfile to handle spaces This change allows Vagrant to work properly when the path to the location of the clone of this repo contain spaces. For example, if this repo were cloned to this path: /users/userA/path with spaces/code/deis `vagrant up` would fail. This change fixes that. --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index de4f18f970..9162d796d5 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -17,7 +17,7 @@ CONTRIB_UTILS_PATH = File.join(File.dirname(__FILE__), "contrib", "utils.sh") # Make variables from contrib/utils.sh accessible if File.exists?(CONTRIB_UTILS_PATH) cu_vars = Hash.new do |hash, key| - stdin, stdout, stderr = Open3.popen3("/usr/bin/env", "bash", "-c", "source #{CONTRIB_UTILS_PATH} && echo $#{key}") + stdin, stdout, stderr = Open3.popen3("/usr/bin/env", "bash", "-c", "source '#{CONTRIB_UTILS_PATH}' && echo $#{key}") value = stdout.gets.chomp hash[key] = value unless value.empty? end From 28f425ede689176ae136a714cb7bde9bf939fa39 Mon Sep 17 00:00:00 2001 From: Chris Armstrong Date: Sun, 28 Feb 2016 23:49:53 -0800 Subject: [PATCH 053/178] docs(roadmap): add March release planning meeting --- docs/roadmap/planning.rst | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index c3a0255c56..b54e975d6a 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,18 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -February 2016 -~~~~~~~~~~~~~ +March 2016 (Deis v2 Beta) +~~~~~~~~~~~~~~~~~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, February 4th** at **12pm MST/1900 UTC**. The `event`_ can be added +**Thursday, March 3rd** at **12pm MST/1900 UTC**. The `event`_ can be added directly to your calendar. +February 2016 +~~~~~~~~~~~~~ + +There was no public release planning meeting for February. + January 2016 (Deis 1.x LTS release and Deis v2 Alpha) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -123,7 +128,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/iFvIv6 +.. _`event`: https://goo.gl/WLeuHX .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From 57cc65d987e690d83afdf3ff655e2d2cda54c7ef Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 29 Feb 2016 12:45:08 -0700 Subject: [PATCH 054/178] chore(buildpacks): update heroku-buildpack-go to v31 Adds Go 1.6 support. See https://github.com/heroku/heroku-buildpack-go/compare/v30...v31 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 2653c1d952..b9c9b4156b 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v65 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v30 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 From 9befd2be08978cffc0ae6789325caca4ee41047b Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 29 Feb 2016 13:36:46 -0700 Subject: [PATCH 055/178] chore(buildpacks): update heroku-buildpack-nodejs to v88 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v87...v88 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 2653c1d952..de177b62f5 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -30,7 +30,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git 26fa21a download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 -download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v87 +download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v88 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 From 0709a4ef694a878044fc4a9058c930b0933c9554 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 29 Feb 2016 13:33:12 -0700 Subject: [PATCH 056/178] chore(buildpacks): update heroku-buildpack-php to v94 See https://github.com/heroku/heroku-buildpack-php/compare/v92...v94 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index b9c9b4156b..d027246c9b 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v94 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v65 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 From e27cc4bb49a0f177bc3293743b48c350527d9ccc Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 1 Mar 2016 16:50:35 -0700 Subject: [PATCH 057/178] chore(buildpacks): update heroku-buildpack-scala to v66 Adds SBT 0.13.11 support. See https://github.com/heroku/heroku-buildpack-scala/compare/v65...v66 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index b9c9b4156b..7ce2aaeeff 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -38,5 +38,5 @@ download_buildpack https://github.com/heroku/heroku-buildpack-play.git download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v92 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 -download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v65 +download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v66 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 From 34d88f39ef469a1843507954f1b1b465dcd9db6a Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Sat, 27 Feb 2016 17:22:58 -0700 Subject: [PATCH 058/178] fix(client): simplify URL prefixing Go's net/url package would return malformed urls for `url.String()` when a port is specified. --- client/cmd/apps.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/client/cmd/apps.go b/client/cmd/apps.go index 435f102001..133a2868a2 100644 --- a/client/cmd/apps.go +++ b/client/cmd/apps.go @@ -2,7 +2,6 @@ package cmd import ( "fmt" - "net/url" "os" "strings" "time" @@ -142,15 +141,12 @@ func AppOpen(appID string) error { return err } - u, err := url.Parse(app.URL) - - if err != nil { - return err + u := app.URL + if !(strings.HasPrefix(u, "http://") || strings.HasPrefix(u, "https://")) { + u = "http://" + u } - u.Scheme = "http" - - return webbrowser.Webbrowser(u.String()) + return webbrowser.Webbrowser(u) } // AppLogs returns the logs from an app. From 4e7c7f197a377e2a4cb04ae6ebc0a6a732e07710 Mon Sep 17 00:00:00 2001 From: Chris Armstrong Date: Tue, 8 Mar 2016 11:33:00 -0800 Subject: [PATCH 059/178] docs(roadmap): add March meeting archive --- docs/roadmap/planning.rst | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index b54e975d6a..6951789b95 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,20 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -March 2016 (Deis v2 Beta) -~~~~~~~~~~~~~~~~~~~~~~~~~ +April 2016 +~~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, March 3rd** at **12pm MST/1900 UTC**. The `event`_ can be added +**Thursday, April 7th** at **12pm MST/1900 UTC**. The `event`_ can be added directly to your calendar. +March 2016 (Deis v2 Beta) +~~~~~~~~~~~~~~~~~~~~~~~~~ + +We demoed Deis v2 beta and shared the architecture of the Deis v2 CI/CD pipeline. + +Archive: https://www.youtube.com/watch?v=rIF3v1MZkJg + February 2016 ~~~~~~~~~~~~~ @@ -128,7 +135,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/WLeuHX +.. _`event`: https://goo.gl/6tfAEE .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From 3b81f1b9daea092bc102d499bb254e73f3a69c4d Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Mon, 7 Mar 2016 21:04:08 -0800 Subject: [PATCH 060/178] doc(versions): add version notice for deis docs --- controller/web/static/css/main.css | 18 ++++++++++++++++++ docs/theme/deis/layout.html | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/controller/web/static/css/main.css b/controller/web/static/css/main.css index 2cf7c52cb2..48fce68ea3 100644 --- a/controller/web/static/css/main.css +++ b/controller/web/static/css/main.css @@ -514,6 +514,24 @@ pre, code pre { color: #000!important; background-color: #f5f5f5!important; } +.doc-content .version-warning { + padding: 10px; + margin-top 10px; + border: solid 4px #ff135a; +} +.doc-content .version-warning .version-warning-title { + font-size: 18px; + font-weight: bold; + line-height: 26px; + text-indent: 50px; +} +.doc-content .important .version-warning-title { + background: url(../img/glyphs.png) no-repeat 0 -81px; +} +.doc-content .version-warning a, .doc-content .version-warning a em, .doc-content .version-warning em { + font-style: normal!imporant; + color: #ff135a!important; +} .doc-content .admonition { padding: 10px; margin-bottom: 10px; diff --git a/docs/theme/deis/layout.html b/docs/theme/deis/layout.html index 4b845f7672..9887fb3688 100644 --- a/docs/theme/deis/layout.html +++ b/docs/theme/deis/layout.html @@ -85,6 +85,11 @@
+ +
+

Version 1

+

This documentation is for Deis Workflow (v1). For v2 documentation visit https://github.com/deis/workflow.

+
{% block body %} {% endblock %} {%- if pagename != 'index' %} From 6f914319fd465372a6e58f735074daf165319915 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:46:17 -0600 Subject: [PATCH 061/178] chore(buildpacks): update heroku-buildpack-multi to v1.0.0 This is the same as the previous SHA 26fa21a, but tidier. --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index c730f74fa5..c945b951b3 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -28,7 +28,7 @@ download_buildpack() { mkdir -p $BUILDPACK_INSTALL_PATH -download_buildpack https://github.com/heroku/heroku-buildpack-multi.git 26fa21a +download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v88 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 From 643815019ce4e5e2db637b59afed43e326340bca Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:57:11 -0600 Subject: [PATCH 062/178] chore(buildpacks): update heroku-buildpack-grails to v20 See See https://github.com/heroku/heroku-buildpack-grails/compare/v19...v20 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index c730f74fa5..4eec624f5a 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -33,7 +33,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v88 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 -download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 +download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v94 From dc256bbec9070832d8e32bfcb454b76ca2bbd7e5 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:37:22 -0600 Subject: [PATCH 063/178] chore(buildpacks): update heroku-buildpack-nodejs to v89 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v88...v89 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index c730f74fa5..0cd5467c28 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -30,7 +30,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git 26fa21a download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 -download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v88 +download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v89 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 From 73e8880f5d2a395057f57efe826adb623ea7e704 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:52:10 -0600 Subject: [PATCH 064/178] chore(buildpacks): update heroku-buildpack-scala to v67 See https://github.com/heroku/heroku-buildpack-scala/compare/v66...v67 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index c730f74fa5..0fdeae9722 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -38,5 +38,5 @@ download_buildpack https://github.com/heroku/heroku-buildpack-play.git download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v94 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 -download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v66 +download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 From cb5e323f7a4c69f1067e88223e349ec2a312c038 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:42:23 -0600 Subject: [PATCH 065/178] chore(buildpacks): update heroku-buildpack-python to v78 See https://github.com/heroku/heroku-buildpack-python/compare/v77...v78 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index c730f74fa5..acf91fa184 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -35,7 +35,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-java.git download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 -download_buildpack https://github.com/heroku/heroku-buildpack-python.git v77 +download_buildpack https://github.com/heroku/heroku-buildpack-python.git v78 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v94 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v66 From 46c3dac4cbc27cf6cdf3b32bfc2e31f78f626bc9 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 22 Mar 2016 14:24:25 -0600 Subject: [PATCH 066/178] fix(auth): return a 409 if a user is cancelled that has apps --- client/cmd/auth.go | 7 ++++- client/controller/models/auth/auth_test.go | 34 +++++++++++++++++++++- controller/api/tests/test_auth.py | 13 +++++++++ controller/api/views.py | 5 ++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/client/cmd/auth.go b/client/cmd/auth.go index 293b437594..dbd1801730 100644 --- a/client/cmd/auth.go +++ b/client/cmd/auth.go @@ -5,6 +5,7 @@ import ( "fmt" "net/url" "os" + "reflect" "strings" "syscall" @@ -242,7 +243,11 @@ func Cancel(username string, password string, yes bool) error { err = auth.Delete(c, username) - if err != nil { + cleanup := fmt.Errorf("\n%s %s\n\n", "409", "Conflict") + if reflect.DeepEqual(err, cleanup) { + fmt.Printf("%s still has application associated with it. Transfer ownership or delete them first\n", username) + return nil + } else if err != nil { return err } diff --git a/client/controller/models/auth/auth_test.go b/client/controller/models/auth/auth_test.go index 40f9cd9e71..7bc2cb83de 100644 --- a/client/controller/models/auth/auth_test.go +++ b/client/controller/models/auth/auth_test.go @@ -6,6 +6,7 @@ import ( "net/http" "net/http/httptest" "net/url" + "reflect" "testing" "github.com/deis/deis/client/controller/client" @@ -18,6 +19,7 @@ const passwdExpected string = `{"username":"test","password":"old","new_password const regenAllExpected string = `{"all":true}` const regenUserExpected string = `{"username":"test"}` const cancelUserExpected string = `{"username":"foo"}` +const cancelAdminExpected string = `{"username":"admin"}` type fakeHTTPServer struct { regenBodyEmpty bool @@ -131,7 +133,12 @@ func (f *fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { res.Write(nil) } - if string(body) == cancelUserExpected && !f.cancelUsername { + if string(body) == cancelAdminExpected && !f.cancelUsername { + f.cancelUsername = true + res.WriteHeader(http.StatusConflict) + res.Write(nil) + return + } else if string(body) == cancelUserExpected && !f.cancelUsername { f.cancelUsername = true res.WriteHeader(http.StatusNoContent) res.Write(nil) @@ -251,6 +258,31 @@ func TestDelete(t *testing.T) { } } +func TestDeleteUserApp(t *testing.T) { + t.Parallel() + + handler := fakeHTTPServer{cancelUsername: false, cancelEmpty: false} + server := httptest.NewServer(&handler) + defer server.Close() + + u, err := url.Parse(server.URL) + + if err != nil { + t.Fatal(err) + } + + httpClient := client.CreateHTTPClient(false) + client := client.Client{HTTPClient: httpClient, ControllerURL: *u} + + err = Delete(&client, "admin") + // should be a 409 Conflict + + expected := fmt.Errorf("\n%s %s\n\n", "409", "Conflict") + if reflect.DeepEqual(err, expected) == false { + t.Errorf("got '%s' but expected '%s'", err, expected) + } +} + func TestRegenerate(t *testing.T) { t.Parallel() diff --git a/controller/api/tests/test_auth.py b/controller/api/tests/test_auth.py index 9f2033cdfd..0ab0a84e80 100644 --- a/controller/api/tests/test_auth.py +++ b/controller/api/tests/test_auth.py @@ -221,6 +221,19 @@ def test_cancel(self): content_type='application/json', HTTP_AUTHORIZATION='token {}'.format(self.admin_token)) self.assertEqual(response.status_code, 204) + # user can not be deleted if it has an app attached to it + response = self.client.post( + '/v1/apps', + HTTP_AUTHORIZATION='token {}'.format(self.admin_token) + ) + self.assertEqual(response.status_code, 201) + app_id = response.data['id'] # noqa + self.assertIn('id', response.data) + + response = self.client.delete(url, json.dumps({'username': str(self.admin)}), + content_type='application/json', + HTTP_AUTHORIZATION='token {}'.format(self.admin_token)) + self.assertEqual(response.status_code, 409) def test_passwd(self): """Test that a registered user can change the password.""" diff --git a/controller/api/views.py b/controller/api/views.py index 6ceb85fb17..3d8a59c002 100644 --- a/controller/api/views.py +++ b/controller/api/views.py @@ -59,6 +59,11 @@ def destroy(self, request, **kwargs): else: raise PermissionDenied() + # A user can not be removed without apps changing ownership first + if len(models.App.objects.filter(owner=target_obj)) > 0: + msg = '{} still has applications assigned. Delete or transfer ownership'.format(str(target_obj)) # noqa + return Response({'detail': msg}, status=status.HTTP_409_CONFLICT) + target_obj.delete() return Response(status=status.HTTP_204_NO_CONTENT) From 28c43d577f61797a2daa201c0dc5504f36143bdf Mon Sep 17 00:00:00 2001 From: Chris Armstrong Date: Wed, 23 Mar 2016 09:37:45 -0600 Subject: [PATCH 067/178] fix(store-volume): workaround kernel bug for CephFS mount --- deisctl/units/deis-store-volume.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deisctl/units/deis-store-volume.service b/deisctl/units/deis-store-volume.service index f4b40a3b71..e58d5b0214 100644 --- a/deisctl/units/deis-store-volume.service +++ b/deisctl/units/deis-store-volume.service @@ -5,7 +5,7 @@ Description=deis-store-volume EnvironmentFile=/etc/environment ExecStartPre=/usr/bin/mkdir -p /var/lib/deis/store ExecStartPre=/bin/sh -c "echo waiting for store-monitor... && until etcdctl get /deis/store/monSetupComplete >/dev/null 2>&1; do sleep 2; done" -ExecStartPre=/bin/bash -c "HOSTS=`etcdctl ls /deis/store/hosts | cut -d/ -f5 | awk '{if(NR == 1) {printf $0} else {printf \",\"$0}}'` && cat /proc/mounts |grep '/var/lib/deis/store' || mount -t ceph $HOSTS:/ /var/lib/deis/store -o name=admin,secret=`etcdctl get /deis/store/adminKeyring | grep 'key =' | cut -d' ' -f3`" +ExecStartPre=/bin/bash -c "HOSTS=`etcdctl ls /deis/store/hosts | cut -d/ -f5 | awk '{if(NR == 1) {printf $0} else {printf \",\"$0}}'` && cat /proc/mounts |grep '/var/lib/deis/store' || mount -t ceph $HOSTS:/ /var/lib/deis/store -o name=admin,secret=`etcdctl get /deis/store/adminKeyring | grep 'key =' | cut -d' ' -f3`,context=system_u:object_r:tmp_t:s0" ExecStart=/usr/bin/tail -f /dev/null ExecStartPost=/bin/sh -c "test -d /var/lib/deis/store/logs || mkdir -p /var/lib/deis/store/logs" ExecStopPost=-/usr/bin/umount /var/lib/deis/store From 602ee3e04b6f25524d7b3725ae6dbf78f86813f9 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 23 Mar 2016 09:26:30 -0700 Subject: [PATCH 068/178] fix(api): disable adding wildcard certificates --- controller/api/models.py | 7 ++++++- controller/api/tests/test_certificate.py | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/controller/api/models.py b/controller/api/models.py index 05984fd44c..e69fc5ddc5 100644 --- a/controller/api/models.py +++ b/controller/api/models.py @@ -116,6 +116,11 @@ def validate_certificate(value): raise ValidationError('Could not load certificate: {}'.format(e)) +def validate_common_name(value): + if '*' in value: + raise ValidationError('Wildcard certificates are not supported') + + def get_etcd_client(): if not hasattr(get_etcd_client, "client"): # wire up etcd publishing if we can connect @@ -1011,7 +1016,7 @@ class Certificate(AuditedModel): certificate = models.TextField(validators=[validate_certificate]) key = models.TextField() # X.509 certificates allow any string of information as the common name. - common_name = models.TextField(unique=True) + common_name = models.TextField(unique=True, validators=[validate_common_name]) expires = models.DateTimeField() def __str__(self): diff --git a/controller/api/tests/test_certificate.py b/controller/api/tests/test_certificate.py index c82b08cae9..2e84b8c043 100644 --- a/controller/api/tests/test_certificate.py +++ b/controller/api/tests/test_certificate.py @@ -80,6 +80,17 @@ def test_create_certificate_with_domain(self): HTTP_AUTHORIZATION='token {}'.format(self.token)) self.assertEqual(response.status_code, 201) + def test_create_wildcard_certificate(self): + """Tests creating a wildcard certificate, which should be disabled.""" + body = {'certificate': self.autotest_example_com_cert, + 'key': self.key, + 'common_name': '*.example.com'} + response = self.client.post(self.url, json.dumps(body), content_type='application/json', + HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 400) + self.assertEqual(json.loads(response.content), + {'common_name': ['Wildcard certificates are not supported']}) + def test_create_certificate_with_different_common_name(self): """ In some cases such as with SAN certificates, the certificate can cover more From 94ee7af49fb29bc243515fbf4e6e360a901d5568 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 23 Mar 2016 10:59:53 -0600 Subject: [PATCH 069/178] chore(*): bump CoreOS to 899.13.0 See https://coreos.com/releases/#899.13.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/baremetal.rst | 2 +- docs/installing_deis/gce.rst | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 8f9f6e337a..8daa881d2e 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "835.13.0" + "value": "899.13.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 0a8d6c432e..763141e15f 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='835.13.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='899.13.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index 0ffb76a255..0a87d273b3 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-835.13.0} +export COREOS_VERSION=${COREOS_VERSION:-899.13.0} export DEIS_RELEASE=1.13.0-dev diff --git a/docs/installing_deis/baremetal.rst b/docs/installing_deis/baremetal.rst index cacae6d9bf..1cc4aa33a8 100644 --- a/docs/installing_deis/baremetal.rst +++ b/docs/installing_deis/baremetal.rst @@ -94,7 +94,7 @@ Start the installation .. code-block:: console - coreos-install -C stable -c /tmp/config -d /dev/sda -V 835.13.0 + coreos-install -C stable -c /tmp/config -d /dev/sda -V 899.13.0 This will install the latest `CoreOS`_ stable release that has been known to work diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 11e8d1bbb7..708180859b 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-835-13-0-v20160218 \ + --image coreos-stable-899-13-0-v20160323 \ --image-project coreos-cloud; done @@ -249,7 +249,7 @@ And finally execute the transaction. .. code-block:: console - $ gcloud dns record-sets transaction execute --zone deisdemoio + $ gcloud dns record-sets transaction execute --zone deisdemoio Install Deis Platform From 48657c93b46410c55eaf6e11fdd0ccb08b38e95c Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 23 Mar 2016 11:27:58 -0700 Subject: [PATCH 070/178] fix(builder): log env tcp requests information to debug --- builder/sshd/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/sshd/server.go b/builder/sshd/server.go index 68dd1b0c39..de4bb54fc8 100644 --- a/builder/sshd/server.go +++ b/builder/sshd/server.go @@ -199,7 +199,7 @@ func (s *server) answer(channel ssh.Channel, requests <-chan *ssh.Request, sshCo case "env": o := &EnvVar{} ssh.Unmarshal(req.Payload, o) - fmt.Printf("Key='%s', Value='%s'\n", o.Name, o.Value) + log.Debugf(s.c, "Key='%s', Value='%s'\n", o.Name, o.Value) req.Reply(true, nil) case "exec": clean := cleanExec(req.Payload) From a22c6ab28b96a6b3b968eff600228edc13058ebb Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 23 Mar 2016 15:49:26 -0700 Subject: [PATCH 071/178] docs(managing_deis): recommend m3.medium for RDS --- docs/managing_deis/running-deis-without-ceph.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/managing_deis/running-deis-without-ceph.rst b/docs/managing_deis/running-deis-without-ceph.rst index bf993c3492..91aa4897d9 100644 --- a/docs/managing_deis/running-deis-without-ceph.rst +++ b/docs/managing_deis/running-deis-without-ceph.rst @@ -57,6 +57,9 @@ previous state. We will not be using the database component in the Ceph-less cluster, and will instead rely on an external database. +When provisioning the database, it is strongly recommended to use an `m3.medium` +instance or greater. + Registry ^^^^^^^^ From a1e3b214776eb395100b44fa03535de6b57762d8 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Thu, 24 Mar 2016 10:23:19 -0700 Subject: [PATCH 072/178] fix(builder): remove temporary build dir on success --- builder/rootfs/etc/confd/templates/builder | 1 + 1 file changed, 1 insertion(+) diff --git a/builder/rootfs/etc/confd/templates/builder b/builder/rootfs/etc/confd/templates/builder index bf0ab9839a..49d415dcc1 100755 --- a/builder/rootfs/etc/confd/templates/builder +++ b/builder/rootfs/etc/confd/templates/builder @@ -172,6 +172,7 @@ echo # cleanup cd $REPO_DIR git gc &>/dev/null +rm -rf $TMP_DIR if [ -n "$JOB" ]; then docker rm -f $JOB &>/dev/null fi From c8a2020503b1710c4e90eb1fc7f3b5c014e97e26 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Thu, 24 Mar 2016 12:57:57 -0700 Subject: [PATCH 073/178] fix(controller): tag keys can be lowercase or capital for example `deis tags:set dataPlane=true` --- controller/api/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/api/serializers.py b/controller/api/serializers.py index 29e30f09fd..fdb013945d 100644 --- a/controller/api/serializers.py +++ b/controller/api/serializers.py @@ -19,7 +19,7 @@ PROCTYPE_MATCH = re.compile(r'^(?P[a-z]+)') MEMLIMIT_MATCH = re.compile(r'^(?P[0-9]+(MB|KB|GB|[BKMG]))$', re.IGNORECASE) CPUSHARE_MATCH = re.compile(r'^(?P[0-9]+)$') -TAGKEY_MATCH = re.compile(r'^[a-z]+$') +TAGKEY_MATCH = re.compile(r'^[A-Za-z]+$') TAGVAL_MATCH = re.compile(r'^\w+$') CONFIGKEY_MATCH = re.compile(r'^[a-z_]+[a-z0-9_]*$', re.IGNORECASE) From fa1d31acaabef1ad4c52e27b4c7a2244d6eed88f Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 16:06:29 -0600 Subject: [PATCH 074/178] chore(buildpacks): update heroku-buildpack-php to v97 See https://github.com/heroku/heroku-buildpack-php/compare/v94...v97 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 32d2bc4efe..9d5a610bdc 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v78 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v94 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v97 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v66 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 From bd854dc7d889aad509b5e2abf7ce0de70f6948f4 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:55:06 -0600 Subject: [PATCH 075/178] chore(buildpacks): update heroku-buildpack-java to v44 See https://github.com/heroku/heroku-buildpack-java/compare/v43...v44 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 32d2bc4efe..2babdee60d 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -31,7 +31,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v89 -download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 +download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v19 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 From ab572800d9a35e8e721ce44f88fd883b8d84eea0 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 15:49:21 -0600 Subject: [PATCH 076/178] chore(buildpacks): update heroku-buildpack-ruby to v145 See https://github.com/heroku/heroku-buildpack-ruby/compare/v144...v145 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 32d2bc4efe..3519308cfb 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -29,7 +29,7 @@ download_buildpack() { mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 -download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v144 +download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v145 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v89 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v43 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 From b04d88040cde1e67de07c99641d488dbff1c6848 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Thu, 24 Mar 2016 15:03:22 -0700 Subject: [PATCH 077/178] fix(builder): source proxy envvars This exports the proxy environment variables, which should make child processes like the docker daemon to have its proxy information set up. --- builder/rootfs/bin/boot | 2 ++ builder/rootfs/bin/entry | 2 ++ 2 files changed, 4 insertions(+) diff --git a/builder/rootfs/bin/boot b/builder/rootfs/bin/boot index 0a57033e5c..0fd9c78566 100755 --- a/builder/rootfs/bin/boot +++ b/builder/rootfs/bin/boot @@ -8,6 +8,8 @@ set -eo pipefail if [[ -f /etc/environment_proxy ]]; then source /etc/environment_proxy + export HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY + export http_proxy https_proxy all_proxy no_proxy fi exec builder diff --git a/builder/rootfs/bin/entry b/builder/rootfs/bin/entry index 77793b7605..c3400cfe80 100755 --- a/builder/rootfs/bin/entry +++ b/builder/rootfs/bin/entry @@ -3,6 +3,8 @@ set -eo pipefail if [[ -f /etc/environment_proxy ]]; then source /etc/environment_proxy + export HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY + export http_proxy https_proxy all_proxy no_proxy fi # START jpetazzo/dind wrapper From 2869e4035c5401f728b7024131bb189d6e7cdc24 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 29 Mar 2016 14:50:36 -0700 Subject: [PATCH 078/178] fix(builder): fail on piped command --- builder/git/git.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/builder/git/git.go b/builder/git/git.go index 71aca17158..82b20711b5 100644 --- a/builder/git/git.go +++ b/builder/git/git.go @@ -30,6 +30,8 @@ strip_remote_prefix() { stdbuf -i0 -o0 -e0 sed "s/^/"$'\e[1G'"/" } +set -eo pipefail + while read oldrev newrev refname do LOCKFILE="/tmp/$RECEIVE_REPO.lock" From bbe8a0a0fae279ffda44385e4b6eed355b16d650 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 29 Mar 2016 15:17:47 -0700 Subject: [PATCH 079/178] ref(builder): remove unused PrereceiveHookTpl --- builder/sshd/server.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/builder/sshd/server.go b/builder/sshd/server.go index de4bb54fc8..bc4e5b7ee5 100644 --- a/builder/sshd/server.go +++ b/builder/sshd/server.go @@ -31,19 +31,6 @@ const ( ServerConfig string = "ssh.ServerConfig" ) -// PrereceiveHookTmpl is a pre-receive hook. -const PrereceiveHookTpl = `#!/bin/bash -strip_remote_prefix() { - stdbuf -i0 -o0 -e0 sed "s/^/"$'\e[1G'"/" -} - -echo "pre-receive hook START" -set -eo pipefail; while read oldrev newrev refname; do -[[ $refname = "refs/heads/master" ]] && git archive $newrev | {{.Receiver}} "$RECEIVE_REPO" "$newrev" | strip_remote_prefix -done -echo "pre-receive hook END" -` - // Serve starts a native SSH server. // // The general design of the server is that it acts as a main server for From b80a353e35c767a12c1abc01500d40852a31d675 Mon Sep 17 00:00:00 2001 From: Kent Rancourt Date: Tue, 29 Mar 2016 13:49:04 -0400 Subject: [PATCH 080/178] fix(router): Allow for comma-delimited X-Forwarded-Proto --- router/rootfs/etc/confd/templates/nginx.conf | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 93a7fe0c77..56f8a9b5ce 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -65,10 +65,19 @@ http { '' close; } - # trust http_x_forwarded_proto headers correctly indicate ssl offloading - map $http_x_forwarded_proto $access_scheme { - default $http_x_forwarded_proto; - '' $scheme; + # The next two maps work together to determine the $access_scheme: + # 1. Determine if SSL may have been offloaded by the load balancer, in such cases, an HTTP request should be + # treated as if it were HTTPs. + map $http_x_forwarded_proto $tmp_access_scheme { + default $scheme; # if X-Forwarded-Proto header is empty, $tmp_access_scheme will be the actual protocol used + "~^(.*, ?)?http$" "http"; # account for the possibility of a comma-delimited X-Forwarded-Proto header value + "~^(.*, ?)?https$" "https"; # account for the possibility of a comma-delimited X-Forwarded-Proto header value + } + # 2. If the request is an HTTPS request, upgrade $access_scheme to https, regardless of what the X-Forwarded-Proto + # header might say. + map $scheme $access_scheme { + default $tmp_access_scheme; + "https" "https"; } ## HSTS instructs the browser to replace all HTTP links with HTTPS links for this domain until maxAge seconds from now From b0b9a9fae3392949685d8ad9ff08363fa45592a3 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 31 Mar 2016 12:32:17 -0600 Subject: [PATCH 081/178] fix(setup-node.sh): update packages for a Jenkins node --- tests/bin/setup-node.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/bin/setup-node.sh b/tests/bin/setup-node.sh index c020479b8e..f10275a58b 100755 --- a/tests/bin/setup-node.sh +++ b/tests/bin/setup-node.sh @@ -14,7 +14,7 @@ apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070AD echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list apt-get update apt-get purge lxc-docker* -apt-get install -yq docker-engine=1.8.3-0~trusty +apt-get install -yq --force-yes docker-engine=1.10.3-0~trusty # install extra extensions (AUFS, requires reboot) apt-get -y install "linux-image-extra-$(uname -r)" @@ -40,20 +40,20 @@ apt-get install -yq build-essential \ # install virtualbox if ! virtualbox --help &> /dev/null; then - wget -nv http://download.virtualbox.org/virtualbox/5.0.2/virtualbox-5.0_5.0.2-102096~Ubuntu~trusty_amd64.deb - dpkg -i virtualbox-5.0_5.0.2-102096~Ubuntu~trusty_amd64.deb - rm virtualbox-5.0_5.0.2-102096~Ubuntu~trusty_amd64.deb + wget -nv http://download.virtualbox.org/virtualbox/5.0.16/virtualbox-5.0_5.0.16-105871~Ubuntu~trusty_amd64.deb + dpkg -i virtualbox-5.0_5.0.16-105871~Ubuntu~trusty_amd64.deb + rm virtualbox-5.0_5.0.16-105871~Ubuntu~trusty_amd64.deb fi # install vagrant if ! vagrant -v &> /dev/null; then - wget -nv https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.4_x86_64.deb - dpkg -i vagrant_1.7.4_x86_64.deb - rm vagrant_1.7.4_x86_64.deb + wget -nv https://releases.hashicorp.com/vagrant/1.8.1/vagrant_1.8.1_x86_64.deb + dpkg -i vagrant_1.8.1_x86_64.deb + rm vagrant_1.8.1_x86_64.deb fi # install go -wget -nv -O- https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz | tar -C /usr/local -xz +wget -nv -O- https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz | tar -C /usr/local -xz echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile echo "You must reboot for the global $PATH changes to take effect." @@ -70,7 +70,7 @@ apt-get install -yq curl \ libldap2-dev \ libsasl2-dev -curl -sSL https://raw.githubusercontent.com/pypa/pip/7.0.3/contrib/get-pip.py | python - +curl -sSL https://bootstrap.pypa.io/get-pip.py | python - pip==8.1.1 pip install virtualenv # TODO: rely on virtualenvs' pip instead of system pip on slaves From 93117404f3dbe9d6802a5ea9f3656ce7b2bbc3a0 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Fri, 1 Apr 2016 12:36:46 -0700 Subject: [PATCH 082/178] test(controller): increase app.log() test coverage This covers more test cases such as when a user changes the log level. --- controller/api/tests/test_app.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/controller/api/tests/test_app.py b/controller/api/tests/test_app.py index 3d45926b39..abc5e71ae5 100644 --- a/controller/api/tests/test_app.py +++ b/controller/api/tests/test_app.py @@ -138,14 +138,23 @@ def test_app_actions(self, mock_get): def test_app_release_notes_in_logs(self, mock_logger): """Verifies that an app's release summary is dumped into the logs.""" url = '/v1/apps' - body = {'id': 'autotest'} + app_name = 'autotest' + body = {'id': app_name} + response = self.client.post(url, json.dumps(body), content_type='application/json', HTTP_AUTHORIZATION='token {}'.format(self.token)) self.assertEqual(response.status_code, 201) + app = App.objects.get(id=app_name) # check app logs - exp_msg = "autotest created initial release" - exp_log_call = mock.call(logging.INFO, exp_msg) - mock_logger.log.has_calls(exp_log_call) + exp_msg = "[{app_name}]: {self.user.username} created initial release".format(**locals()) + mock_logger.log.assert_called_with(logging.INFO, exp_msg) + app.log('hello world') + exp_msg = "[{app_name}]: hello world".format(**locals()) + mock_logger.log.assert_called_with(logging.INFO, exp_msg) + app.log('goodbye world', logging.WARNING) + # assert logging with a different log level + exp_msg = "[{app_name}]: goodbye world".format(**locals()) + mock_logger.log.assert_called_with(logging.WARNING, exp_msg) def test_app_errors(self): app_id = 'autotest-errors' From e6f5464201d631b0c5293ed4e59bee46d84e818d Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Fri, 1 Apr 2016 14:31:54 -0700 Subject: [PATCH 083/178] fix(controller): use double quotes to escape ENV values This fixes an issue with Docker's build system. The following does not work: ``` ><> cat Dockerfile FROM busybox ENV POWERED_BY='can\'t compute' ><> docker build . Sending build context to Docker daemon 109.6 kB Error response from daemon: Syntax error - can't find = in "compute'". Must be of the form: name=value ``` However, subbing the single quotes for double quotes works: ``` ><> vim Dockerfile ><> docker build . Sending build context to Docker daemon 109.6 kB Step 1 : FROM busybox ---> 307ac631f1b5 Step 2 : ENV POWERED_BY "can\"t compute" ---> Using cache ---> 7b505fc9ce12 Successfully built 7b505fc9ce12 ><> docker run 7b505fc9ce12 env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=c4d9a9278acd POWERED_BY=can"t compute HOME=/root ``` --- controller/registry/dockerclient.py | 4 ++-- controller/registry/tests.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/controller/registry/dockerclient.py b/controller/registry/dockerclient.py index 1557142f47..c2ecae1f99 100644 --- a/controller/registry/dockerclient.py +++ b/controller/registry/dockerclient.py @@ -55,8 +55,8 @@ def publish_release(self, source, config, target, deis_registry): def build(self, source, config, repo, tag): """Add a "last-mile" layer of environment config to a Docker image for deis-registry.""" check_blacklist(repo) - env = ' '.join("{}='{}'".format( - k, v.encode('unicode-escape').replace("'", "\\'")) for k, v in config.viewitems()) + env = ' '.join('{}="{}"'.format( + k, v.encode('unicode-escape').replace('"', '\\"')) for k, v in config.viewitems()) dockerfile = "FROM {}\nENV {}".format(source, env) f = io.BytesIO(dockerfile.encode('utf-8')) target_repo = "{}/{}:{}".format(self.registry, repo, tag) diff --git a/controller/registry/tests.py b/controller/registry/tests.py index ae905ee44d..76c3b1c297 100644 --- a/controller/registry/tests.py +++ b/controller/registry/tests.py @@ -56,7 +56,7 @@ def test_build(self, mock_client): self.assertDictContainsSubset(args, kwargs) # test that the fileobj arg to "docker build" contains a correct Dockerfile f = kwargs['fileobj'] - self.assertEqual(f.read(), "FROM ozzy/embryo:git-f3a8020\nENV POWERED_BY='Deis'") + self.assertEqual(f.read(), "FROM ozzy/embryo:git-f3a8020\nENV POWERED_BY=\"Deis\"") # Test that blacklisted image names can't be built with self.assertRaises(PermissionDenied): self.client.build('deis/controller:v1.11.1', {}, 'deis/controller', 'v1.11.1') From 59f4740f4d3d66e0afd87907a1088a83bed192f5 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Fri, 1 Apr 2016 12:21:30 -0700 Subject: [PATCH 084/178] fix(controller): use django HttpResponse for logs Django Rest Framework will wrap the string with quotes because of the JSONRenderer. Django's HttpResponse class handles the application logs as we expect it to. This scrubs the "No logs for appname" message we would display when there are no logs to show, but in reality this is the correct way to return a 204, and that message was never displayed to users because we inject "user created initial release" when a user first runs `deis apps:create`. Django scrubs the response content if the status code is a 204 to comply with RFC 2616, section 4.3. See https://github.com/django/django/blob/53ccffdb8c8e47a4d4304df453d8c79a9be295ab/django/http/utils.py#L13-L16 --- client/cmd/apps.go | 2 +- controller/api/tests/test_app.py | 8 +++----- controller/api/views.py | 22 ++++++++++------------ docs/reference/api-v1.7.rst | 3 ++- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/client/cmd/apps.go b/client/cmd/apps.go index 133a2868a2..fde0c5e6ff 100644 --- a/client/cmd/apps.go +++ b/client/cmd/apps.go @@ -168,7 +168,7 @@ func AppLogs(appID string, lines int) error { // printLogs prints each log line with a color matched to its category. func printLogs(logs string) error { - for _, log := range strings.Split(strings.Trim(logs, `\n`), `\n`) { + for _, log := range strings.Split(logs, "\n") { category := "unknown" parts := strings.Split(strings.Split(log, ": ")[0], " ") if len(parts) >= 2 { diff --git a/controller/api/tests/test_app.py b/controller/api/tests/test_app.py index 3d45926b39..ba25d7308b 100644 --- a/controller/api/tests/test_app.py +++ b/controller/api/tests/test_app.py @@ -105,32 +105,30 @@ def test_app_actions(self, mock_get): url = "/v1/apps/{app_id}/logs".format(**locals()) response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) self.assertEqual(response.status_code, 204) - self.assertEqual(response.data, "No logs for {}".format(app_id)) # test logs - 404 from deis-logger mock_response.status_code = 404 response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) self.assertEqual(response.status_code, 204) - self.assertEqual(response.data, "No logs for {}".format(app_id)) # test logs - unanticipated status code from deis-logger mock_response.status_code = 400 response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) self.assertEqual(response.status_code, 500) - self.assertEqual(response.data, "Error accessing logs for {}".format(app_id)) + self.assertEqual(response.content, "Error accessing logs for {}".format(app_id)) # test logs - success accessing deis-logger mock_response.status_code = 200 mock_response.content = FAKE_LOG_DATA response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) self.assertEqual(response.status_code, 200) - self.assertEqual(response.data, FAKE_LOG_DATA) + self.assertEqual(response.content, FAKE_LOG_DATA) # test logs - HTTP request error while accessing deis-logger mock_get.side_effect = requests.exceptions.RequestException('Boom!') response = self.client.get(url, HTTP_AUTHORIZATION="token {}".format(self.token)) self.assertEqual(response.status_code, 500) - self.assertEqual(response.data, "Error accessing logs for {}".format(app_id)) + self.assertEqual(response.content, "Error accessing logs for {}".format(app_id)) # TODO: test run needs an initial build diff --git a/controller/api/views.py b/controller/api/views.py index 3d8a59c002..5237b64116 100644 --- a/controller/api/views.py +++ b/controller/api/views.py @@ -224,22 +224,20 @@ def scale(self, request, **kwargs): def logs(self, request, **kwargs): app = self.get_object() try: - return Response(app.logs(request.query_params.get('log_lines', - str(settings.LOG_LINES))), - status=status.HTTP_200_OK, content_type='text/plain') + return HttpResponse(app.logs(request.query_params.get('log_lines', + str(settings.LOG_LINES))), + status=status.HTTP_200_OK, content_type='text/plain') except requests.exceptions.RequestException: - return Response("Error accessing logs for {}".format(app.id), - status=status.HTTP_500_INTERNAL_SERVER_ERROR, - content_type='text/plain') - except EnvironmentError as e: - if e.message == 'Error accessing deis-logger': - return Response("Error accessing logs for {}".format(app.id), + return HttpResponse("Error accessing logs for {}".format(app.id), status=status.HTTP_500_INTERNAL_SERVER_ERROR, content_type='text/plain') + except EnvironmentError as e: + if e.message == 'Error accessing deis-logger': + return HttpResponse("Error accessing logs for {}".format(app.id), + status=status.HTTP_500_INTERNAL_SERVER_ERROR, + content_type='text/plain') else: - return Response("No logs for {}".format(app.id), - status=status.HTTP_204_NO_CONTENT, - content_type='text/plain') + return HttpResponse(status=status.HTTP_204_NO_CONTENT) def run(self, request, **kwargs): app = self.get_object() diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index 85cb24fe1b..971db89929 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -370,7 +370,8 @@ Example Response: DEIS_PLATFORM_VERSION: 1.12.3 Content-Type: text/plain - "16:51:14 deis[api]: test created initial release\n" + 16:51:14 deis[api]: test created initial release + 16:51:15 deis[api]: test added POWERED_BY Run one-off Commands From e10a04461df9966d51e29f2399f5d31248b4f106 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 24 Mar 2016 15:00:16 -0600 Subject: [PATCH 085/178] chore(*): update base to alpine:3.3 --- controller/Dockerfile | 4 ++-- controller/build.sh | 7 +++---- database/build.sh | 4 ++-- logger/image/Dockerfile | 2 +- logspout/image/Dockerfile | 2 +- publisher/image/Dockerfile | 4 ++-- router/Dockerfile | 7 +++---- router/rootfs/bin/build | 5 ++--- tests/fixtures/mock-store/Dockerfile | 4 ++-- tests/fixtures/mock-store/build.sh | 8 ++++---- tests/fixtures/test-etcd/Dockerfile | 4 ++-- 11 files changed, 24 insertions(+), 27 deletions(-) diff --git a/controller/Dockerfile b/controller/Dockerfile index d4a1f40aed..7fd54dfc07 100644 --- a/controller/Dockerfile +++ b/controller/Dockerfile @@ -1,7 +1,7 @@ -FROM alpine:3.2 +FROM alpine:3.3 # install common packages -RUN apk add --update-cache curl bash sudo && rm -rf /var/cache/apk/* +RUN apk add --no-cache curl bash sudo # install etcdctl RUN curl -sSL -o /usr/local/bin/etcdctl https://s3-us-west-2.amazonaws.com/get-deis/etcdctl-v0.4.9 \ diff --git a/controller/build.sh b/controller/build.sh index 80e50fdf03..b72cee2dcf 100755 --- a/controller/build.sh +++ b/controller/build.sh @@ -12,7 +12,7 @@ fi # install required system packages # HACK: install git so we can install bacongobbler's fork of django-fsm -apk add --update-cache \ +apk add --no-cache \ build-base \ git \ libffi-dev \ @@ -24,7 +24,7 @@ apk add --update-cache \ python-dev # install pip -curl -sSL https://raw.githubusercontent.com/pypa/pip/7.0.3/contrib/get-pip.py | python - +curl -sSL https://bootstrap.pypa.io/get-pip.py | python - pip==8.1.1 # add a deis user adduser deis -D -h /app -s /bin/bash @@ -39,11 +39,10 @@ mkdir -p /templates && chown -R deis:deis /templates pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt # cleanup. -apk del --purge \ +apk del --no-cache \ build-base \ git \ libffi-dev \ openldap-dev \ postgresql-dev \ python-dev -rm -rf /var/cache/apk/* diff --git a/database/build.sh b/database/build.sh index c58700a79e..341600a6c1 100755 --- a/database/build.sh +++ b/database/build.sh @@ -31,13 +31,13 @@ apk add /tmp/pv-1.6.0-r0.apk /etc/init.d/postgresql stop || true # install pip -curl -sSL https://raw.githubusercontent.com/pypa/pip/7.0.3/contrib/get-pip.py | python - +curl -sSL https://bootstrap.pypa.io/get-pip.py | python - pip==8.1.1 # install wal-e pip install --disable-pip-version-check --no-cache-dir wal-e==0.8.1 oslo.config>=1.12.0 # python port of daemontools -pip install --disable-pip-version-check --no-cache-dir envdir +pip install --disable-pip-version-check --no-cache-dir envdir==0.7 mkdir -p /etc/wal-e.d/env /etc/postgresql/main /var/lib/postgresql diff --git a/logger/image/Dockerfile b/logger/image/Dockerfile index 95191afa5c..24068cca50 100644 --- a/logger/image/Dockerfile +++ b/logger/image/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.2 +FROM alpine:3.3 ENTRYPOINT ["/bin/logger"] CMD ["--enable-publish"] diff --git a/logspout/image/Dockerfile b/logspout/image/Dockerfile index 6e52dabd9d..0e183fb7ee 100644 --- a/logspout/image/Dockerfile +++ b/logspout/image/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.2 +FROM alpine:3.3 ENV DOCKER_HOST unix:///tmp/docker.sock ENV ROUTESPATH /tmp diff --git a/publisher/image/Dockerfile b/publisher/image/Dockerfile index 7ff07539e8..246fb82611 100644 --- a/publisher/image/Dockerfile +++ b/publisher/image/Dockerfile @@ -1,8 +1,8 @@ -FROM alpine:3.2 +FROM alpine:3.3 # install curl in the image so it is possible to get the runtime # profiling information without any additional package installation. -RUN apk add --update-cache curl && rm -rf /var/cache/apk/* +RUN apk add --no-cache curl ADD bin/publisher /usr/local/bin/publisher ENTRYPOINT ["/usr/local/bin/publisher"] diff --git a/router/Dockerfile b/router/Dockerfile index 33dbe111cc..c8e4b60c81 100644 --- a/router/Dockerfile +++ b/router/Dockerfile @@ -1,15 +1,14 @@ -FROM alpine:3.2 +FROM alpine:3.3 # install common packages -RUN apk add --update-cache \ +RUN apk add --no-cache \ bash \ curl \ geoip \ libssl1.0 \ openssl \ pcre \ - sudo \ - && rm -rf /var/cache/apk/* + sudo # install confd RUN curl -sSL -o /usr/local/bin/confd https://s3-us-west-2.amazonaws.com/opdemand/confd-git-73f7489 \ diff --git a/router/rootfs/bin/build b/router/rootfs/bin/build index e16ce96a03..9efc225276 100755 --- a/router/rootfs/bin/build +++ b/router/rootfs/bin/build @@ -20,7 +20,7 @@ mkdir "$BUILD_PATH" cd "$BUILD_PATH" # install required packages to build -apk add --update-cache \ +apk add --no-cache \ build-base \ curl \ geoip-dev \ @@ -78,7 +78,7 @@ cd "$BUILD_PATH/nginx-$NGINX_VERSION" && make && make install rm -rf "$BUILD_PATH" -apk del --purge \ +apk del --no-cache \ build-base \ curl \ geoip-dev \ @@ -89,4 +89,3 @@ apk del --purge \ openssl-dev \ zlib \ zlib-dev -rm -rf /var/cache/apk/* diff --git a/tests/fixtures/mock-store/Dockerfile b/tests/fixtures/mock-store/Dockerfile index 704ccb8e02..c1c3c43959 100644 --- a/tests/fixtures/mock-store/Dockerfile +++ b/tests/fixtures/mock-store/Dockerfile @@ -1,7 +1,7 @@ -FROM alpine:3.2 +FROM alpine:3.3 # install common packages -RUN apk add --update-cache curl bash sudo && rm -rf /var/cache/apk/* +RUN apk add --no-cache curl bash sudo WORKDIR /app EXPOSE 8888 diff --git a/tests/fixtures/mock-store/build.sh b/tests/fixtures/mock-store/build.sh index e7eae50b99..bc5340d178 100755 --- a/tests/fixtures/mock-store/build.sh +++ b/tests/fixtures/mock-store/build.sh @@ -11,7 +11,7 @@ if [[ -z $DOCKER_BUILD ]]; then fi # install required packages to build -apk add --update-cache \ +apk add --no-cache \ build-base \ curl \ file \ @@ -30,13 +30,13 @@ git checkout 4c3c3752f990db97e8969c00666251a3b427ef4c git apply /tmp/mock-s3-patch.diff # install pip -curl -sSL https://raw.githubusercontent.com/pypa/pip/7.0.3/contrib/get-pip.py | python - +curl -sSL https://bootstrap.pypa.io/get-pip.py | python - pip==8.1.1 python setup.py install # cleanup. -apk del --purge \ +apk del --no-cache \ build-base \ gcc \ git -rm -rf /var/cache/apk/* /tmp/* +rm -rf /tmp/* diff --git a/tests/fixtures/test-etcd/Dockerfile b/tests/fixtures/test-etcd/Dockerfile index 594d2c032a..75532441c3 100644 --- a/tests/fixtures/test-etcd/Dockerfile +++ b/tests/fixtures/test-etcd/Dockerfile @@ -1,7 +1,7 @@ -FROM alpine:3.2 +FROM alpine:3.3 # install common packages -RUN apk add --update-cache curl tar && rm -rf /var/cache/apk/* +RUN apk add --no-cache curl tar # ETCD_VERSION is actually used by the etcd daemon, and causes an issue if we # format it for our use here. So, we call this something else. From 7e003d0a7b47b04f3571500234bbe23a059d2f32 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 28 Mar 2016 16:51:59 -0600 Subject: [PATCH 086/178] chore(registry): update base to alpine:3.3 --- registry/Dockerfile | 4 ++-- registry/build.sh | 19 +++++++------------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/registry/Dockerfile b/registry/Dockerfile index 7277ab282a..fc3e8bd451 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile @@ -1,7 +1,7 @@ -FROM alpine:3.1 +FROM alpine:3.3 # install common packages -RUN apk add --update-cache curl bash sudo && rm -rf /var/cache/apk/* +RUN apk add --no-cache curl bash sudo # install etcdctl RUN curl -sSL -o /usr/local/bin/etcdctl https://s3-us-west-2.amazonaws.com/get-deis/etcdctl-v0.4.9 \ diff --git a/registry/build.sh b/registry/build.sh index 0eb5e788b0..e377d6177b 100755 --- a/registry/build.sh +++ b/registry/build.sh @@ -11,7 +11,7 @@ if [[ -z $DOCKER_BUILD ]]; then fi # install required packages (copied from dotcloud/docker-registry Dockerfile) -apk add --update-cache \ +apk add --no-cache \ build-base \ git \ openssl-dev \ @@ -22,16 +22,13 @@ apk add --update-cache \ xz-dev # install pip -curl -sSL https://raw.githubusercontent.com/pypa/pip/7.0.3/contrib/get-pip.py | python - - -# workaround to python > 2.7.8 SSL issues -pip install --disable-pip-version-check --no-cache-dir pyopenssl ndg-httpsclient pyasn1 +curl -sSL https://bootstrap.pypa.io/get-pip.py | python - pip==8.1.1 # create a registry user adduser -D -s /bin/bash registry # add the docker registry source from github -git clone -b new-repository-import-master --single-branch https://github.com/deis/docker-registry /docker-registry && \ +git clone -b deis-v1-lts --single-branch https://github.com/deis/docker-registry /docker-registry && \ chown -R registry:registry /docker-registry # install boto configuration @@ -44,14 +41,12 @@ pip install --disable-pip-version-check --no-cache-dir /docker-registry/depends/ # Install registry pip install --disable-pip-version-check --no-cache-dir "file:///docker-registry#egg=docker-registry[bugsnag,newrelic,cors]" -patch \ - "$(python -c 'import boto; import os; print os.path.dirname(boto.__file__)')/connection.py" \ - < /docker-registry/contrib/boto_header_patch.diff +# patch boto +cd "$(python -c 'import boto; import os; print os.path.dirname(boto.__file__)')" \ + && patch -i /docker-registry/contrib/boto_header_patch.diff connection.py # cleanup. indicate that python is a required package. -apk del --purge \ +apk del --no-cache \ build-base \ linux-headers \ python-dev - -rm -rf /var/cache/apk/* From 06fd17c0506dbfd3262223cb6bd6f84e674dd3a8 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 28 Mar 2016 17:13:20 -0600 Subject: [PATCH 087/178] chore(builder): update base to alpine:3.3 --- builder/etcd/etcd.go | 14 ++++++++++++-- builder/rootfs/Dockerfile | 11 +++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/builder/etcd/etcd.go b/builder/etcd/etcd.go index 05a3d3586f..2ff5f5bbbd 100644 --- a/builder/etcd/etcd.go +++ b/builder/etcd/etcd.go @@ -277,6 +277,7 @@ func keysToLocal(c cookoo.Context, client Getter, ciphers []string, etcdPath str // It only fails if it cannot copy ssh_host_key to sshHostKey. All other // abnormal conditions are logged, but not considered to be failures. func keysToEtcd(c cookoo.Context, client Setter, ciphers []string, etcdPath string) error { + firstpath := "" lpath := "/etc/ssh/ssh_host_%s_key" privkey := "%s/sshHost%sKey" for _, cipher := range ciphers { @@ -288,10 +289,19 @@ func keysToEtcd(c cookoo.Context, client Setter, ciphers []string, etcdPath stri } else if _, err := client.Set(key, string(content), 0); err != nil { log.Errf(c, "Could not store ssh key in etcd: %s", err) } + // Remember the first key's path in case the generic key is missing + if firstpath == "" { + firstpath = path + } } // Now we set the generic key: - if content, err := ioutil.ReadFile("/etc/ssh/ssh_host_key"); err != nil { - log.Errf(c, "Could not read the ssh_host_key file.") + keypath := "/etc/ssh/ssh_host_key" + if _, err := os.Stat(keypath); os.IsNotExist(err) && firstpath != "" { + // Use ssh_host_dsa_key if newer ssh-keygen didn't create ssh_host_key + keypath = firstpath + } + if content, err := ioutil.ReadFile(keypath); err != nil { + log.Errf(c, "Could not read the %s file.", keypath) return err } else if _, err := client.Set("sshHostKey", string(content), 0); err != nil { log.Errf(c, "Failed to set sshHostKey in etcd.") diff --git a/builder/rootfs/Dockerfile b/builder/rootfs/Dockerfile index 5f5badca2e..c0580cc326 100644 --- a/builder/rootfs/Dockerfile +++ b/builder/rootfs/Dockerfile @@ -1,7 +1,7 @@ -FROM alpine:3.2 +FROM alpine:3.3 # install common packages -RUN apk add --update-cache curl bash sudo && rm -rf /var/cache/apk/* +RUN apk add --no-cache curl bash sudo # install etcdctl RUN curl -sSL -o /usr/local/bin/etcdctl https://s3-us-west-2.amazonaws.com/get-deis/etcdctl-v0.4.9 \ @@ -11,19 +11,18 @@ RUN curl -sSL -o /usr/local/bin/etcdctl https://s3-us-west-2.amazonaws.com/get-d RUN curl -sSL -o /usr/local/bin/confd https://github.com/kelseyhightower/confd/releases/download/v0.10.0/confd-0.10.0-linux-amd64 \ && chmod +x /usr/local/bin/confd -RUN apk add --update-cache \ +RUN apk add --no-cache \ coreutils \ device-mapper \ e2fsprogs \ git \ iptables \ - libudev \ + udev \ lxc \ openssh \ udev \ util-linux \ - xz \ - && rm -rf /var/cache/apk/* + xz # the docker package in alpine disables aufs and devicemapper ENV DOCKER_BUCKET get.docker.com From 0c4334ab58510dcf8e8e1146f871c2473927c54a Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Mon, 4 Apr 2016 12:34:28 -0700 Subject: [PATCH 088/178] fix(tests): fixup cancelling different account test output --- tests/auth_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auth_test.go b/tests/auth_test.go index 80f825b613..5da6294bfe 100644 --- a/tests/auth_test.go +++ b/tests/auth_test.go @@ -49,8 +49,8 @@ func authCancel(t *testing.T, params *utils.DeisTestConfig) { admin := utils.GetGlobalConfig() utils.Execute(t, authLoginCmd, admin, false, "") utils.Execute(t, authCancelAdminCmd, user, false, "Account cancelled") - // Make sure the user's config was purged after auth:cancel - utils.Execute(t, authWhoamiCmd, admin, true, "Error: Not logged in") + // Make sure the user's config was not purged after auth:cancel --username + utils.Execute(t, authWhoamiCmd, admin, false, "You are "+admin.UserName) } func authLoginTest(t *testing.T, params *utils.DeisTestConfig) { From 469f4ddba75133feafbb27e5bdcdfffbc44d3ff8 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 1 Apr 2016 16:41:58 -0600 Subject: [PATCH 089/178] chore(requirements): update simpleflock to 0.0.3 --- controller/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/requirements.txt b/controller/requirements.txt index 93d9a1b0bf..0586ea44e6 100644 --- a/controller/requirements.txt +++ b/controller/requirements.txt @@ -17,6 +17,6 @@ python-etcd==0.3.2 python-ldap==2.4.19 PyYAML==3.11 semantic_version==2.4.2 -simpleflock==0.0.2 +simpleflock==0.0.3 South==1.0.2 static==1.1.1 From db871005e7afa09af1737823bf1df5ede34961b2 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Sun, 3 Apr 2016 14:01:55 -0600 Subject: [PATCH 090/178] fix(controller): prevent overlapping config:set operations Uses a file lock to ensure that multiple gunicorn processes can be coordinated in the container. --- controller/api/tests/test_config.py | 39 +++++++++++++++++++++++++++++ controller/api/views.py | 17 +++++++++++++ 2 files changed, 56 insertions(+) diff --git a/controller/api/tests/test_config.py b/controller/api/tests/test_config.py index 8626c8c258..4045662719 100644 --- a/controller/api/tests/test_config.py +++ b/controller/api/tests/test_config.py @@ -9,13 +9,16 @@ import json import logging +import os.path import requests +import tempfile from django.contrib.auth.models import User from django.test import TransactionTestCase import etcd import mock from rest_framework.authtoken.models import Token +from simpleflock import SimpleFlock import api.exceptions from api.models import App, Config @@ -133,6 +136,42 @@ def test_config(self): self.assertEqual(response.status_code, 405) return config5 + @mock.patch('requests.post', mock_status_ok) + def test_overlapping_config(self): + """ + Test that config won't be created if a similar operation + is in progress for that app. + """ + url = '/v1/apps' + response = self.client.post(url, HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 201) + app_id = response.data['id'] + # check to see that an initial/empty config was created + url = "/v1/apps/{app_id}/config".format(**locals()) + response = self.client.get(url, + HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 200) + self.assertIn('values', response.data) + self.assertEqual(response.data['values'], {}) + config1 = response.data + # create the lockfile as though a "deis config:set" were in progress + lockfile = os.path.join(tempfile.gettempdir(), app_id + "-config") + with SimpleFlock(lockfile): + # set an initial config value + body = {'values': json.dumps({'NEW_URL1': 'http://localhost:8080/'})} + response = self.client.post(url, json.dumps(body), content_type='application/json', + HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 409) + self.assertNotIn('values', response.data) + self.assertNotIn('uuid', response.data) + # read the config + response = self.client.get(url, + HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 200) + config2 = response.data + self.assertEqual(config1, config2) + self.assertNotIn('NEW_URL1', response.data['values']) + @mock.patch('requests.post', mock_status_ok) def test_response_data(self): """Test that the serialized response contains only relevant data.""" diff --git a/controller/api/views.py b/controller/api/views.py index 5237b64116..55c8035f53 100644 --- a/controller/api/views.py +++ b/controller/api/views.py @@ -1,6 +1,10 @@ """ RESTful view classes for presenting Deis API objects. """ + +import os.path +import tempfile + from django.conf import settings from django.core.exceptions import ValidationError from django.contrib.auth.models import User @@ -15,6 +19,7 @@ from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet from rest_framework.authtoken.models import Token +from simpleflock import SimpleFlock from api import authentication, models, permissions, serializers, viewsets @@ -277,6 +282,18 @@ class ConfigViewSet(ReleasableViewSet): model = models.Config serializer_class = serializers.ConfigSerializer + def create(self, request, **kwargs): + # Guard against overlapping config changes, using a filesystem lock so that + # multiple controller processes can be coordinated. + # Use a tempfile such as "/tmp/violet-valkyrie-config". + lockfile = os.path.join(tempfile.gettempdir(), kwargs['id'] + '-config') + try: + with SimpleFlock(lockfile, timeout=5): + return super(ConfigViewSet, self).create(request, **kwargs) + except IOError as err: + msg = "Config changes already in progress.\n{}".format(err) + return Response(status=status.HTTP_409_CONFLICT, data={'error': msg}) + def post_save(self, config): release = config.app.release_set.latest() self.release = release.new(self.request.user, config=config, build=release.build) From 86298674db3ab927bde3f4db53b487d41fea9091 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 5 Apr 2016 10:08:37 -0600 Subject: [PATCH 091/178] chore(requirements): remove obsolete marathon lib The preview Mesos / Marathon scheduler was removed from Deis after the 1.12 release. --- controller/requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/controller/requirements.txt b/controller/requirements.txt index 93d9a1b0bf..5a423186e4 100644 --- a/controller/requirements.txt +++ b/controller/requirements.txt @@ -10,7 +10,6 @@ django-auth-ldap==1.2.5 djangorestframework==3.0.5 docker-py==1.7.0 gunicorn==19.3.0 -marathon==0.6.15 paramiko==1.15.2 psycopg2==2.6.1 python-etcd==0.3.2 From 723e58c7e328728c190ac46d8a349db7aa879d76 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 5 Apr 2016 10:17:50 -0600 Subject: [PATCH 092/178] chore(build.sh): remove unused git install Controller doesn't require the django-fsm fork any longer. --- controller/build.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/controller/build.sh b/controller/build.sh index b72cee2dcf..c7077a3abc 100755 --- a/controller/build.sh +++ b/controller/build.sh @@ -11,10 +11,8 @@ if [[ -z $DOCKER_BUILD ]]; then fi # install required system packages -# HACK: install git so we can install bacongobbler's fork of django-fsm apk add --no-cache \ build-base \ - git \ libffi-dev \ libpq \ openldap \ @@ -41,7 +39,6 @@ pip install --disable-pip-version-check --no-cache-dir -r /app/requirements.txt # cleanup. apk del --no-cache \ build-base \ - git \ libffi-dev \ openldap-dev \ postgresql-dev \ From de365b760d07d35f207c76e0fcec712ea4ee766c Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Mon, 4 Apr 2016 10:37:26 -0700 Subject: [PATCH 093/178] fix(logspout): discover logger connection continuously Logspout would only discover the logger's host/port information at boot. When the logger is rebooted and is re-scheduled onto another host, the logspout agents were not updated. This change makes the agent check etcd every 10 seconds and updates the logger route information to ensure it's sending logs to the right address. --- logspout/logspout.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/logspout/logspout.go b/logspout/logspout.go index 34e831c48b..3c2c2a1574 100644 --- a/logspout/logspout.go +++ b/logspout/logspout.go @@ -205,6 +205,17 @@ func getEtcdValueOrDefault(c *etcd.Client, key string, defaultValue string) stri return resp.Node.Value } +func getEtcdRoute(client *etcd.Client) *Route { + hostResp, err := client.Get("/deis/logs/host", false, false) + assert(err, "url") + portResp, err := client.Get("/deis/logs/port", false, false) + assert(err, "url") + protocol := getEtcdValueOrDefault(client, "/deis/logs/protocol", "udp") + host := fmt.Sprintf("%s:%s", hostResp.Node.Value, portResp.Node.Value) + log.Printf("routing all to %s://%s", protocol, host) + return &Route{ID: "etcd", Target: Target{Type: "syslog", Addr: host, Protocol: protocol}} +} + func main() { runtime.GOMAXPROCS(1) debugMode = getopt("DEBUG", "") != "" @@ -224,14 +235,14 @@ func main() { debug("etcd:", connectionString[0]) etcd := etcd.NewClient(connectionString) etcd.SetDialTimeout(3 * time.Second) - hostResp, err := etcd.Get("/deis/logs/host", false, false) - assert(err, "url") - portResp, err := etcd.Get("/deis/logs/port", false, false) - assert(err, "url") - protocol := getEtcdValueOrDefault(etcd, "/deis/logs/protocol", "udp") - host := fmt.Sprintf("%s:%s", hostResp.Node.Value, portResp.Node.Value) - log.Printf("routing all to %s://%s", protocol, host) - router.Add(&Route{Target: Target{Type: "syslog", Addr: host, Protocol: protocol}}) + router.Add(getEtcdRoute(etcd)) + go func() { + for { + // NOTE(bacongobbler): sleep for a bit before doing the discovery loop again + time.Sleep(10 * time.Second) + router.Add(getEtcdRoute(etcd)) + } + }() } if len(os.Args) > 1 { From 0be50612f9f79841438f1c151d787708c5521039 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 5 Apr 2016 10:49:44 -0700 Subject: [PATCH 094/178] fix(logspout): remove old route --- logspout/logspout.go | 1 + 1 file changed, 1 insertion(+) diff --git a/logspout/logspout.go b/logspout/logspout.go index 3c2c2a1574..b09bb855bb 100644 --- a/logspout/logspout.go +++ b/logspout/logspout.go @@ -240,6 +240,7 @@ func main() { for { // NOTE(bacongobbler): sleep for a bit before doing the discovery loop again time.Sleep(10 * time.Second) + router.Remove("etcd") router.Add(getEtcdRoute(etcd)) } }() From 1dd208f9f0613e63f8650f79f6e44926ed906a70 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 5 Apr 2016 12:18:24 -0700 Subject: [PATCH 095/178] fix(logspout): perform a no-op if etcd route is identical --- logspout/logspout.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/logspout/logspout.go b/logspout/logspout.go index b09bb855bb..10e850cec5 100644 --- a/logspout/logspout.go +++ b/logspout/logspout.go @@ -240,8 +240,19 @@ func main() { for { // NOTE(bacongobbler): sleep for a bit before doing the discovery loop again time.Sleep(10 * time.Second) + newRoute := getEtcdRoute(etcd) + oldRoute, err := router.Get("etcd") + // router.Get only returns an error if the route doesn't exist. If it does, + // then we can skip this check and just add the new route to the routing table + if err == nil && + newRoute.Target.Protocol == oldRoute.Target.Protocol && + newRoute.Target.Addr == oldRoute.Target.Addr { + // NOTE(bacongobbler): the two targets are the same; perform a no-op + continue + } + // NOTE(bacongobbler): this operation is a no-op if the route doesn't exist router.Remove("etcd") - router.Add(getEtcdRoute(etcd)) + router.Add(newRoute) } }() } From 7509f31a3fb3a38d3bd57300d148b3c7b627526a Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 5 Apr 2016 12:20:48 -0700 Subject: [PATCH 096/178] ref(logspout); remove magic IDs --- logspout/logspout.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/logspout/logspout.go b/logspout/logspout.go index 10e850cec5..e76c15ed87 100644 --- a/logspout/logspout.go +++ b/logspout/logspout.go @@ -241,7 +241,7 @@ func main() { // NOTE(bacongobbler): sleep for a bit before doing the discovery loop again time.Sleep(10 * time.Second) newRoute := getEtcdRoute(etcd) - oldRoute, err := router.Get("etcd") + oldRoute, err := router.Get(newRoute.ID) // router.Get only returns an error if the route doesn't exist. If it does, // then we can skip this check and just add the new route to the routing table if err == nil && @@ -251,7 +251,7 @@ func main() { continue } // NOTE(bacongobbler): this operation is a no-op if the route doesn't exist - router.Remove("etcd") + router.Remove(oldRoute.ID) router.Add(newRoute) } }() From 47ffdf6b8c5e5dcfb83eaac5caabe2ede2d1a77e Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Tue, 5 Apr 2016 14:36:10 -0700 Subject: [PATCH 097/178] ref(client): improve client error message This PR improves the resultant client error message they get when the returned response is incorrect. This is especially important for determining the error message Old message when using a v1 client with a v2 cluster: ``` http://deis.10.245.1.3.xip.io does not appear to be a valid Deis controller. Make sure that the Controller URI is correct and the server is running. ``` New message: ``` http://deis.10.245.1.3.xip.io/v1/ does not appear to be a valid Deis controller. Make sure that the Controller URI is correct and the server is running. ``` Notice the appended /v1/ path, which users can assume this is a v1 client. --- client/controller/client/http.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/controller/client/http.go b/client/controller/client/http.go index c4ef10d156..5dfd47cb51 100644 --- a/client/controller/client/http.go +++ b/client/controller/client/http.go @@ -157,8 +157,6 @@ func CheckConnection(client *http.Client, controllerURL url.URL) error { errorMessage := `%s does not appear to be a valid Deis controller. Make sure that the Controller URI is correct and the server is running.` - baseURL := controllerURL.String() - controllerURL.Path = "/v1/" req, err := http.NewRequest("GET", controllerURL.String(), bytes.NewBuffer(nil)) @@ -171,13 +169,13 @@ Make sure that the Controller URI is correct and the server is running.` res, err := client.Do(req) if err != nil { - fmt.Printf(errorMessage+"\n", baseURL) + fmt.Printf(errorMessage+"\n", controllerURL.String()) return err } defer res.Body.Close() if res.StatusCode != 401 { - return fmt.Errorf(errorMessage, baseURL) + return fmt.Errorf(errorMessage, controllerURL.String()) } checkAPICompatibility(res.Header.Get("DEIS_API_VERSION")) From 4e30e39b5baf1d126f37c8d417ae51ba12d4a8ec Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 5 Apr 2016 21:38:40 -0600 Subject: [PATCH 098/178] chore(reqs): update docker-py to 1.7.2 See https://github.com/docker/docker-py/blob/master/docs/change_log.md#172 --- controller/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/requirements.txt b/controller/requirements.txt index 6bac671b45..76c5cf493f 100644 --- a/controller/requirements.txt +++ b/controller/requirements.txt @@ -8,7 +8,7 @@ django-guardian==1.2.5 django-json-field==0.5.7 django-auth-ldap==1.2.5 djangorestframework==3.0.5 -docker-py==1.7.0 +docker-py==1.7.2 gunicorn==19.3.0 paramiko==1.15.2 psycopg2==2.6.1 From 26ce287e38a31041c89459dfabbd1efc4ca70de8 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Wed, 6 Apr 2016 09:08:02 -0700 Subject: [PATCH 099/178] feat(client): add more checks for the user --- client/controller/client/http.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/controller/client/http.go b/client/controller/client/http.go index 5dfd47cb51..4e04270e97 100644 --- a/client/controller/client/http.go +++ b/client/controller/client/http.go @@ -155,7 +155,8 @@ func checkForErrors(res *http.Response, body string) error { // CheckConnection checks that the user is connected to a network and the URL points to a valid controller. func CheckConnection(client *http.Client, controllerURL url.URL) error { errorMessage := `%s does not appear to be a valid Deis controller. -Make sure that the Controller URI is correct and the server is running.` +Make sure that the Controller URI is correct, the server is running and +your client version is correct.` controllerURL.Path = "/v1/" From 032e5c3fe9d62c1c7e8f5327a0f9b23df7748d97 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Mar 2016 12:33:53 -0600 Subject: [PATCH 100/178] chore(release): update version to v1.13.0 --- CHANGELOG.md | 91 +++++++++++++++++++ README.md | 2 +- builder/rootfs/Dockerfile | 2 +- .../usr/local/src/slugbuilder/Dockerfile | 2 +- .../usr/local/src/slugrunner/Dockerfile | 2 +- client/deis-version | 2 +- contrib/coreos/user-data.example | 4 +- contrib/utils.sh | 2 +- controller/Dockerfile | 2 +- controller/deis/__init__.py | 2 +- database/Dockerfile | 2 +- deisctl/client/client.go | 2 +- deisctl/deis-version | 2 +- docs/_includes/_get-the-source.rst | 2 +- docs/installing_deis/install-deisctl.rst | 10 +- docs/installing_deis/install-platform.rst | 2 +- docs/managing_deis/upgrading-deis.rst | 14 +-- docs/reference/api-v1.7.rst | 84 ++++++++--------- docs/troubleshooting_deis/index.rst | 2 +- logger/image/Dockerfile | 2 +- logspout/image/Dockerfile | 2 +- publisher/image/Dockerfile | 2 +- registry/Dockerfile | 2 +- router/Dockerfile | 2 +- store/base/Dockerfile | 2 +- version/version.go | 2 +- 26 files changed, 168 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d29275b3c9..60396c9f6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,94 @@ +### v1.12.3 -> v1.13.0 + +#### Features + + - [`3181b2d`](https://github.com/deis/deis/commit/3181b2d4c70c8827bc7b5e9bf6bba4950f8a7b37) client: document deis version + - [`6ec3e06`](https://github.com/deis/deis/commit/6ec3e06702714f4529d4383e3ab063d062d927af) controller: add simple health check view + - [`42464a2`](https://github.com/deis/deis/commit/42464a2d951c1890d384b0c6a2be5ed1939955da) contrib: graceful shutdown for non-ceph nodes + - [`d7fe142`](https://github.com/deis/deis/commit/d7fe142a78b020e6b78e1397e9a2f04123a9960b) contrib/linode: allow for cluster expansion and standardize scripts + - [`3f4e25a`](https://github.com/deis/deis/commit/3f4e25ab269eb32b7d48cea7b234a727a2555986) router: make vhost_traffic_status_zone configurable + +#### Fixes + + - [`e2aeace`](https://github.com/deis/deis/commit/e2aeaced2303172cac196ceab3075d2a37c5edc5) logspout: discover logger connection continuously + - [`3052fe6`](https://github.com/deis/deis/commit/3052fe6707708b8207cbba3e7437142545f87caf) controller: prevent overlapping config:set operations + - [`040f90d`](https://github.com/deis/deis/commit/040f90df79648a959d1bd339163784a45f20bd89) client: only delete local ~/.deis/client.json if cancelling logged in user + - [`67090ae`](https://github.com/deis/deis/commit/67090ae58c5cd2c3c5640162a3d2c3f542c59e10) controller: use django HttpResponse for logs + - [`17da397`](https://github.com/deis/deis/commit/17da397b3fc9b961381ca34baed639f9e54746df) controller: use double quotes to escape ENV values + - [`d481c4c`](https://github.com/deis/deis/commit/d481c4c35a36dd5258283636127869aef0c18a60) api: disable adding wildcard certificates + - [`ad558e4`](https://github.com/deis/deis/commit/ad558e4bec7d3f17785e78d647267350316bba18) auth: return a 409 if a user is cancelled that has apps + - [`2cf9205`](https://github.com/deis/deis/commit/2cf92051ee86146884c4d9bc968d3783585cde3d) setup-node.sh: update packages for a Jenkins node + - [`46bbba7`](https://github.com/deis/deis/commit/46bbba731280cbe381b914cdd39b42b3dc3bddfb) router: Allow for comma-delimited X-Forwarded-Proto + - [`8f0119f`](https://github.com/deis/deis/commit/8f0119f9303ad83df6a795832da163f72a89f9b0) controller: tag keys can be lowercase or capital + - [`ba38edc`](https://github.com/deis/deis/commit/ba38edc8e4f320996780fd6c8d76336364870c55) builder: fail on piped command + - [`78a16fb`](https://github.com/deis/deis/commit/78a16fbeb793310a55b44336df862b7662704ccd) builder: source proxy envvars + - [`35a97b1`](https://github.com/deis/deis/commit/35a97b1a08d98b21cec4d0f022979a5db8b7e355) builder: remove temporary build dir on success + - [`f7099c7`](https://github.com/deis/deis/commit/f7099c70a54b9dd6bf29d393e7e404d2e43c6e3b) builder: log env tcp requests information to debug + - [`1cb11dd`](https://github.com/deis/deis/commit/1cb11ddd5d03468abefacd7bbb2494570749a934) client: simplify URL prefixing + - [`4a9f791`](https://github.com/deis/deis/commit/4a9f791ea39f366a4941b18e0b81472d8ab2dbf3) vagrant: fix Vagrantfile to handle spaces + - [`3275683`](https://github.com/deis/deis/commit/3275683a1a47119232f1171ded579608477fda4f) builder: demote handshake failure log to debug + - [`e0aa2b1`](https://github.com/deis/deis/commit/e0aa2b138c558ce3372983801595f2a19e5a46b6) client: strip controller port when parsing git remotes + - [`112f513`](https://github.com/deis/deis/commit/112f513cecf731cb22c61fe84c4c753af5429c52) controller: do not require slash at the end of the `GET /v1/users` + - [`a450965`](https://github.com/deis/deis/commit/a4509659cb1f9352f619d2fa027e3cccb3b3a434) builder: remove empty newline + - [`7290dd0`](https://github.com/deis/deis/commit/7290dd019d9d228a57a83f7ede812f46f13d79f3) logspout: Truncate lines too big for a single UDP packet + - [`0700028`](https://github.com/deis/deis/commit/07000288742edd43d43a5457ca9e457341be2b80) router: Fix issues establishing real end-client IP + - [`05e4b57`](https://github.com/deis/deis/commit/05e4b57f35cc4fb736a53f54311212474978bcb8) controller: legacy fix should modify dict instead of dict view + - [`51c6861`](https://github.com/deis/deis/commit/51c686151ce57670f493a95da3d69e2956d96de1) database: bail out if unable to check for existing backups + - [`8b824df`](https://github.com/deis/deis/commit/8b824df1f866491fb55dd166198ee277121b6968) client: backport deis/workflow#280 to v1 + - [`f46b967`](https://github.com/deis/deis/commit/f46b967e9fd7c2260cddad656393d7817bcd0897) tests: remove reference to python client + - [`455e6b0`](https://github.com/deis/deis/commit/455e6b04e30c9ebcd56e25e9e2b6198e3c95efc5) tests: use and patch known "good" version of mock-s3 + - [`481fe6b`](https://github.com/deis/deis/commit/481fe6b1ce0405ef4f0eda73dcc1669edbfe2577) registry: disallow dots in s3 buckets + +#### Documentation + + - [`7703d12`](https://github.com/deis/deis/commit/7703d1287d6bd879fc65465958902b6fd6ca7e56) managing_deis: recommend m3.medium for RDS + - [`1b9facd`](https://github.com/deis/deis/commit/1b9facd36044b59abe4d9ddbd33bebb85fde220a) roadmap: add March meeting archive + - [`48eb886`](https://github.com/deis/deis/commit/48eb88630b442f4e08c67b2c1307bd346e8b0582) contrib: add link to deis-phppgadmin + - [`4009ffd`](https://github.com/deis/deis/commit/4009ffdec6c326c1fa9c01a5a21583548582616e) reference: remove sidenote about pushing only to master + - [`a9a7f33`](https://github.com/deis/deis/commit/a9a7f33ac63085434e3c3aab583b2484c77a9d77) roadmap: add March release planning meeting + - [`997e082`](https://github.com/deis/deis/commit/997e0826392ec8c03d0bcaad04c1092fc3513bc1) Add/Remove hosts: fix wrong filepath to user-data.example + - [`ada6c9c`](https://github.com/deis/deis/commit/ada6c9c96798e96f4cba683b1282c4b6d4605a73) managing_deis: add workaround for cephless cluster + - [`f04ed12`](https://github.com/deis/deis/commit/f04ed124f857a52c4b1e37be943e11e7839203a0) managing_deis: update Sematext agent name and URL + - [`3faf421`](https://github.com/deis/deis/commit/3faf42182004056423039a65b3a2f8fa4470d619) installing_deis: Add parameter description about publicDomainName. + - [`2520e54`](https://github.com/deis/deis/commit/2520e543be81f8a9f6ac1bf9f61e0eaf6d2b10f7) roadmap: add January 2016 meeting + archive + - [`ee77077`](https://github.com/deis/deis/commit/ee77077de6ef7a979a91a63749e5659b43ef2589) roadmap: add December 2015 and January 2016 meetings + +#### Maintenance + + - [`5c8d0c4`](https://github.com/deis/deis/commit/5c8d0c4bda4c3de31dd315b98561f0966115a614) reqs: update docker-py to 1.7.2 + - [`a5e065f`](https://github.com/deis/deis/commit/a5e065f6e483d7139088dc8f60c2c8f671ca5718) build.sh: remove unused git install + - [`4ad3329`](https://github.com/deis/deis/commit/4ad3329ef6ef61f193b7da227072b7a2bbc51dbd) requirements: remove obsolete marathon lib + - [`52e96a5`](https://github.com/deis/deis/commit/52e96a5c193677976c4809292bfa464889f55de2) (all): update base to alpine:3.3 + - [`1a79431`](https://github.com/deis/deis/commit/1a794318d0bbafa4755beb1578cd0a983774c19f) (all): bump CoreOS to 899.13.0 + - [`a7ee6cc`](https://github.com/deis/deis/commit/a7ee6cc9ad8e640ef83f63e01f46692e03ded3a4) buildpacks: update heroku-buildpack-java to v44 + - [`02fbaf1`](https://github.com/deis/deis/commit/02fbaf19df415384603b0e528e567b3c6fa7b735) buildpacks: update heroku-buildpack-php to v97 + - [`452a028`](https://github.com/deis/deis/commit/452a02824255ffd71cb41aed0898f73772b31ec6) buildpacks: update heroku-buildpack-ruby to v145 + - [`ab88aaf`](https://github.com/deis/deis/commit/ab88aafd405ac54d98de12ddd23a9526d1c90611) buildpacks: update heroku-buildpack-grails to v20 + - [`408f053`](https://github.com/deis/deis/commit/408f053ce1225ef83f8c48d9adde250be1a7bbd4) buildpacks: update heroku-buildpack-scala to v67 + - [`c23dbff`](https://github.com/deis/deis/commit/c23dbff0ed5f54c4d2710ef965d1a1e93ee59bd8) buildpacks: update heroku-buildpack-multi to v1.0.0 + - [`79d68a3`](https://github.com/deis/deis/commit/79d68a37ed5abda13bc1056099cd7eeea13503b1) buildpacks: update heroku-buildpack-nodejs to v89 + - [`4ef40e6`](https://github.com/deis/deis/commit/4ef40e6923521f313c67993e1ec96e3ae220d1c8) buildpacks: update heroku-buildpack-python to v78 + - [`ee22d78`](https://github.com/deis/deis/commit/ee22d78376f4aa90840834f5085c4ce51f2ddd59) buildpacks: update heroku-buildpack-php to v94 + - [`f448577`](https://github.com/deis/deis/commit/f44857728875cc603fa0fe820a90077671573776) buildpacks: update heroku-buildpack-scala to v66 + - [`c9b0a4c`](https://github.com/deis/deis/commit/c9b0a4c95a394808d8c46d042d06d40c65fb46bd) buildpacks: update heroku-buildpack-nodejs to v88 + - [`df95748`](https://github.com/deis/deis/commit/df957488417543043cb41bcbc051c89d05b30730) buildpacks: update heroku-buildpack-go to v31 + - [`1d8f9cc`](https://github.com/deis/deis/commit/1d8f9cc854a673e6cab1c9b29d41fb26be85ef2a) (all): bump CoreOS to 835.13.0 + - [`c96aad6`](https://github.com/deis/deis/commit/c96aad6d59157d046bfc7172716245dc9f27dd75) requirements: update docker-py to 1.7.0 + - [`96796c6`](https://github.com/deis/deis/commit/96796c64c62e5011f5352af325b0e2fb2611840c) buildpacks: update all Heroku buildpacks + - [`3a619bc`](https://github.com/deis/deis/commit/3a619bcd974b6beb32be13643da9a47eb9d20057) (all): remove k8s scheduler code + - [`5c916c8`](https://github.com/deis/deis/commit/5c916c8bd9f75669234c851284c5505cef7691e6) Godeps: bump googleapi, remove unused packages + - [`7c37363`](https://github.com/deis/deis/commit/7c373633f1aaf05741cb5c8f745de587db17212c) (all): bump to CoreOS 835.11.0 + - [`4dac497`](https://github.com/deis/deis/commit/4dac49741901f1a780693d464eea1981ce29f68b) deisctl: update stateless warning message + - [`d88ec07`](https://github.com/deis/deis/commit/d88ec07c99f4ab903fc7d250025146b966aacee8) (all): bump to CoreOS 835.9.0 + - [`31ad174`](https://github.com/deis/deis/commit/31ad17416487d394a8d06f6b262d9ed4eb807020) controller: update docker-py to 1.6.0 + - [`aad62fe`](https://github.com/deis/deis/commit/aad62fedd20acc567d1477c152884de77397ffa1) (all): bump CoreOS to 835.8.0 + +### v1.12.2 -> v1.12.3 + +#### Maintenance + + - [`7356d26`](https://github.com/deis/deis/commit/7356d26adeb2f48d8df82a1d0baa090da7d4bb20) (all): bump CoreOS to 835.12.0 + ### v1.12.1 -> v1.12.2 #### Fixes diff --git a/README.md b/README.md index 37e59ecdd6..b56ace1fd5 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. [![Build Status](https://ci.deis.io/buildStatus/icon?job=test-acceptance)](https://ci.deis.io/job/test-acceptance/) -[![Current Release](http://img.shields.io/badge/release-v1.12.3-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.12.3) +[![Current Release](http://img.shields.io/badge/release-v1.13.0-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.0) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) ![Deis Graphic](https://s3-us-west-2.amazonaws.com/deis-images/deis-graphic.png) diff --git a/builder/rootfs/Dockerfile b/builder/rootfs/Dockerfile index c0580cc326..16ae577ae0 100644 --- a/builder/rootfs/Dockerfile +++ b/builder/rootfs/Dockerfile @@ -61,4 +61,4 @@ RUN passwd -u git COPY . / -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/builder/rootfs/usr/local/src/slugbuilder/Dockerfile b/builder/rootfs/usr/local/src/slugbuilder/Dockerfile index 72cd4a4ccb..d4a8c23a4c 100644 --- a/builder/rootfs/usr/local/src/slugbuilder/Dockerfile +++ b/builder/rootfs/usr/local/src/slugbuilder/Dockerfile @@ -11,4 +11,4 @@ ADD ./builder/ /tmp/builder RUN /tmp/builder/install-buildpacks ENTRYPOINT ["/tmp/builder/build.sh"] -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/builder/rootfs/usr/local/src/slugrunner/Dockerfile b/builder/rootfs/usr/local/src/slugrunner/Dockerfile index fd3638c4e3..435dd50f21 100644 --- a/builder/rootfs/usr/local/src/slugrunner/Dockerfile +++ b/builder/rootfs/usr/local/src/slugrunner/Dockerfile @@ -17,7 +17,7 @@ USER slug ENV HOME /app ENTRYPOINT ["/runner/init"] -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 ONBUILD RUN mkdir -p /app ONBUILD WORKDIR /app diff --git a/client/deis-version b/client/deis-version index a4ab692a5f..feaae22bac 100644 --- a/client/deis-version +++ b/client/deis-version @@ -1 +1 @@ -1.13.0-dev +1.13.0 diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index 0b809dea24..59f4f46028 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -103,7 +103,7 @@ coreos: [Service] Type=oneshot - ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.12.3' + ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.0' - name: increase-nf_conntrack-connections.service command: start content: | @@ -117,7 +117,7 @@ coreos: write_files: - path: /etc/deis-release content: | - DEIS_RELEASE=v1.12.3 + DEIS_RELEASE=v1.13.0 - path: /etc/motd content: " \e[31m* * \e[34m* \e[32m***** \e[39mddddd eeeeeee iiiiiii ssss\n\e[31m* * \e[34m* * \e[32m* * \e[39md d e e i s s\n \e[31m* * \e[34m***** \e[32m***** \e[39md d e i s\n\e[32m***** \e[31m* * \e[34m* \e[39md d e i s\n\e[32m* * \e[31m* * \e[34m* * \e[39md d eee i sss\n\e[32m***** \e[31m* * \e[34m***** \e[39md d e i s\n \e[34m* \e[32m***** \e[31m* * \e[39md d e i s\n \e[34m* * \e[32m* * \e[31m* * \e[39md d e e i s s\n\e[34m***** \e[32m***** \e[31m* * \e[39mddddd eeeeeee iiiiiii ssss\n\n\e[39mWelcome to Deis\t\t\tPowered by Core\e[38;5;45mO\e[38;5;206mS\e[39m\n" - path: /etc/profile.d/nse-function.sh diff --git a/contrib/utils.sh b/contrib/utils.sh index 0a87d273b3..13c1b9afe8 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -14,4 +14,4 @@ function echo_green { export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} export COREOS_VERSION=${COREOS_VERSION:-899.13.0} -export DEIS_RELEASE=1.13.0-dev +export DEIS_RELEASE=1.13.0 diff --git a/controller/Dockerfile b/controller/Dockerfile index 7fd54dfc07..ec1460d1f0 100644 --- a/controller/Dockerfile +++ b/controller/Dockerfile @@ -29,4 +29,4 @@ ADD . /app # Create static resources RUN /app/manage.py collectstatic --settings=deis.settings --noinput -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/controller/deis/__init__.py b/controller/deis/__init__.py index 6afea93ae6..464bf376ad 100644 --- a/controller/deis/__init__.py +++ b/controller/deis/__init__.py @@ -6,4 +6,4 @@ from __future__ import absolute_import -__version__ = '1.13.0-dev' +__version__ = '1.13.0' diff --git a/database/Dockerfile b/database/Dockerfile index 412b4ef576..01b0f3b61e 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -20,4 +20,4 @@ CMD ["/app/bin/boot"] EXPOSE 5432 ADD . /app -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/deisctl/client/client.go b/deisctl/client/client.go index b70d62c71d..b74f0a6b0c 100644 --- a/deisctl/client/client.go +++ b/deisctl/client/client.go @@ -273,7 +273,7 @@ Usage: Options: -p --path= where to save unit files [default: $HOME/.deis/units] -t --tag= git tag, branch, or SHA to use when downloading unit files - [default: master] + [default: v1.13.0] ` // parse command-line arguments args, err := docopt.Parse(usage, argv, true, "", false) diff --git a/deisctl/deis-version b/deisctl/deis-version index a4ab692a5f..feaae22bac 100644 --- a/deisctl/deis-version +++ b/deisctl/deis-version @@ -1 +1 @@ -1.13.0-dev +1.13.0 diff --git a/docs/_includes/_get-the-source.rst b/docs/_includes/_get-the-source.rst index 40b72e4c18..6ae8a667b0 100644 --- a/docs/_includes/_get-the-source.rst +++ b/docs/_includes/_get-the-source.rst @@ -6,7 +6,7 @@ this documentation. Download an archive file from the `releases page`_, or use $ git clone https://github.com/deis/deis.git $ cd deis - $ git checkout v1.12.3 + $ git checkout v1.13.0 Check out the latest Deis release, rather than using the default (master). diff --git a/docs/installing_deis/install-deisctl.rst b/docs/installing_deis/install-deisctl.rst index 735f3b5484..2ebfa1a66a 100644 --- a/docs/installing_deis/install-deisctl.rst +++ b/docs/installing_deis/install-deisctl.rst @@ -18,11 +18,11 @@ and run the latest installer: .. code-block:: console $ cd ~/bin - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.3 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.0 $ # on CoreOS, add "sudo" to install to /opt/bin/deisctl - $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.12.3 + $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.0 -This installs ``deisctl`` version 1.12.3 to the current directory, and downloads the matching +This installs ``deisctl`` version 1.13.0 to the current directory, and downloads the matching Deis systemd unit files used to schedule the components. Link ``deisctl`` into /usr/local/bin, so it will be in your ``$PATH``: @@ -33,10 +33,10 @@ it will be in your ``$PATH``: To change installation options, save the installer directly: .. image:: download-linux-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.12.3-linux-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.0-linux-amd64.run .. image:: download-osx-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.12.3-darwin-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.0-darwin-amd64.run Then run the downloaded file as a shell script. Append ``--help`` to see what options are available. diff --git a/docs/installing_deis/install-platform.rst b/docs/installing_deis/install-platform.rst index a00790aa08..499bdc0677 100644 --- a/docs/installing_deis/install-platform.rst +++ b/docs/installing_deis/install-platform.rst @@ -14,7 +14,7 @@ First check that you have ``deisctl`` installed and the version is correct. .. code-block:: console $ deisctl --version - 1.12.3 + 1.13.0 If not, follow instructions to :ref:`install_deisctl`. diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index 62dcccb1b9..f75713729e 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -41,10 +41,10 @@ Finally, update ``deisctl`` to the new version and reinstall: .. code-block:: console - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.3 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.0 $ deisctl --version # should match the desired platform - 1.12.3 - $ deisctl config platform set version=v1.12.3 + 1.13.0 + $ deisctl config platform set version=v1.13.0 $ deisctl install platform $ deisctl start platform @@ -99,11 +99,11 @@ to. Care should be taken not to overwrite the existing ``deisctl`` version. .. code-block:: console $ mkdir /tmp/upgrade - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.12.3 /tmp/upgrade + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.0 /tmp/upgrade $ /tmp/upgrade/deisctl --version # should match the desired platform - 1.12.3 + 1.13.0 $ /tmp/upgrade/deisctl refresh-units - $ /tmp/upgrade/deisctl config platform set version=v1.12.3 + $ /tmp/upgrade/deisctl config platform set version=v1.13.0 Now it is possible to prepare the cluster for the upgrade using the old ``deisctl`` binary. This command will shutdown and uninstall all components of the cluster except the router and publisher. This means your services should still be @@ -128,7 +128,7 @@ If the process were to fail, the old version can be restored manually by reinsta $ /tmp/upgrade/deisctl stop platform $ /tmp/upgrade/deisctl uninstall platform - $ /tmp/upgrade/deisctl config platform set version=v1.12.3 + $ /tmp/upgrade/deisctl config platform set version=v1.13.0 $ /opt/bin/deisctl refresh-units $ /opt/bin/deisctl install platform $ /opt/bin/deisctl start platform diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index 971db89929..150427cbcd 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -51,7 +51,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -89,7 +89,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json {"token": "abc123"} @@ -112,7 +112,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Regenerate Token ```````````````` @@ -144,7 +144,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json {"token": "abc123"} @@ -182,7 +182,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Applications @@ -206,7 +206,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -252,7 +252,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -283,7 +283,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 List Application Details @@ -303,7 +303,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -367,7 +367,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: text/plain 16:51:14 deis[api]: test created initial release @@ -392,7 +392,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json [0, "hi\n"] @@ -419,7 +419,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -452,7 +452,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -497,7 +497,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -527,7 +527,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Containers @@ -551,7 +551,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -591,7 +591,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -631,7 +631,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json [ @@ -666,7 +666,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json [ @@ -701,7 +701,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json [ @@ -739,7 +739,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Configuration @@ -763,7 +763,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -801,7 +801,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json X-Deis-Release: 3 @@ -844,7 +844,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json X-Deis-Release: 4 @@ -886,7 +886,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -924,7 +924,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -954,7 +954,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Builds @@ -978,7 +978,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1033,7 +1033,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json X-Deis-Release: 4 @@ -1071,7 +1071,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1133,7 +1133,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1169,7 +1169,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json {"version": 5} @@ -1196,7 +1196,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1238,7 +1238,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1268,7 +1268,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Permissions @@ -1296,7 +1296,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1326,7 +1326,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Remove Application Permission @@ -1346,7 +1346,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 List Administrators ``````````````````` @@ -1365,7 +1365,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { @@ -1408,7 +1408,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Remove User's Administrative Privileges ``````````````````````````````````````` @@ -1431,7 +1431,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Users ----- @@ -1457,7 +1457,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.12.3 + DEIS_PLATFORM_VERSION: 1.13.0 Content-Type: application/json { diff --git a/docs/troubleshooting_deis/index.rst b/docs/troubleshooting_deis/index.rst index 1f7323cbd5..ec6475ef41 100644 --- a/docs/troubleshooting_deis/index.rst +++ b/docs/troubleshooting_deis/index.rst @@ -107,7 +107,7 @@ If you built ``deisctl`` locally or didn't use its installer, you may see an err This is because ``deisctl`` could not find unit files for Deis locally. Run ``deisctl help refresh-units`` to see where ``deisctl`` searches, and then run a command such as -``deisctl refresh-units --tag=v1.12.3``, or set the ``$DEISCTL_UNITS`` environment variable to a directory +``deisctl refresh-units --tag=v1.13.0``, or set the ``$DEISCTL_UNITS`` environment variable to a directory containing the unit files. Other issues diff --git a/logger/image/Dockerfile b/logger/image/Dockerfile index 24068cca50..da60813f69 100644 --- a/logger/image/Dockerfile +++ b/logger/image/Dockerfile @@ -7,4 +7,4 @@ EXPOSE 8088 ADD . / -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/logspout/image/Dockerfile b/logspout/image/Dockerfile index 0e183fb7ee..6b5a34ee89 100644 --- a/logspout/image/Dockerfile +++ b/logspout/image/Dockerfile @@ -6,4 +6,4 @@ CMD ["/bin/logspout"] ADD logspout /bin/logspout -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/publisher/image/Dockerfile b/publisher/image/Dockerfile index 246fb82611..f0f1bc7725 100644 --- a/publisher/image/Dockerfile +++ b/publisher/image/Dockerfile @@ -7,4 +7,4 @@ RUN apk add --no-cache curl ADD bin/publisher /usr/local/bin/publisher ENTRYPOINT ["/usr/local/bin/publisher"] -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/registry/Dockerfile b/registry/Dockerfile index fc3e8bd451..d965bf493f 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile @@ -25,4 +25,4 @@ RUN DOCKER_BUILD=true /app/build.sh ADD . /app -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/router/Dockerfile b/router/Dockerfile index c8e4b60c81..5dfa77b3a3 100644 --- a/router/Dockerfile +++ b/router/Dockerfile @@ -26,4 +26,4 @@ RUN build CMD ["boot"] EXPOSE 80 2222 9090 -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/store/base/Dockerfile b/store/base/Dockerfile index 297d926396..aa37ee868a 100644 --- a/store/base/Dockerfile +++ b/store/base/Dockerfile @@ -9,5 +9,5 @@ RUN DOCKER_BUILD=true /tmp/build.sh # Add shared confd configuration ADD . /app -ENV DEIS_RELEASE 1.13.0-dev +ENV DEIS_RELEASE 1.13.0 diff --git a/version/version.go b/version/version.go index f2b6778704..e53efd424d 100644 --- a/version/version.go +++ b/version/version.go @@ -1,7 +1,7 @@ package version // Version identifies this Deis product revision. -const Version = "1.13.0-dev" +const Version = "1.13.0" // API identifies the latest Deis api verison const APIVersion = "1.7" From 5999c6c1a42fbdecab7a656c636f5bc4b67a7be3 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 6 Apr 2016 11:55:47 -0600 Subject: [PATCH 101/178] chore(release): update version in master to v1.14.0-dev --- builder/rootfs/Dockerfile | 2 +- builder/rootfs/usr/local/src/slugbuilder/Dockerfile | 2 +- builder/rootfs/usr/local/src/slugrunner/Dockerfile | 2 +- client/deis-version | 2 +- controller/Dockerfile | 2 +- controller/deis/__init__.py | 2 +- database/Dockerfile | 2 +- deisctl/client/client.go | 2 +- deisctl/deis-version | 2 +- logger/image/Dockerfile | 2 +- logspout/image/Dockerfile | 2 +- publisher/image/Dockerfile | 2 +- registry/Dockerfile | 2 +- router/Dockerfile | 2 +- store/base/Dockerfile | 2 +- version/version.go | 4 ++-- 16 files changed, 17 insertions(+), 17 deletions(-) diff --git a/builder/rootfs/Dockerfile b/builder/rootfs/Dockerfile index 16ae577ae0..71b105cdb6 100644 --- a/builder/rootfs/Dockerfile +++ b/builder/rootfs/Dockerfile @@ -61,4 +61,4 @@ RUN passwd -u git COPY . / -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/builder/rootfs/usr/local/src/slugbuilder/Dockerfile b/builder/rootfs/usr/local/src/slugbuilder/Dockerfile index d4a8c23a4c..4fdb19f2ed 100644 --- a/builder/rootfs/usr/local/src/slugbuilder/Dockerfile +++ b/builder/rootfs/usr/local/src/slugbuilder/Dockerfile @@ -11,4 +11,4 @@ ADD ./builder/ /tmp/builder RUN /tmp/builder/install-buildpacks ENTRYPOINT ["/tmp/builder/build.sh"] -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/builder/rootfs/usr/local/src/slugrunner/Dockerfile b/builder/rootfs/usr/local/src/slugrunner/Dockerfile index 435dd50f21..3684a27e1d 100644 --- a/builder/rootfs/usr/local/src/slugrunner/Dockerfile +++ b/builder/rootfs/usr/local/src/slugrunner/Dockerfile @@ -17,7 +17,7 @@ USER slug ENV HOME /app ENTRYPOINT ["/runner/init"] -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev ONBUILD RUN mkdir -p /app ONBUILD WORKDIR /app diff --git a/client/deis-version b/client/deis-version index feaae22bac..2f2e08cfa3 100644 --- a/client/deis-version +++ b/client/deis-version @@ -1 +1 @@ -1.13.0 +1.14.0-dev diff --git a/controller/Dockerfile b/controller/Dockerfile index ec1460d1f0..8287484d34 100644 --- a/controller/Dockerfile +++ b/controller/Dockerfile @@ -29,4 +29,4 @@ ADD . /app # Create static resources RUN /app/manage.py collectstatic --settings=deis.settings --noinput -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/controller/deis/__init__.py b/controller/deis/__init__.py index 464bf376ad..7246dfa82e 100644 --- a/controller/deis/__init__.py +++ b/controller/deis/__init__.py @@ -6,4 +6,4 @@ from __future__ import absolute_import -__version__ = '1.13.0' +__version__ = '1.14.0-dev' diff --git a/database/Dockerfile b/database/Dockerfile index 01b0f3b61e..7d9a88e56c 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -20,4 +20,4 @@ CMD ["/app/bin/boot"] EXPOSE 5432 ADD . /app -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/deisctl/client/client.go b/deisctl/client/client.go index b74f0a6b0c..b70d62c71d 100644 --- a/deisctl/client/client.go +++ b/deisctl/client/client.go @@ -273,7 +273,7 @@ Usage: Options: -p --path= where to save unit files [default: $HOME/.deis/units] -t --tag= git tag, branch, or SHA to use when downloading unit files - [default: v1.13.0] + [default: master] ` // parse command-line arguments args, err := docopt.Parse(usage, argv, true, "", false) diff --git a/deisctl/deis-version b/deisctl/deis-version index feaae22bac..2f2e08cfa3 100644 --- a/deisctl/deis-version +++ b/deisctl/deis-version @@ -1 +1 @@ -1.13.0 +1.14.0-dev diff --git a/logger/image/Dockerfile b/logger/image/Dockerfile index da60813f69..ab31ee7d0d 100644 --- a/logger/image/Dockerfile +++ b/logger/image/Dockerfile @@ -7,4 +7,4 @@ EXPOSE 8088 ADD . / -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/logspout/image/Dockerfile b/logspout/image/Dockerfile index 6b5a34ee89..1fb9005158 100644 --- a/logspout/image/Dockerfile +++ b/logspout/image/Dockerfile @@ -6,4 +6,4 @@ CMD ["/bin/logspout"] ADD logspout /bin/logspout -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/publisher/image/Dockerfile b/publisher/image/Dockerfile index f0f1bc7725..dc2112765d 100644 --- a/publisher/image/Dockerfile +++ b/publisher/image/Dockerfile @@ -7,4 +7,4 @@ RUN apk add --no-cache curl ADD bin/publisher /usr/local/bin/publisher ENTRYPOINT ["/usr/local/bin/publisher"] -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/registry/Dockerfile b/registry/Dockerfile index d965bf493f..47b1552d23 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile @@ -25,4 +25,4 @@ RUN DOCKER_BUILD=true /app/build.sh ADD . /app -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/router/Dockerfile b/router/Dockerfile index 5dfa77b3a3..b007937dcb 100644 --- a/router/Dockerfile +++ b/router/Dockerfile @@ -26,4 +26,4 @@ RUN build CMD ["boot"] EXPOSE 80 2222 9090 -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/store/base/Dockerfile b/store/base/Dockerfile index aa37ee868a..b04756d1e6 100644 --- a/store/base/Dockerfile +++ b/store/base/Dockerfile @@ -9,5 +9,5 @@ RUN DOCKER_BUILD=true /tmp/build.sh # Add shared confd configuration ADD . /app -ENV DEIS_RELEASE 1.13.0 +ENV DEIS_RELEASE 1.14.0-dev diff --git a/version/version.go b/version/version.go index e53efd424d..573fb3edd2 100644 --- a/version/version.go +++ b/version/version.go @@ -1,7 +1,7 @@ package version // Version identifies this Deis product revision. -const Version = "1.13.0" +const Version = "1.14.0-dev" -// API identifies the latest Deis api verison +// APIVersion identifies the latest Deis api verison const APIVersion = "1.7" From 51693fbecfaf1546b9675784c5258ed3a3e5defe Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 7 Apr 2016 15:41:57 -0600 Subject: [PATCH 102/178] chore(*): bump CoreOS to 899.15.0 Contains two bug fixes, see https://coreos.com/releases/#899.15.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/baremetal.rst | 2 +- docs/installing_deis/gce.rst | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 8daa881d2e..1ec23e9673 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "899.13.0" + "value": "899.15.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 763141e15f..1e98e8bf04 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='899.13.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='899.15.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index 13c1b9afe8..e861c383b4 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-899.13.0} +export COREOS_VERSION=${COREOS_VERSION:-899.15.0} export DEIS_RELEASE=1.13.0 diff --git a/docs/installing_deis/baremetal.rst b/docs/installing_deis/baremetal.rst index 1cc4aa33a8..d11207a07e 100644 --- a/docs/installing_deis/baremetal.rst +++ b/docs/installing_deis/baremetal.rst @@ -94,7 +94,7 @@ Start the installation .. code-block:: console - coreos-install -C stable -c /tmp/config -d /dev/sda -V 899.13.0 + coreos-install -C stable -c /tmp/config -d /dev/sda -V 899.15.0 This will install the latest `CoreOS`_ stable release that has been known to work diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 708180859b..ecdc64a3ca 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-899-13-0-v20160323 \ + --image coreos-stable-899-15-0-v20160405 \ --image-project coreos-cloud; done From 4e34481d5f8fae897d45b75c0b562b6044e3b0bc Mon Sep 17 00:00:00 2001 From: Laurent Jalbert-Simard Date: Wed, 27 Apr 2016 16:27:16 -0400 Subject: [PATCH 103/178] imp(publisher): concurrent polling --- publisher/server/publisher.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/publisher/server/publisher.go b/publisher/server/publisher.go index fa1673a804..0bad65735d 100644 --- a/publisher/server/publisher.go +++ b/publisher/server/publisher.go @@ -75,10 +75,17 @@ func (s *Server) Poll(ttl time.Duration) { if err != nil { log.Fatal(err) } + var wg sync.WaitGroup for _, container := range containers { - // send container to channel for processing - s.publishContainer(&container, ttl) + wg.Add(1) + go func(container docker.APIContainers, ttl time.Duration) { + defer wg.Done() + // send container to channel for processing + s.publishContainer(&container, ttl) + }(container, ttl) } + // Wait for all publish operations to complete. + wg.Wait() } // getContainer retrieves a container from the docker client based on id From c636ca6a76bf195aaff637306faf7ec3d3433dcf Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Thu, 28 Apr 2016 13:16:00 -0700 Subject: [PATCH 104/178] chore(roadmap): update for May planning meeting --- docs/roadmap/planning.rst | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index 6951789b95..81d8de077f 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,27 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -April 2016 -~~~~~~~~~~ + +May 2016 +~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, April 7th** at **12pm MST/1900 UTC**. The `event`_ can be added +**Thursday, May 5th** at **12pm MDT/1900 UTC**. The `event`_ can be added directly to your calendar. +April 2016 (Deis LTS Release) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Intro +- Move to Slack https://slack.deis.io +- Notes on Deis Workflow Beta +- Road to Workflow Stable +- Deis Workflow e2e Testing and Improvements +- LTS Release (v1.13.0) for Deis v1 +- Call for Community Demos! + +Archive: https://www.youtube.com/watch?v=72g9PxiR0iU + March 2016 (Deis v2 Beta) ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -135,7 +149,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/6tfAEE +.. _`event`: https://goo.gl/lc8rwf .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From 2f55694ab6ccc4a5308e166f9b1e36a3cc558428 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 26 Apr 2016 19:08:55 -0600 Subject: [PATCH 105/178] chore(tests): update test-etcd to v2.2.3 This matches the version shipped in CoreOS 899.15.0. --- tests/fixtures/test-etcd/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fixtures/test-etcd/Dockerfile b/tests/fixtures/test-etcd/Dockerfile index 75532441c3..5f77cfc787 100644 --- a/tests/fixtures/test-etcd/Dockerfile +++ b/tests/fixtures/test-etcd/Dockerfile @@ -5,7 +5,7 @@ RUN apk add --no-cache curl tar # ETCD_VERSION is actually used by the etcd daemon, and causes an issue if we # format it for our use here. So, we call this something else. -ENV INSTALL_ETCD_VERSION v2.1.2 +ENV INSTALL_ETCD_VERSION v2.2.3 # install etcd and etcdctl RUN curl -sSL https://github.com/coreos/etcd/releases/download/$INSTALL_ETCD_VERSION/etcd-$INSTALL_ETCD_VERSION-linux-amd64.tar.gz \ From d6c581f2fecfc6295242c99447f0351f4595f316 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 25 Apr 2016 20:05:19 -0600 Subject: [PATCH 106/178] chore(buildpacks): update heroku-buildpack-go to v34 See https://github.com/heroku/heroku-buildpack-go/compare/v31...v34 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 4d930f2dab..1c910a0c5b 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v97 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v34 From e27c2ffdc8b99f4d393fb37e141a75d989ddc1b2 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 26 Apr 2016 19:39:07 -0600 Subject: [PATCH 107/178] chore(buildpacks): update heroku-buildpack-nodejs to v90 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v89...v90 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 4d930f2dab..7731b40d9c 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -30,7 +30,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v145 -download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v89 +download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v90 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 From 8fe6112052cb13f41fd22fe3e516170d041ccc18 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Sun, 1 May 2016 21:48:25 -0600 Subject: [PATCH 108/178] chore(buildpacks): update heroku-buildpack-php to v102 See https://github.com/heroku/heroku-buildpack-php/compare/v97...v102 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 4d930f2dab..2cbab28dd2 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v78 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v97 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v102 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v31 From 998295a1d68629101902f242773e552db4ff73b7 Mon Sep 17 00:00:00 2001 From: Josh Mize Date: Tue, 3 May 2016 01:46:26 -0500 Subject: [PATCH 109/178] fix(controller): only load latest config Fix #5017: only load latest config for each app from db to etcd on boot --- .../management/commands/load_db_state_to_etcd.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/controller/api/management/commands/load_db_state_to_etcd.py b/controller/api/management/commands/load_db_state_to_etcd.py index e240a07983..427133d53c 100644 --- a/controller/api/management/commands/load_db_state_to_etcd.py +++ b/controller/api/management/commands/load_db_state_to_etcd.py @@ -1,6 +1,8 @@ +from __future__ import print_function + from django.core.management.base import BaseCommand -from api.models import Key, App, Domain, Certificate, Config +from api.models import Key, App, Domain, Certificate class Command(BaseCommand): @@ -9,8 +11,11 @@ class Command(BaseCommand): """ def handle(self, *args, **options): """Publishes Deis platform state from the database to etcd.""" - print "Publishing DB state to etcd..." - for model in (Key, App, Domain, Certificate, Config): + print("Publishing DB state to etcd...") + for app in App.objects.all(): + app.save() + app.config_set.latest().save() + for model in (Key, Domain, Certificate): for obj in model.objects.all(): obj.save() - print "Done Publishing DB state to etcd." + print("Done Publishing DB state to etcd.") From 112ec7b5ef36db442cc1e7999333c13617e9bc0d Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 4 May 2016 09:13:34 -0600 Subject: [PATCH 110/178] chore(*): bump CoreOS to 899.17.0 See https://coreos.com/releases/#899.17.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/baremetal.rst | 2 +- docs/installing_deis/gce.rst | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 1ec23e9673..53512713d2 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "899.15.0" + "value": "899.17.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 1e98e8bf04..2989588269 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='899.15.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='899.17.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index e861c383b4..a0984dd6bc 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-899.15.0} +export COREOS_VERSION=${COREOS_VERSION:-899.17.0} export DEIS_RELEASE=1.13.0 diff --git a/docs/installing_deis/baremetal.rst b/docs/installing_deis/baremetal.rst index d11207a07e..1931dc179e 100644 --- a/docs/installing_deis/baremetal.rst +++ b/docs/installing_deis/baremetal.rst @@ -94,7 +94,7 @@ Start the installation .. code-block:: console - coreos-install -C stable -c /tmp/config -d /dev/sda -V 899.15.0 + coreos-install -C stable -c /tmp/config -d /dev/sda -V 899.17.0 This will install the latest `CoreOS`_ stable release that has been known to work diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index ecdc64a3ca..10f5e6d169 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-899-15-0-v20160405 \ + --image coreos-stable-899-17-0-v20160504 \ --image-project coreos-cloud; done From c647baa1aa191ed643f9b7a88cefc860138b55ba Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 5 May 2016 11:22:53 -0600 Subject: [PATCH 111/178] chore(buildpacks): update heroku-buildpack-ruby to v146 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v145...v146 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index fb175f520b..21e57bede4 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -29,7 +29,7 @@ download_buildpack() { mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 -download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v145 +download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v146 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v90 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 From 9a6eeb0f9d95f9e29fb6fe176f62d78ef20db05d Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 6 May 2016 10:44:12 -0600 Subject: [PATCH 112/178] fix(Makefile): remove old "go vet" install command --- Makefile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Makefile b/Makefile index a7dd6c23e7..c4488276a3 100644 --- a/Makefile +++ b/Makefile @@ -90,12 +90,10 @@ setup-gotools: go get -u -v github.com/tools/godep go get -u -v github.com/golang/lint/golint go get -u -v golang.org/x/tools/cmd/cover - go get -u -v golang.org/x/tools/cmd/vet setup-root-gotools: # "go vet" and "go cover" must be installed as root on some systems sudo GOPATH=/tmp/tmpGOPATH go get -u -v golang.org/x/tools/cmd/cover - sudo GOPATH=/tmp/tmpGOPATH go get -u -v golang.org/x/tools/cmd/vet sudo rm -rf /tmp/tmpGOPATH test: test-style test-unit test-functional push test-integration From 263aadd48d393b3077e56201bc51950026c8ac1b Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 6 May 2016 13:50:12 -0600 Subject: [PATCH 113/178] chore(release): update version in master to v1.13.1 --- CHANGELOG.md | 17 +++++ README.md | 2 +- contrib/coreos/user-data.example | 4 +- contrib/utils.sh | 2 +- docs/_includes/_get-the-source.rst | 2 +- docs/installing_deis/install-deisctl.rst | 10 +-- docs/installing_deis/install-platform.rst | 2 +- docs/managing_deis/upgrading-deis.rst | 14 ++-- docs/reference/api-v1.7.rst | 84 +++++++++++------------ docs/troubleshooting_deis/index.rst | 2 +- 10 files changed, 78 insertions(+), 61 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60396c9f6a..23cf00b976 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +### v1.13.0 -> v1.13.1 + +#### Fixes + + - [`2a4b9ff`](https://github.com/deis/deis/commit/2a4b9ffd511340ca8a6121a4b11357ebe961e8db) controller: only load latest config + +#### Maintenance + + - [`eb32fb2`](https://github.com/deis/deis/commit/eb32fb2a651fad862003eb9e0093411fefbcd79c) buildpacks: update heroku-buildpack-ruby to v146 + - [`297f885`](https://github.com/deis/deis/commit/297f88518a628094c14a8faed1cb82ff898f567e) buildpacks: update heroku-buildpack-php to v102 + - [`b53d38c`](https://github.com/deis/deis/commit/b53d38cdb2f58d18afd68d64c3bf718d2202e480) buildpacks: update heroku-buildpack-nodejs to v90 + - [`cfff045`](https://github.com/deis/deis/commit/cfff0454649a77ec1640ad4ee1d32b4c6c1cfa39) tests: update test-etcd to v2.2.3 + - [`8257291`](https://github.com/deis/deis/commit/8257291e0c9c03791e105f5d58a2e40c01a190ff) buildpacks: update heroku-buildpack-go to v34 + - [`c8957fc`](https://github.com/deis/deis/commit/c8957fcd69b2248110abad1c3933979c1f88fdb1) (all): bump CoreOS to 899.17.0 + - [`705f736`](https://github.com/deis/deis/commit/705f7363d67d676685bdfaa2dfbb6d0acf475bd6) roadmap: update for May planning meeting + - [`fc65359`](https://github.com/deis/deis/commit/fc65359c2ba5541aadf35836940bf312007956de) (all): bump CoreOS to 899.15.0 + ### v1.12.3 -> v1.13.0 #### Features diff --git a/README.md b/README.md index b56ace1fd5..6e087af03e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. [![Build Status](https://ci.deis.io/buildStatus/icon?job=test-acceptance)](https://ci.deis.io/job/test-acceptance/) -[![Current Release](http://img.shields.io/badge/release-v1.13.0-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.0) +[![Current Release](http://img.shields.io/badge/release-v1.13.1-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.1) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) ![Deis Graphic](https://s3-us-west-2.amazonaws.com/deis-images/deis-graphic.png) diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index 59f4f46028..cd3ef13029 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -103,7 +103,7 @@ coreos: [Service] Type=oneshot - ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.0' + ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.1' - name: increase-nf_conntrack-connections.service command: start content: | @@ -117,7 +117,7 @@ coreos: write_files: - path: /etc/deis-release content: | - DEIS_RELEASE=v1.13.0 + DEIS_RELEASE=v1.13.1 - path: /etc/motd content: " \e[31m* * \e[34m* \e[32m***** \e[39mddddd eeeeeee iiiiiii ssss\n\e[31m* * \e[34m* * \e[32m* * \e[39md d e e i s s\n \e[31m* * \e[34m***** \e[32m***** \e[39md d e i s\n\e[32m***** \e[31m* * \e[34m* \e[39md d e i s\n\e[32m* * \e[31m* * \e[34m* * \e[39md d eee i sss\n\e[32m***** \e[31m* * \e[34m***** \e[39md d e i s\n \e[34m* \e[32m***** \e[31m* * \e[39md d e i s\n \e[34m* * \e[32m* * \e[31m* * \e[39md d e e i s s\n\e[34m***** \e[32m***** \e[31m* * \e[39mddddd eeeeeee iiiiiii ssss\n\n\e[39mWelcome to Deis\t\t\tPowered by Core\e[38;5;45mO\e[38;5;206mS\e[39m\n" - path: /etc/profile.d/nse-function.sh diff --git a/contrib/utils.sh b/contrib/utils.sh index a0984dd6bc..dfc16e5c47 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -14,4 +14,4 @@ function echo_green { export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} export COREOS_VERSION=${COREOS_VERSION:-899.17.0} -export DEIS_RELEASE=1.13.0 +export DEIS_RELEASE=1.13.1 diff --git a/docs/_includes/_get-the-source.rst b/docs/_includes/_get-the-source.rst index 6ae8a667b0..2786e2418e 100644 --- a/docs/_includes/_get-the-source.rst +++ b/docs/_includes/_get-the-source.rst @@ -6,7 +6,7 @@ this documentation. Download an archive file from the `releases page`_, or use $ git clone https://github.com/deis/deis.git $ cd deis - $ git checkout v1.13.0 + $ git checkout v1.13.1 Check out the latest Deis release, rather than using the default (master). diff --git a/docs/installing_deis/install-deisctl.rst b/docs/installing_deis/install-deisctl.rst index 2ebfa1a66a..cac7f59658 100644 --- a/docs/installing_deis/install-deisctl.rst +++ b/docs/installing_deis/install-deisctl.rst @@ -18,11 +18,11 @@ and run the latest installer: .. code-block:: console $ cd ~/bin - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.0 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.1 $ # on CoreOS, add "sudo" to install to /opt/bin/deisctl - $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.0 + $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.1 -This installs ``deisctl`` version 1.13.0 to the current directory, and downloads the matching +This installs ``deisctl`` version 1.13.1 to the current directory, and downloads the matching Deis systemd unit files used to schedule the components. Link ``deisctl`` into /usr/local/bin, so it will be in your ``$PATH``: @@ -33,10 +33,10 @@ it will be in your ``$PATH``: To change installation options, save the installer directly: .. image:: download-linux-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.0-linux-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.1-linux-amd64.run .. image:: download-osx-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.0-darwin-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.1-darwin-amd64.run Then run the downloaded file as a shell script. Append ``--help`` to see what options are available. diff --git a/docs/installing_deis/install-platform.rst b/docs/installing_deis/install-platform.rst index 499bdc0677..bf87ddfde7 100644 --- a/docs/installing_deis/install-platform.rst +++ b/docs/installing_deis/install-platform.rst @@ -14,7 +14,7 @@ First check that you have ``deisctl`` installed and the version is correct. .. code-block:: console $ deisctl --version - 1.13.0 + 1.13.1 If not, follow instructions to :ref:`install_deisctl`. diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index f75713729e..fc6677545d 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -41,10 +41,10 @@ Finally, update ``deisctl`` to the new version and reinstall: .. code-block:: console - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.0 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.1 $ deisctl --version # should match the desired platform - 1.13.0 - $ deisctl config platform set version=v1.13.0 + 1.13.1 + $ deisctl config platform set version=v1.13.1 $ deisctl install platform $ deisctl start platform @@ -99,11 +99,11 @@ to. Care should be taken not to overwrite the existing ``deisctl`` version. .. code-block:: console $ mkdir /tmp/upgrade - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.0 /tmp/upgrade + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.1 /tmp/upgrade $ /tmp/upgrade/deisctl --version # should match the desired platform - 1.13.0 + 1.13.1 $ /tmp/upgrade/deisctl refresh-units - $ /tmp/upgrade/deisctl config platform set version=v1.13.0 + $ /tmp/upgrade/deisctl config platform set version=v1.13.1 Now it is possible to prepare the cluster for the upgrade using the old ``deisctl`` binary. This command will shutdown and uninstall all components of the cluster except the router and publisher. This means your services should still be @@ -128,7 +128,7 @@ If the process were to fail, the old version can be restored manually by reinsta $ /tmp/upgrade/deisctl stop platform $ /tmp/upgrade/deisctl uninstall platform - $ /tmp/upgrade/deisctl config platform set version=v1.13.0 + $ /tmp/upgrade/deisctl config platform set version=v1.13.1 $ /opt/bin/deisctl refresh-units $ /opt/bin/deisctl install platform $ /opt/bin/deisctl start platform diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index 150427cbcd..6984bd7242 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -51,7 +51,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -89,7 +89,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json {"token": "abc123"} @@ -112,7 +112,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Regenerate Token ```````````````` @@ -144,7 +144,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json {"token": "abc123"} @@ -182,7 +182,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Applications @@ -206,7 +206,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -252,7 +252,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -283,7 +283,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 List Application Details @@ -303,7 +303,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -367,7 +367,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: text/plain 16:51:14 deis[api]: test created initial release @@ -392,7 +392,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json [0, "hi\n"] @@ -419,7 +419,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -452,7 +452,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -497,7 +497,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -527,7 +527,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Containers @@ -551,7 +551,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -591,7 +591,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -631,7 +631,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json [ @@ -666,7 +666,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json [ @@ -701,7 +701,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json [ @@ -739,7 +739,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Configuration @@ -763,7 +763,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -801,7 +801,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json X-Deis-Release: 3 @@ -844,7 +844,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json X-Deis-Release: 4 @@ -886,7 +886,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -924,7 +924,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -954,7 +954,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Builds @@ -978,7 +978,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1033,7 +1033,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json X-Deis-Release: 4 @@ -1071,7 +1071,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1133,7 +1133,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1169,7 +1169,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json {"version": 5} @@ -1196,7 +1196,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1238,7 +1238,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1268,7 +1268,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Permissions @@ -1296,7 +1296,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1326,7 +1326,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Remove Application Permission @@ -1346,7 +1346,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 List Administrators ``````````````````` @@ -1365,7 +1365,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { @@ -1408,7 +1408,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Remove User's Administrative Privileges ``````````````````````````````````````` @@ -1431,7 +1431,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Users ----- @@ -1457,7 +1457,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.0 + DEIS_PLATFORM_VERSION: 1.13.1 Content-Type: application/json { diff --git a/docs/troubleshooting_deis/index.rst b/docs/troubleshooting_deis/index.rst index ec6475ef41..e45c8edcb3 100644 --- a/docs/troubleshooting_deis/index.rst +++ b/docs/troubleshooting_deis/index.rst @@ -107,7 +107,7 @@ If you built ``deisctl`` locally or didn't use its installer, you may see an err This is because ``deisctl`` could not find unit files for Deis locally. Run ``deisctl help refresh-units`` to see where ``deisctl`` searches, and then run a command such as -``deisctl refresh-units --tag=v1.13.0``, or set the ``$DEISCTL_UNITS`` environment variable to a directory +``deisctl refresh-units --tag=v1.13.1``, or set the ``$DEISCTL_UNITS`` environment variable to a directory containing the unit files. Other issues From ce3e99d73f45e04be3f5a99ebda6609517e16e61 Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Tue, 10 May 2016 17:22:05 -0700 Subject: [PATCH 114/178] chore(planning): updates for May planning --- docs/roadmap/planning.rst | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index 81d8de077f..0f0a88bbdb 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -31,13 +31,24 @@ Release Planning Meetings are open to the public with access coordinated via the Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -May 2016 -~~~~~~~~ +June 2016 +~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, May 5th** at **12pm MDT/1900 UTC**. The `event`_ can be added +**Thursday, June 2nd** at **12pm MDT/1900 UTC**. The `event`_ can be added directly to your calendar. +May 2016 +~~~~~~~~ + +- Introduction & Community Updates +- LTS Update +- Beta 3 Release and Beta 4 Status +- Helm Update, Helm Classic and Kubernetes Helm +- Wrap-up! + +Archive: https://www.youtube.com/watch?v=Jb-X_yVE2-w + April 2016 (Deis LTS Release) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -149,7 +160,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/lc8rwf +.. _`event`: https://goo.gl/pM1WPk .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From 5f9f68e348e5babea9eb69a13b2608cba4cb3827 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Thu, 12 May 2016 01:33:30 +0800 Subject: [PATCH 115/178] docs(upgrading): clarify AWS-specific instructions --- docs/managing_deis/upgrading-deis.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index fc6677545d..4d4d188ba4 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -58,10 +58,10 @@ Finally, update ``deisctl`` to the new version and reinstall: When upgrading an AWS cluster older than Deis v1.6, a :ref:`migration_upgrade` is preferable. - On AWS, Deis enables the :ref:`PROXY protocol ` by default. - If an in-place upgrade is required, run ``deisctl config router set proxyProtocol=1``, - enable PROXY protocol for ports 80 and 443 on the ELB, add a ``TCP 443:443`` listener, and - change existing targets and health checks from HTTP to TCP. + On AWS, Deis v1.6 and above enables the :ref:`PROXY protocol ` by default. + If an in-place upgrade is required on a cluster running a version older than v1.6, + run ``deisctl config router set proxyProtocol=1``, enable PROXY protocol for ports 80 and + 443 on the ELB, add a ``TCP 443:443`` listener. Upgrade Deis clients ^^^^^^^^^^^^^^^^^^^^ From b081f003773aace2bf291c8b1c7dc57d51adb6e8 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Thu, 12 May 2016 01:37:41 +0800 Subject: [PATCH 116/178] docs(upgrading): clarify AWS ELB notes --- docs/managing_deis/upgrading-deis.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index 4d4d188ba4..041575aca0 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -62,6 +62,12 @@ Finally, update ``deisctl`` to the new version and reinstall: If an in-place upgrade is required on a cluster running a version older than v1.6, run ``deisctl config router set proxyProtocol=1``, enable PROXY protocol for ports 80 and 443 on the ELB, add a ``TCP 443:443`` listener. + + Elastic Load Balancer is set to perform health checks to make sure your instances are alive. + When you take your cluster down, there will be a brief period that your instances will be + marked as ``OutOfService``. If deis-cli can't connect to your cluster, check your EC2 Load + Balancer's health check status in the AWS web console. Wait for the instances to return to + ``InService`` status. Upgrade Deis clients ^^^^^^^^^^^^^^^^^^^^ From 0d6475f60207cfcd41349782d411b3b22f371403 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 1 Jun 2016 12:27:56 -0600 Subject: [PATCH 117/178] chore(*): bump CoreOS to 1010.5.0 See https://coreos.com/releases/#1010.5.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/gce.rst | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 53512713d2..7e6298aeaf 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "899.17.0" + "value": "1010.5.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 2989588269..f3d4a3e170 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='899.17.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='1010.5.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index dfc16e5c47..ca3b3ca5fd 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-899.17.0} +export COREOS_VERSION=${COREOS_VERSION:-1010.5.0} export DEIS_RELEASE=1.13.1 diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 10f5e6d169..2c6bf9745e 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-899-17-0-v20160504 \ + --image coreos-stable-1010-5-0-v20160527 \ --image-project coreos-cloud; done From e8bcd6f4cf43d4afceff98f6bd526c10f5fc974f Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 2 Jun 2016 10:34:35 -0600 Subject: [PATCH 118/178] fix(controller): add deis user to fleet group --- controller/bin/boot | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/controller/bin/boot b/controller/bin/boot index 87bf995fd5..21c7ff53c3 100755 --- a/controller/bin/boot +++ b/controller/bin/boot @@ -86,6 +86,11 @@ if addgroup -g "$(stat -c "%g" /var/run/docker.sock)" docker; then addgroup deis docker fi +# allow deis user permission to fleet +if addgroup -g "$(stat -c "%g" /var/run/fleet.sock)" fleet; then + addgroup deis fleet +fi + # run an idempotent database migration sudo -E -u deis ./manage.py syncdb --migrate --noinput From 09982a239791fa08b53d24269d5a5e7b3230da3f Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 11 May 2016 22:35:45 -0600 Subject: [PATCH 119/178] chore(buildpacks): update heroku-buildpack-go to v41 See https://github.com/heroku/heroku-buildpack-go/compare/v34...v41 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 21e57bede4..c16ac63912 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v102 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v34 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v41 From 0af12ad94b4291e9d34345836c3e179997d31e65 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 2 Jun 2016 13:12:06 -0600 Subject: [PATCH 120/178] chore(buildpacks): update heroku-buildpack-python to v80 See https://github.com/heroku/heroku-buildpack-python/compare/v78...v80 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 21e57bede4..ad4931da63 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -35,7 +35,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-java.git download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 -download_buildpack https://github.com/heroku/heroku-buildpack-python.git v78 +download_buildpack https://github.com/heroku/heroku-buildpack-python.git v80 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v102 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 From 4bceb86ff224189cab1979a2820270088f8bde4a Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 2 Jun 2016 13:10:23 -0600 Subject: [PATCH 121/178] chore(buildpacks): update heroku-buildpack-php to v105 See https://github.com/heroku/heroku-buildpack-php/compare/v102...v105 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index ad4931da63..0e425b2bb0 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v80 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v102 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v105 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v34 From 5885d6bb431414814ccf2aa6c1d94bc7e682b517 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 2 Jun 2016 13:13:30 -0600 Subject: [PATCH 122/178] chore(buildpacks): update heroku-buildpack-scala to v70 See https://github.com/heroku/heroku-buildpack-scala/compare/v67...v70 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 9c679672b0..dec4513687 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -38,5 +38,5 @@ download_buildpack https://github.com/heroku/heroku-buildpack-play.git download_buildpack https://github.com/heroku/heroku-buildpack-python.git v80 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v105 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 -download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v67 +download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v70 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v41 From c22abfb857dd5b863bcf0f36d537234d4a6d1a15 Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Mon, 6 Jun 2016 10:34:09 -0700 Subject: [PATCH 123/178] chore(planning): update for june/july community meetings --- docs/roadmap/planning.rst | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index 0f0a88bbdb..86c17238a6 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,14 +30,24 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. - -June 2016 +July 2016 ~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, June 2nd** at **12pm MDT/1900 UTC**. The `event`_ can be added +**Thursday, July 7nd** at **12pm MDT/1900 UTC**. The `event`_ can be added directly to your calendar. +June 2016 +~~~~~~~~~ + +- Introduction & Community Updates - Gabe Monroy +- Helm Alpha 1 Demo - Michelle Noorali +- How Mozilla uses Deis v1 - Josh Mize +- Deis V1 Maintenance Update - Matt Boersma +- Deis Workflow Release Update - Jason Hansen + +Archive: https://youtu.be/MtGSwsRnpcM + May 2016 ~~~~~~~~ @@ -160,7 +170,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/pM1WPk +.. _`event`: https://goo.gl/82ToK7 .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From 294c59759a1f3dbabfbb8f3a35d96413549e2cd5 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 6 Jun 2016 14:11:15 -0600 Subject: [PATCH 124/178] ref(models): optimize container delete statement Should result in a single large SQL DELETE statement rather than many small ones in a loop. --- controller/api/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/controller/api/models.py b/controller/api/models.py index e69fc5ddc5..87c59bc1e9 100644 --- a/controller/api/models.py +++ b/controller/api/models.py @@ -450,7 +450,8 @@ def _destroy_containers(self, to_destroy): destroy_threads = [Thread(target=c.destroy) for c in to_destroy] [t.start() for t in destroy_threads] [t.join() for t in destroy_threads] - [c.delete() for c in to_destroy if c.state == 'destroyed'] + pks = [c.pk for c in to_destroy if c.state == 'destroyed'] + Container.objects.filter(pk__in=pks).delete() if any(c.state != 'destroyed' for c in to_destroy): err = 'aborting, failed to destroy some containers' log_event(self, err, logging.ERROR) From c5c4c7d26c99fc9fff587bbaee66ff1a1999fc1a Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 16 Jun 2016 11:53:49 -0600 Subject: [PATCH 125/178] Revert "chore(*): bump CoreOS to 1010.5.0" This reverts commit 0d6475f60207cfcd41349782d411b3b22f371403. --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/gce.rst | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 7e6298aeaf..53512713d2 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "1010.5.0" + "value": "899.17.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index f3d4a3e170..2989588269 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='1010.5.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='899.17.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index ca3b3ca5fd..dfc16e5c47 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-1010.5.0} +export COREOS_VERSION=${COREOS_VERSION:-899.17.0} export DEIS_RELEASE=1.13.1 diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 2c6bf9745e..10f5e6d169 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-1010-5-0-v20160527 \ + --image coreos-stable-899-17-0-v20160504 \ --image-project coreos-cloud; done From a2baf6d8bfbd7b0f086cf636cec44ab8f5b5c542 Mon Sep 17 00:00:00 2001 From: Matthew Fisher Date: Fri, 17 Jun 2016 08:41:28 -0700 Subject: [PATCH 126/178] fix(deisctl): replace -c with --cpu-shares --- deisctl/units/deis-builder.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deisctl/units/deis-builder.service b/deisctl/units/deis-builder.service index 99b442ad8c..2da889b24c 100644 --- a/deisctl/units/deis-builder.service +++ b/deisctl/units/deis-builder.service @@ -9,7 +9,7 @@ ExecStartPre=/bin/sh -c "IMAGE=alpine:3.2 && docker inspect deis-builder-data >/ ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/builder` && docker history $IMAGE >/dev/null 2>&1 || flock -w 1200 /var/run/lock/alpine-pull docker pull $IMAGE" ExecStartPre=/bin/sh -c "docker inspect deis-builder >/dev/null 2>&1 && docker rm -f deis-builder || true" ExecStartPre=-/bin/sh -c "/sbin/losetup -f" -ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/builder` && docker run --name deis-builder --rm -p 2223:2223 --volumes-from=deis-builder-data -c 800 -e EXTERNAL_PORT=2223 -e HOST=$COREOS_PRIVATE_IPV4 --privileged -v /etc/environment_proxy:/etc/environment_proxy $IMAGE" +ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/builder` && docker run --name deis-builder --rm -p 2223:2223 --volumes-from=deis-builder-data --cpu-shares 800 -e EXTERNAL_PORT=2223 -e HOST=$COREOS_PRIVATE_IPV4 --privileged -v /etc/environment_proxy:/etc/environment_proxy $IMAGE" ExecStartPost=/bin/sh -c "echo 'Waiting for builder on 2223/tcp...' && until ncat $COREOS_PRIVATE_IPV4 2223 --exec '/usr/bin/echo dummy-value' >/dev/null 2>&1; do sleep 1; done" ExecStop=-/usr/bin/docker stop deis-builder Restart=on-failure From 9d5feab5fbd5f3dcb518ce81ea65ca1310d74421 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 17 Jun 2016 14:20:51 -0600 Subject: [PATCH 127/178] chore(release): update version in master to v1.13.2 --- CHANGELOG.md | 21 ++++++ README.md | 2 +- contrib/coreos/user-data.example | 4 +- contrib/utils.sh | 2 +- docs/_includes/_get-the-source.rst | 2 +- docs/installing_deis/install-deisctl.rst | 10 +-- docs/installing_deis/install-platform.rst | 2 +- docs/managing_deis/upgrading-deis.rst | 14 ++-- docs/reference/api-v1.7.rst | 84 +++++++++++------------ docs/troubleshooting_deis/index.rst | 2 +- 10 files changed, 82 insertions(+), 61 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23cf00b976..0bb84f67ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +### v1.13.1 -> v1.13.2 + +#### Fixes + - [`5888a46`](https://github.com/deis/deis/commit/5888a464c39b10ec236e51d784d7a8752d99980a) deisctl: replace -c with --cpu-shares + - [`bd827ce`](https://github.com/deis/deis/commit/bd827cea49e5ad61b127b0ca824ee81319b6f73e) Makefile: remove old "go vet" install command + +#### Documentation + + - [`62f1696`](https://github.com/deis/deis/commit/62f169691c3b1f6fe7591d88162f63255f866b03) upgrading: clarify AWS-specific instructions + +#### Maintenance + + - [`b795d8d`](https://github.com/deis/deis/commit/b795d8d52975e07164a0628dce14f180888d946c) planning: update for june/july community meetings + - [`6ca0414`](https://github.com/deis/deis/commit/6ca04149b068a166170031991b491b0bcb845b44) buildpacks: update heroku-buildpack-scala to v70 + - [`1d89269`](https://github.com/deis/deis/commit/1d892694cbf3a3f176dc90ad66f4d3efa76abcdc) buildpacks: update heroku-buildpack-php to v105 + - [`750e5e9`](https://github.com/deis/deis/commit/750e5e9e0f9e810ed5ecc2f1f08ba9473cafa7d5) buildpacks: update heroku-buildpack-go to v41 + - [`db9542a`](https://github.com/deis/deis/commit/db9542a6c7e1e87e9bd52b3e87b2ed92e1c19dc4) Revert (all): bump CoreOS to 1010.5.0 + - [`c89e903`](https://github.com/deis/deis/commit/c89e903d28674922d926dea52cef8031d508b6d3) (all): bump CoreOS to 1010.5.0 + - [`885d7ef`](https://github.com/deis/deis/commit/885d7ef297eeffc4343b887120d1bca0a0a04568) buildpacks: update heroku-buildpack-python to v80 + - [`955dcea`](https://github.com/deis/deis/commit/955dcea900d6822590c8bb01bb30d9fbf9190ac6) planning: updates for May planning + ### v1.13.0 -> v1.13.1 #### Fixes diff --git a/README.md b/README.md index 6e087af03e..805ab53a01 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. [![Build Status](https://ci.deis.io/buildStatus/icon?job=test-acceptance)](https://ci.deis.io/job/test-acceptance/) -[![Current Release](http://img.shields.io/badge/release-v1.13.1-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.1) +[![Current Release](http://img.shields.io/badge/release-v1.13.2-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.2) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) ![Deis Graphic](https://s3-us-west-2.amazonaws.com/deis-images/deis-graphic.png) diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index cd3ef13029..4e9267f4d0 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -103,7 +103,7 @@ coreos: [Service] Type=oneshot - ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.1' + ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.2' - name: increase-nf_conntrack-connections.service command: start content: | @@ -117,7 +117,7 @@ coreos: write_files: - path: /etc/deis-release content: | - DEIS_RELEASE=v1.13.1 + DEIS_RELEASE=v1.13.2 - path: /etc/motd content: " \e[31m* * \e[34m* \e[32m***** \e[39mddddd eeeeeee iiiiiii ssss\n\e[31m* * \e[34m* * \e[32m* * \e[39md d e e i s s\n \e[31m* * \e[34m***** \e[32m***** \e[39md d e i s\n\e[32m***** \e[31m* * \e[34m* \e[39md d e i s\n\e[32m* * \e[31m* * \e[34m* * \e[39md d eee i sss\n\e[32m***** \e[31m* * \e[34m***** \e[39md d e i s\n \e[34m* \e[32m***** \e[31m* * \e[39md d e i s\n \e[34m* * \e[32m* * \e[31m* * \e[39md d e e i s s\n\e[34m***** \e[32m***** \e[31m* * \e[39mddddd eeeeeee iiiiiii ssss\n\n\e[39mWelcome to Deis\t\t\tPowered by Core\e[38;5;45mO\e[38;5;206mS\e[39m\n" - path: /etc/profile.d/nse-function.sh diff --git a/contrib/utils.sh b/contrib/utils.sh index dfc16e5c47..2ededad9fd 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -14,4 +14,4 @@ function echo_green { export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} export COREOS_VERSION=${COREOS_VERSION:-899.17.0} -export DEIS_RELEASE=1.13.1 +export DEIS_RELEASE=1.13.2 diff --git a/docs/_includes/_get-the-source.rst b/docs/_includes/_get-the-source.rst index 2786e2418e..a83be05c44 100644 --- a/docs/_includes/_get-the-source.rst +++ b/docs/_includes/_get-the-source.rst @@ -6,7 +6,7 @@ this documentation. Download an archive file from the `releases page`_, or use $ git clone https://github.com/deis/deis.git $ cd deis - $ git checkout v1.13.1 + $ git checkout v1.13.2 Check out the latest Deis release, rather than using the default (master). diff --git a/docs/installing_deis/install-deisctl.rst b/docs/installing_deis/install-deisctl.rst index cac7f59658..8868076d85 100644 --- a/docs/installing_deis/install-deisctl.rst +++ b/docs/installing_deis/install-deisctl.rst @@ -18,11 +18,11 @@ and run the latest installer: .. code-block:: console $ cd ~/bin - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.1 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.2 $ # on CoreOS, add "sudo" to install to /opt/bin/deisctl - $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.1 + $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.2 -This installs ``deisctl`` version 1.13.1 to the current directory, and downloads the matching +This installs ``deisctl`` version 1.13.2 to the current directory, and downloads the matching Deis systemd unit files used to schedule the components. Link ``deisctl`` into /usr/local/bin, so it will be in your ``$PATH``: @@ -33,10 +33,10 @@ it will be in your ``$PATH``: To change installation options, save the installer directly: .. image:: download-linux-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.1-linux-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.2-linux-amd64.run .. image:: download-osx-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.1-darwin-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.2-darwin-amd64.run Then run the downloaded file as a shell script. Append ``--help`` to see what options are available. diff --git a/docs/installing_deis/install-platform.rst b/docs/installing_deis/install-platform.rst index bf87ddfde7..6b11c7ab1d 100644 --- a/docs/installing_deis/install-platform.rst +++ b/docs/installing_deis/install-platform.rst @@ -14,7 +14,7 @@ First check that you have ``deisctl`` installed and the version is correct. .. code-block:: console $ deisctl --version - 1.13.1 + 1.13.2 If not, follow instructions to :ref:`install_deisctl`. diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index 041575aca0..63d39fed87 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -41,10 +41,10 @@ Finally, update ``deisctl`` to the new version and reinstall: .. code-block:: console - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.1 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.2 $ deisctl --version # should match the desired platform - 1.13.1 - $ deisctl config platform set version=v1.13.1 + 1.13.2 + $ deisctl config platform set version=v1.13.2 $ deisctl install platform $ deisctl start platform @@ -105,11 +105,11 @@ to. Care should be taken not to overwrite the existing ``deisctl`` version. .. code-block:: console $ mkdir /tmp/upgrade - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.1 /tmp/upgrade + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.2 /tmp/upgrade $ /tmp/upgrade/deisctl --version # should match the desired platform - 1.13.1 + 1.13.2 $ /tmp/upgrade/deisctl refresh-units - $ /tmp/upgrade/deisctl config platform set version=v1.13.1 + $ /tmp/upgrade/deisctl config platform set version=v1.13.2 Now it is possible to prepare the cluster for the upgrade using the old ``deisctl`` binary. This command will shutdown and uninstall all components of the cluster except the router and publisher. This means your services should still be @@ -134,7 +134,7 @@ If the process were to fail, the old version can be restored manually by reinsta $ /tmp/upgrade/deisctl stop platform $ /tmp/upgrade/deisctl uninstall platform - $ /tmp/upgrade/deisctl config platform set version=v1.13.1 + $ /tmp/upgrade/deisctl config platform set version=v1.13.2 $ /opt/bin/deisctl refresh-units $ /opt/bin/deisctl install platform $ /opt/bin/deisctl start platform diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index 6984bd7242..e444ac4d3e 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -51,7 +51,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -89,7 +89,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json {"token": "abc123"} @@ -112,7 +112,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Regenerate Token ```````````````` @@ -144,7 +144,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json {"token": "abc123"} @@ -182,7 +182,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Applications @@ -206,7 +206,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -252,7 +252,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -283,7 +283,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 List Application Details @@ -303,7 +303,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -367,7 +367,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: text/plain 16:51:14 deis[api]: test created initial release @@ -392,7 +392,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json [0, "hi\n"] @@ -419,7 +419,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -452,7 +452,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -497,7 +497,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -527,7 +527,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Containers @@ -551,7 +551,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -591,7 +591,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -631,7 +631,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json [ @@ -666,7 +666,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json [ @@ -701,7 +701,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json [ @@ -739,7 +739,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Configuration @@ -763,7 +763,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -801,7 +801,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json X-Deis-Release: 3 @@ -844,7 +844,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json X-Deis-Release: 4 @@ -886,7 +886,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -924,7 +924,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -954,7 +954,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Builds @@ -978,7 +978,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1033,7 +1033,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json X-Deis-Release: 4 @@ -1071,7 +1071,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1133,7 +1133,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1169,7 +1169,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json {"version": 5} @@ -1196,7 +1196,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1238,7 +1238,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1268,7 +1268,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Permissions @@ -1296,7 +1296,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1326,7 +1326,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Remove Application Permission @@ -1346,7 +1346,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 List Administrators ``````````````````` @@ -1365,7 +1365,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { @@ -1408,7 +1408,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Remove User's Administrative Privileges ``````````````````````````````````````` @@ -1431,7 +1431,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Users ----- @@ -1457,7 +1457,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.1 + DEIS_PLATFORM_VERSION: 1.13.2 Content-Type: application/json { diff --git a/docs/troubleshooting_deis/index.rst b/docs/troubleshooting_deis/index.rst index e45c8edcb3..087d5f70ac 100644 --- a/docs/troubleshooting_deis/index.rst +++ b/docs/troubleshooting_deis/index.rst @@ -107,7 +107,7 @@ If you built ``deisctl`` locally or didn't use its installer, you may see an err This is because ``deisctl`` could not find unit files for Deis locally. Run ``deisctl help refresh-units`` to see where ``deisctl`` searches, and then run a command such as -``deisctl refresh-units --tag=v1.13.1``, or set the ``$DEISCTL_UNITS`` environment variable to a directory +``deisctl refresh-units --tag=v1.13.2``, or set the ``$DEISCTL_UNITS`` environment variable to a directory containing the unit files. Other issues From 37b9b3f8bcd544079e8999c629af4cd619c48234 Mon Sep 17 00:00:00 2001 From: Paul C Date: Mon, 20 Jun 2016 15:16:44 +0100 Subject: [PATCH 128/178] Adding switches for server tokens and X-Frame-Options header. --- router/rootfs/etc/confd/templates/nginx.conf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 56f8a9b5ce..879c762e02 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -12,6 +12,14 @@ events { http { + # Server signature toggle (default is on) + server_tokens {{ or (getv "/deis/router/serverTokens") "on" }}; + + ## Check to enable X-Frame-Options header to prevent click-jacking + {{ if exists "/deis/router/xFrameOptions" }} + add_header X-Frame-Options {{ getv "/deis/router/xFrameOptions" }}; + {{ end }} + # basic settings vhost_traffic_status_zone shared:vhost_traffic_status:{{ or (getv "/deis/router/trafficStatusZoneSize") "1m" }}; From 0690d20d9c2c4cadf4ca8657faa0eea93e1a8d58 Mon Sep 17 00:00:00 2001 From: Paul C Date: Mon, 20 Jun 2016 15:16:44 +0100 Subject: [PATCH 129/178] feat(router): Switches for server tokens and X-Frame-Options header. --- router/rootfs/etc/confd/templates/nginx.conf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 56f8a9b5ce..879c762e02 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -12,6 +12,14 @@ events { http { + # Server signature toggle (default is on) + server_tokens {{ or (getv "/deis/router/serverTokens") "on" }}; + + ## Check to enable X-Frame-Options header to prevent click-jacking + {{ if exists "/deis/router/xFrameOptions" }} + add_header X-Frame-Options {{ getv "/deis/router/xFrameOptions" }}; + {{ end }} + # basic settings vhost_traffic_status_zone shared:vhost_traffic_status:{{ or (getv "/deis/router/trafficStatusZoneSize") "1m" }}; From c1e1408ad1d5e5580c87d1a058fa5defe810fc9b Mon Sep 17 00:00:00 2001 From: Paul C Date: Mon, 27 Jun 2016 09:11:33 +0100 Subject: [PATCH 130/178] Route documentation update for server tokens and X-Frame-Options. --- docs/customizing_deis/router_settings.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/customizing_deis/router_settings.rst b/docs/customizing_deis/router_settings.rst index e1e1fd07b0..48052ac539 100644 --- a/docs/customizing_deis/router_settings.rst +++ b/docs/customizing_deis/router_settings.rst @@ -70,6 +70,7 @@ setting description /deis/router/maxWorkerConnections maximum number of simultaneous connections that can be opened by a worker process (default: 768) /deis/router/serverNameHashMaxSize nginx server_names_hash_max_size setting (default: 512) /deis/router/serverNameHashBucketSize nginx server_names_hash_bucket_size (default: 64) +/deis/router/serverTokens nginx server_tokens setting (default: not set) /deis/router/sslCert cluster-wide SSL certificate /deis/router/sslCiphers cluster-wide enabled SSL ciphers /deis/router/sslKey cluster-wide SSL private key @@ -86,6 +87,7 @@ setting description /deis/services/* healthy application containers reported by deis/publisher /deis/store/gateway/host host of the store gateway component (set by store-gateway) /deis/store/gateway/port port of the store gateway component (set by store-gateway) +/deis/router/xFrameOptions X-Frame-Options header to prevent click-jacking (default: not set) Valid options: DENY, SAMEORIGIN, ALLOW-FROM uri ======================================= ================================================================================================================================================================================================================================================================================================================================== Using a custom router image From 8c97eab07dbf7b90865e033aa2dca5b8b3460ab3 Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Thu, 16 Jun 2016 16:48:44 -0700 Subject: [PATCH 131/178] chore(roadmap): clarify Deis v1 roadmap status --- docs/roadmap/roadmap.rst | 140 ++++----------------------------------- 1 file changed, 12 insertions(+), 128 deletions(-) diff --git a/docs/roadmap/roadmap.rst b/docs/roadmap/roadmap.rst index 1273bbf6d3..fdc97265bb 100644 --- a/docs/roadmap/roadmap.rst +++ b/docs/roadmap/roadmap.rst @@ -12,135 +12,19 @@ important to the future of Deis. Given the project's rapid :ref:`Release Schedule, ` roadmap items are designed to provide a sense of direction over many releases. -Deis v2 -------- +Deis Workflow +------------- -Much of the Deis team's efforts are focused on Deis v2, which will see the Deis -platform running on Kubernetes. +Much of the Deis team's efforts are focused on Deis Workflow which represents +the next major stable release. For more information about Deis Workflow visit +`https://deis.com, `_ or `https://github.com/deis/workflow, `_. -For details on Deis v2, see the `Deis v2 Design Document`_ -and issues with the `v2`_ tag. +Deis Workflow will follow the same open planning and roadmap process as Deis v1 +published `here, `_. -Etcd Hardening --------------- +Deis v1 Maintenance +------------------- -We have recently seen various issues with etcd performance, which can cause -issues with Deis. We will focus on re-evaluating our implementation and use -of etcd in Deis, with a focus on performance and reliability. - -This feature is tracked as GitHub issue `#4404`_. - -Rigger ------- - -We want the provisioning process of CoreOS hosts to be as smooth as the -``deisctl`` experience when users install and start Deis. We've started working -on a tool called `Rigger`_ which provisions hosts and deploys Deis on -any supported provider. - -We're still defining the interface between Rigger and the provider-specific -provision logic. We'd love input from the community on this discussion in -`#4345`_. - -New Default Scheduler ---------------------- -Deis now has support for Docker Swarm, Apache Mesos, and Google Kubernetes as -application schedulers. With the known limitations of fleet (primarily, not being -a resource-aware scheduler), we should investigate using a different scheduler -as our default. - -This feature is tracked as GitHub issue `#4222`_. - -Permissions and Teams ---------------------- -Deis deployments in larger organizations require more fine-grained control -over users and permissions. Implementation of teams and improved user permissions -are tracked in separate issues: - - - [ ] `Permissions`_ - - [ ] `Teams`_ - -Monitoring & Telemetry ----------------------- -Deis installations today use custom solutions for monitoring, alerting and operational visibility. -Deis will standardize the monitoring interfaces and provide open source agent(s) that can be used to ship telemetry to arbitrary endpoints. - - - [ ] Host Telemetry (cpu, memory, network, disk) - - [ ] Container Telemetry (cpu, memory, network, disk) - - [ ] Platform Telemetry (control plane, data plane) - - [ ] Controller Telemetry (app created, build created, containers scaled) - -This feature is tracked as GitHub issue `#3699`_. - -Internal Service Discovery --------------------------- -To provide a better container networking experience, Deis must provide -internal service discovery for components to coordinate. - -This feature is tracked as GitHub issue `#3072`_. - -Update Service --------------- -Deis must support 100% automated, zero-downtime updates of the control plane. -Like CoreOS, Deis clusters should be attached to an alpha, beta or stable channel and rely on an automatic update mechanism. -To accomplish this, Deis plans to use the `Google Omaha Protocol`_ as implemented by `CoreUpdate`_. - - - [X] `Update client/agent`_ - - [ ] Update server - - [ ] `Automatic CoreOS upgrades`_ - - [ ] CI Integration - -This feature is tracked as GitHub issue `#2106`_. - -Deis Push ---------- -End-users should be able to push Docker-based applications into Deis from their local machine using ``deis push user/app``. -This works around a number of authentication issues with private registries and ``deis pull``. - - - [ ] `Docker Registry v2`_ - - [ ] `Deis Push`_ - -TTY Broker ----------- -Today Deis cannot provide bi-directional streams needed for log tailing and interactive batch processes. -By having the :ref:`Controller` drive a TTY Broker component, Deis can securely open WebSockets -through the routing mesh. - - - [ ] `TTY Broker component`_ - - [ ] `Interactive Deis Run`_ (``deis run bash``) - - [ ] `Log Tailing`_ (``deis logs -f``) - -Service Broker --------------- -In Deis, connections to :ref:`concepts_backing_services` are meant to be explicit and modeled as a series of environment variables. -Deis believes the Cloud Foundry `Service Broker API`_ is the best embodiment of this today. - - - [ ] Deis Addons CLI (deis addons) - - [ ] PostgreSQL Service Broker - - [ ] Redis Service Broker - -This feature is tracked as GitHub issue `#231`_. - -.. _`#231`: https://github.com/deis/deis/issues/231 -.. _`#2106`: https://github.com/deis/deis/issues/2106 -.. _`#3072`: https://github.com/deis/deis/issues/3072 -.. _`#3699`: https://github.com/deis/deis/issues/3699 -.. _`#4222`: https://github.com/deis/deis/issues/4222 -.. _`#4345`: https://github.com/deis/deis/issues/4345 -.. _`#4404`: https://github.com/deis/deis/issues/4404 -.. _`Automatic CoreOS upgrades`: https://github.com/deis/deis/issues/1043 -.. _`CoreUpdate`: https://coreos.com/docs/coreupdate/custom-apps/coreupdate-protocol/ -.. _`Deis Push`: https://github.com/deis/deis/issues/2680 -.. _`Deis v2 Design Document`: https://github.com/deis/deis/issues/4582 -.. _`Docker Registry v2`: https://github.com/deis/deis/issues/3814 -.. _`Google Omaha Protocol`: https://code.google.com/p/omaha/wiki/ServerProtocol -.. _`Interactive Deis Run`: https://github.com/deis/deis/issues/117 -.. _`like CoreOS`: https://coreos.com/releases/ -.. _`Log Tailing`: https://github.com/deis/deis/issues/465 -.. _`Permissions`: https://github.com/deis/deis/issues/4150 -.. _`Rigger`: https://github.com/deis/rigger -.. _`Service Broker API`: http://docs.cloudfoundry.org/services/api.html -.. _`Teams`: https://github.com/deis/deis/issues/4173 -.. _`TTY Broker component`: https://github.com/deis/deis/issues/3808 -.. _`Update client/agent`: https://github.com/deis/deis/issues/3811 -.. _`v2`: https://github.com/deis/deis/labels/v2 +Now that Deis Workflow has seen its first stable release, Deis v1 is officially +under maintenance. We will continue to track upstream CoreOS version bumps, +security patches and patch submissions made by the community. From 0bbe322b3be709dcec6d31d5fb80233c22f00285 Mon Sep 17 00:00:00 2001 From: Paul C Date: Thu, 30 Jun 2016 12:19:20 +0100 Subject: [PATCH 132/178] Drop X-Frame-Options; should be done inside containers by frameworks and other servers. --- docs/customizing_deis/router_settings.rst | 1 - router/rootfs/etc/confd/templates/nginx.conf | 5 ----- 2 files changed, 6 deletions(-) diff --git a/docs/customizing_deis/router_settings.rst b/docs/customizing_deis/router_settings.rst index 48052ac539..551771db19 100644 --- a/docs/customizing_deis/router_settings.rst +++ b/docs/customizing_deis/router_settings.rst @@ -87,7 +87,6 @@ setting description /deis/services/* healthy application containers reported by deis/publisher /deis/store/gateway/host host of the store gateway component (set by store-gateway) /deis/store/gateway/port port of the store gateway component (set by store-gateway) -/deis/router/xFrameOptions X-Frame-Options header to prevent click-jacking (default: not set) Valid options: DENY, SAMEORIGIN, ALLOW-FROM uri ======================================= ================================================================================================================================================================================================================================================================================================================================== Using a custom router image diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 879c762e02..638d23b2f5 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -15,11 +15,6 @@ http { # Server signature toggle (default is on) server_tokens {{ or (getv "/deis/router/serverTokens") "on" }}; - ## Check to enable X-Frame-Options header to prevent click-jacking - {{ if exists "/deis/router/xFrameOptions" }} - add_header X-Frame-Options {{ getv "/deis/router/xFrameOptions" }}; - {{ end }} - # basic settings vhost_traffic_status_zone shared:vhost_traffic_status:{{ or (getv "/deis/router/trafficStatusZoneSize") "1m" }}; From 86d42d7382a7548cfa1bad08e523cc370cb48b2a Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Wed, 6 Jul 2016 13:45:28 +0800 Subject: [PATCH 133/178] optimize png images using zopflipng --- controller/web/static/img/404.png | Bin 5170 -> 2364 bytes controller/web/static/img/aws-ec2.png | Bin 14401 -> 10788 bytes controller/web/static/img/blog-social.png | Bin 3106 -> 1359 bytes controller/web/static/img/cover-image.png | Bin 23015 -> 10660 bytes controller/web/static/img/deis-graphic.png | Bin 29035 -> 23412 bytes controller/web/static/img/deis_builder.png | Bin 28223 -> 13544 bytes controller/web/static/img/deis_logo.png | Bin 10104 -> 7626 bytes controller/web/static/img/favicon.png | Bin 324 -> 245 bytes controller/web/static/img/fork.png | Bin 1731 -> 828 bytes controller/web/static/img/glyphs.png | Bin 3854 -> 1538 bytes controller/web/static/img/large-social.png | Bin 18518 -> 7622 bytes controller/web/static/img/mag_glass.png | Bin 307 -> 249 bytes controller/web/static/img/menu-logo.png | Bin 4609 -> 2865 bytes controller/web/static/img/social.png | Bin 3606 -> 2251 bytes .../managing_deis/DeisLoadBalancerDiagram.png | Bin 154714 -> 137970 bytes docs/understanding_deis/DeisControlPlane.png | Bin 140620 -> 124325 bytes docs/understanding_deis/DeisDataPlane.png | Bin 128625 -> 110011 bytes .../DeisGitPushWorkflow.png | Bin 190468 -> 166680 bytes docs/understanding_deis/DeisRouterMesh.png | Bin 151402 -> 105056 bytes docs/understanding_deis/DeisSystemDiagram.png | Bin 188336 -> 163582 bytes 20 files changed, 0 insertions(+), 0 deletions(-) diff --git a/controller/web/static/img/404.png b/controller/web/static/img/404.png index ca2492b2b3a2543dfb0922dcfac2000a32f6f943..8a89f36a044f409298d088d7ca0358e393c9966b 100644 GIT binary patch literal 2364 zcmb7_c{J2*8^?dM7|X<12YJf&N-;_im24pfjV;;2C?#nymKY2(HQ7d(7E39Eo-C2E zGj^pYuPs}l?CV&vXE2Zcc+Yvy`%mY+{8?h`y;572eL17o4lI)qGoA+*=S$?-^${;*t-8lFu)pP1CaCtm(uI8KV(!pEPWFS zSysn;0Dvb4ZK!`a7&P(14ot}th=h4INYKM2-g1l_NXGH-kJA;qV&g`}6}pkmjEhtd z-8hz~Ksl?|0X}wD%TX)^(hSb?xLezJfG(7;yP@s+p;cSP%>yxxpA)>rR!r48j|i-= zEVc1~sLR-vs7Zm)^Gk)KXX<=Rx2T5z;_=77Y*{t4iIU@KUrNJ$-^50&cO{N^T5sCK zrU}iqesVjaC%sbY1bDU$z9D|U(?Zze4i6m}xugoRaws-6uq*Xd+JUj5wkwiU1Z-5f zvdkq#z>G&E45r;kyY*qbVtX5DvV3T#AJ@Pu)`FM@L#6dl0*(E{^gX83W%*Y@d4fN6 zWt2W?%d_`LA`Mwp9q!I4nSwa_y-)20>LD%oTSrLoTbiElvcHTDc`f=k{nR-92@cbm zrlcRXL0&jLpC~WD3u$lD8k)3-0u4oTVk<&=Mm%CI2>M$h8uFMIy}El*e#N`)f0b%x zw|DySQxYhk-PM81jB9JSysp<_rlhbhI$5dV3}ZMr`fc}&zgTj}P%x+`_d(^|`Q)Mm zxaBKj`ND{Bu6CZ0r8}693j>FdBk_cb-Z9TF1MP=)I0NSn_3>geJ6T_ZMP3Hn3#j^c zO(Pu=(1Ws8oBU=W%zFOL0{81$<>Uc% zV#aq3LGNvch)R6<>j;OSILN(5W-M~ByL?t@{ZdrdP}xcUi5KRB*K6j-q3%w{gDT?B z7UvF}F`cX%URf+(cf&3mYAmd)WXTqC+@<6plv2irwdMU8pV5@yPKaUMw?QFEMfE_)2< z*U!ms>m7xpA>^!bUp*b{)C*%QKPH|&!LXC)jP2@-UJ7#`n$<~5tx_Q+_zI(ZMCmeV zA5$w*NqFBF%kPs=c#~~ugoVT!GqcNc*RZ8J)}?UW#%+lXa}HMOZf2F;%HgU|=in<> zgQPnhI@B1_DkhS9x;243D!dM2V~QuO(J0nS4wu+dNPyf-cJ%a~BdKFKd1Fy31~0*v ziKRhjCiZqMs$G)0m}urI+666S^`EuXz|nMx96fatN%+#axMTxE;?3Sv-xWYLC5040 zkyd844qz(1p!a$C4e?*0rXj(!`g}h=ly!UHNSgCR;cY1}90V2A1OC*uIxN0EBpbCk zO82qkIMNcC)E)oG>;^ecpY_azR--z-K?s#GdnKsi7^6js?dV!Sj8j?pfagP9+Xp4B z2JX#;2%xOv)Boj|+#ol(MPv?&+8bWVzCTR@Q&U`g_PIFc&cTpp{fQ|MYD$5?9kS7< zzXh&>sS&NbLVto2r1z6$8O!ix!Vrkp*!{0Ze&+4^t(4sU$2wd{&*_i)Q~p??(aQ7t zC=D9%PPb{A8&_P*bYMur;MJhjBi`q}%`pfDZ3!Sh(*>yll W*(kpUuIA3~&xAI@7{0xLz4s3_GAAnl literal 5170 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 Sbi9)GxiT>{GblRka_wL3a`OWK diff --git a/controller/web/static/img/aws-ec2.png b/controller/web/static/img/aws-ec2.png index 1d27b839625c942a46ada0bef3bd60afaeae15d5..ae22f28f8805cea637dd116d0d4202fac34ff922 100644 GIT binary patch literal 10788 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 C-N)7d diff --git a/controller/web/static/img/blog-social.png b/controller/web/static/img/blog-social.png index a379db88a924d79c262b43c6927c0d599fe1bd0b..c0e970ebf78c0fab28a52e1b07b2a2119ea4c480 100644 GIT binary patch delta 1351 zcmV-N1-Sa67|#lj8Gi!+007NA9j^cY0x?ibR7L;)|M2tov%c4Wl)PPasY76#I#`$N z`Tm^W_*=^JExYdwu?ELZX?zpYviFe#*P}Wd2)JH4Z;p~2ryFOc)(eV6O$@2xS z?DyW;IU7Eee-1__d+u-aPwC=R$`ThR?@cRCS*!DQS@Oabp?X#%)=j7H-GwrdZ_0-L_ z=lY%B_{#44lYiXz9kuS*SU>;%{_eG^*HSnA`S{gLG1pZ*^2osJsGFy>(f$7ZPHCdP z>iW&^`#ZnzC%Nx_)%DzJRPn{U_~G35+}E_f*HdkzYtQt~@B4+<_IuRz=lA{BR673s z{r>y<*V-tW`^7YitskYMd_4#ej^z{4w*7E!Ut?b-uRqe2( z{POVm<`2JDG^3_W)|Ni~-(aP+tp)0!YklXkA{r_;#^zgv9?XsrY zU`X9Q5(6uCpq5!(P zuT=L1oes(*D}rRqv6Nku2w$*Jnyv(WWFR7M(R*5!hA#FCo%Gh(0uga8$8o8~SZu6IF!aNiwnnz|LK};eXk~ zIwj$;c%ZtbwvG=SQqSqGh=oX0G2ZWvs3HPSijjs!NKG;-1&_^1Gg?~P+B-6$Y(%r7 z#zs|p;bJlhkmfRJA6#78wEqAO2A}S7F6mK+4&%ttV+Ep)pMZ2SJ4%|4Qyn}*ut4cF z&O{|`f#mEtknN7H9&t_gwJ2} zBxgcWG_FJtKt+;%RU;iMeEKzG=+`)-Uz3x54QaY}59rwG0RRw|^UQ$PxLg1L002ov JPDHLkV1f`m9L)d# literal 3106 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 YFzR-51S+1WTm5UtIl5zS*dIRjAGL63TmS$7 diff --git a/controller/web/static/img/cover-image.png b/controller/web/static/img/cover-image.png index 83b7a0a64e04c424eecd23cf7066e91c458dca2f..a16aabc156a51037070ed00ef66416b315101ee1 100644 GIT binary patch delta 4493 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 AI{*Lx delta 16946 zcmZX+bzGFe_cja&Dk>_CwA6}}l1rnYbhmVabncS3fQYn!bSd2_y@0f|wA2C%lETs* z&%OHneSgpUynObL-Fs)|%$##(=DN-~OSbxI751k`w{ftru-?wn6;(Xupa8JbY&3M- zbQBeY%pC1GP0SrlEjZ!!PGA!(ED^X6_}1RS&4eCqZ|C4D1Q%ua+d>F@k9o|+K>xRi zo2@8=j-m>^q@#-kJs;IERBP+= zZlVkf7)k&A`!`VwxXu5Ha&Z06y1*53VZPyd&iRb%-`K#vjv|=HLMk?J3p*Vt8+!`} zS5Sx;KmT))za9R6-~6x0|Es6&|MujDLjUic|JOJF=_$g6S%H)V@ZTl%*js77;o9T%Xn}k5Jld%?6h;g0O$wV79+Os3hzizc ziXKxRM!gMDoWAles4w6XwC7-{w&}=b(oRlyA^K6zS3ey~!uZ@K){FJ%0l;@DSz#Y( znE$2Zb~A3GRAJlJmw_*P+{ePDCMN@qEhW{HUK574Xmn)s{GXZ#qKVuIFToY&8$oQtYX?uP z_ana9b4f|CJm0LWthZ`SuFOCz7J&arLKvLt%=+x?=i(J? zr(3iJ;5oa6XvKit-aW(KsC{OvRVIx^RI2`v%XE~ri~DacIM}JH5gKqG)#I2()kn_p zCOaut`lnU048|B9;JiF8>T3D0KMEibT5krJ6Z9+LyQmRU_P@sBc>Eom@U3Im--AaT zKv)eV@4hk8-+#R_z&7vS@X0b73x7=N-I)O~oIiyr2^AsSFa7%UPGPkG5^m~Ehtpq)tH&USym>YVvN3mh|p`oezo?rcD2NA4YJi&TIL)Sxvd*vi$H%5dlja`E&% z891j7xp!wYMXQ-rDJYt>KI>;&+}s*HH5W36!`B3M=3+Erekm&XBJkRZH$V zWDHH2fpY@D(XVuB3z9qh*J(VL<-vM=o6>`2T)#v=+C+%R%C=L ztFROf(?bSO-bcfbNtRF;qB-j~Xb@+@FMi#>%f6K4z;A8QQi7BE$&NAmX;m|TR6%T- z4aI}AnwEKYHut(r7|qi;BdDhJ*OZ;$96EjKs#CE#8&e78G0ybP7H7-tQ!SKK)`ha@h7;5;(6%V8?+SGlHfs@JXyRMT|Rr7X)RxGM$v+V~5t_ zbHx8uJa7y)+)mQzO|ELa>x|5s^Qfrcsw8VPe!%vSr4UzE>$g$HlZy#Y-pfinlH zY)*C=lWE{JXmtK4<--KjoLYC)3^=?ZXibMuh~n9cUH-3~m6%!l$EOIZ zLr@%{330I!Tew|H;|@3kJ1>kQqh9}d{S5aBvb8SYgOt)j2fWf1ws&!5KEJpe$2gZ( z@8?#VJj$l>fRKJQ*mpCy2mlZ=>C2b9E>*!dV}&P}=9`(<(QI6H2B^UVC2=7y zkA`Hr$OAj-^`xs+- zaMn{(W}F;2S}CL*4=LWi97Xuo$COlVpWWU$gZcgut)WhXdz-iC%1A_g?+cFI+%984 z=F=vf9oIqx9Oa(jJk;Z-g^p?-hp6{V)HY~)#4Tp*V*GGZ*r1OU*^sRhiMw}Oq=v2D zM%`su2kB9ASf>+7h}DISb2kP(m;~&vlYN;-q}eCGZue7Zp<4O5y{&?14B2rcdd7^k z+k8$~QZ$#tXNLRE`Q5wsd9jWbchz^)GCK6YJyM45<;a64@R;HgJz>ErX>#;-Cafw+ zl)vsJt0i9d?5X7rXRS*LM6oJfMs{m|h*v`p_*X#jvu`iB@O{%-726*xeFd<63YtH3 zQpIk!2RjsgV6A&RXdSBFlI0v1{guR#QJ-A_XA0M;w*EIC`j1!avVb>{LSLg!XsqKn zj=B?hc3@H98BMDEAA(Hy439Yh)29VN^qr{C^}u$?WzKlivR?Ifl3BdfClX8SHC=k{ z&)qvNr)5}Un(t-FUHH%(@&$S*j03Srmf4-a?KEXlQCjE`{cZ6_o*u6j97Dy zuEJcAX$K$st}Y*=PW9u_Wj);YtGioTTDtMh@zGIac=*A=PNTnp@d*Tfjqp39sflCV zG1!*Zfa6q)lm`!(#G;la+<;O0^?oBlMMT-93-TbH zVC%;l!kXY2{IjL=?`J?S>m$+60NycMDJm%7T9YXzvqtT8P6!+BIAlwvt8r zwA5%;`7zCBTy3!qw7u>;TV)Bp0&I}q^|R7+pto^c1IhzlFF&-7fuk>HqG`~V&-1eG zYdz>+*Yn<84PJd9lpm(~3F|gJ-u1))c!tQg<_n){U8=F3bP+Z?==Kh|9CBaBo7w8Q z#&(o?8s+ip)1Bb%rs~cQZ(d*>2Rj11e#IdYyiUOa4@Vk`I7&$CkTj!b8Rjhl@DAfUwH=xPrt*oNXw&2jm ziScB`T@Xrq3j|Nih0Mbh;h0N37Nf09PjxCa4-trmvF+ZL-riddot8p?-{Jmo)xG|- z-+7N~P@z~E*B-A%3TZ=YNyWAmaK!Kz>UX5KmH49|!Z64XTKR}Z$xv`)PAs=q`#!U+ z7Ly0sq|;UtsPS_cJQGjrI<%?BlYD=eaJ(R1&!SU>i!FA|@nXDquq*7i3h>>!%XL}w zh$L);`1-^(tf`(2gD*Q?yxU*pJ1^Kp8SohKD`T!^0%nQJ($NYMw9tB$J?0wzm;~y8 z9}V97l0zRb_ddNJ2pGJ4WOhq~h4q-R!MoZ&_u&`6$pzU^7{SjeCd|OR7%*5X&Wdaf zsS?GEVhv)tTJ175L=(!=409p>)CWNr(3}H5HyeomO9s|)PpFMbp`?#2o zCA9kh;-vTAzdnef5%TOee-K#N-W1rrza{q3^e1H)|0hri5UdXJm8nV#U*Cod>?4yW zGq*#(b&!?akgHb5*Uu)<}%KG*EkW*sYu@ zX4Bi9e=%};7gmh08V{0u?M+IuZLSswdsxwU1X125^Ubq+aXeEKf>tIyhIXc)mHF;h zwxgL-(q%k=ZCNB8*F3q=kMENlyPo%a3?%*P_j5+mjJ{ng$_#Zyd$D|SxVRj9_R@X& zE3;W%ckuO&sLigH<@~c}dw*7ego7zKqluhL=N2I1|O?mUmY#4 zDB=(1nf7(vuxi-of>qF`8nB68Jc?wd6)KvNB2duic-g|nZpcs*U_iL_@-p6qtWz)4 zPJPqY4$yWP&FwLtwrpKxe~$BASJPNF4^~JR98#7$zP{YZDbGuAq*8nnEmGgD*kQUM z!(u9GTvm&}QF|K*t-U>QQ~M4EBh2CNo8G6uHm0U`dZ~~H>wS353Wvs%G`6j3%_}^t zFq%WLm_~o>lPXres{Z!s(jzJjwUusDW&3^tK-SJ#kUPIbY?@#&!+IL`jMbg=1fTQT zj-0+f8+%(cAs;V6JV9tH%^TTNFdum-wd-;3+wS|9I&vVhDd zcVSTn6$RYD$9L}xdiZsnljN}z{-Zw_~^uK|~zgjhpG#j2kh&m#{7U9#|a@f~U zoMPK~k{p%;ZBpkrk!@|S=)lt!aEDtk&{oU{hLzHhjXC;iy<%oXzH+PMh?1zj<+%4& zzN|Yn+x=x$EV3XzN8KrHc_xb41{iTK+1;X9|JWJCwE3~5kNj#T$4}T;Y1ad*B1n@y zu2ud`Hu)xTsghTo(Brg#V6%{KqX(PEy|~)VqEf{dwjU36ZyLs&*>BQ^)^fB?Y@^pu zZusKa3uHqv>!2a-)syIppT^f@MVCP@tByIUXI( zC3>REPC25C*3e#7+i_ywUE)pC^5NO#K}iiY@nuU2E^v>bHwM4LwXM2EUwnV5HE^P7 z|AV(lT}w85A-AVCmDzHcS$=XMtkRPwAAR_YTP6~!l!riYM zH8_1%Gq1Hgjmm_#i9KI=dXVpMlJDod@yeTaP6^PKZ)RqHp7*3$ngF?*M7%@l25nAlTr9Mo>dw$Js}#zODJJ(fCXG?x^iyUzItw|J!vStxzRrp|trfZ6q^Z zorog?@zD2nyT~*974p#9M`f-#;KjSG<2h8{a^kp#Yd0c1E|9&j$%THDXgi~xvOH75 zTqEjS3qX<1laL9GAgt9Pf_zm3fpLX(|KHY*+S=d(nW%vnS!i?qB+*7KC%ADqS>s0^ zJB_QQsR0hX`hw;fQNCVz$yF_P95Q?wD?4s~v0j`;R9V(rw^(Y3@j{oBuc9U2ou%Ed zTzMOMtU!Cwmn;Doxu|Bib9j-mH|dnkYOtOkC~2B!U>t-{Vz|wn8=uegm4C3l;9=ve zFbUe_HM^?+yW00%*^jl?(@-X{0gZCaTO0)ofZkVww?~n(^tyyQ6QAPZ4$%sioV(ba zjkpg5v{@Fmm@Gy<6&)z4R$!bwyD~Tpt-}+mr!9z_Bx0qSC63?v{eydYfdT5 z*y0dYeL4LC?~*xtue==%`Bo4>@yF{3O)YL8dau^lQhPvZpT>S1D9NUw0!fiyE&yN6 zT)YXvb<*{kJ5+l6w9veL>y@6BgKG-1prI%S+|S&xDrvy@5Uzkd{Npdjc{RxI{OMdj ztHv-?+CY%)9MLnv$)_BQarI^qE0IL&X>X@_@e*X3i*z$X1|=(05R5bxb+43!!DH(I z0)GSc0b~G=RO;jcu+(-O=h#(&U5&I9^v^PVh9>or6wLXNsjS>!{zRdJ(Ze8sJtK@3 zB<2E;P?!MW6^Gn{KNsYsa-*NKd!}!Q0cVr?&Vjm9{qoEhk!mfKCT%2)WgtH6*Jc9G zDgT{&8^`zbNzjj=C&9OHe(?KwmYrL*K4&?Znmb$R%YpUYyd)8!mIn^jWfSg&h3I#n zBo<6xzB}_xC+j>HxqG!I`ycG|LSL$*K*gI@O{huTU{tm>C)UwdUcaHewA2aV+Dzvz z{l`;&`ZDZH^fwR+Ykcs&!8^*^gZ3&ng`GO-n1|{hi7@0ZdZ-DCtzfkkWN?RLfXk7*{dVb@>$l!Y=-b0|sr#L}hrAFC37S3Bvy@L808 zjS}^E>ghHX{1%6IWD{q$e0dUJeX3Gkww`M$uV5R?Mi&X=KKt0nmMZnfzvMMxiixbA zwrUG2(mvu6>pa3nHs7&YcqF>x!rWl*;O3=`E1oeLUpWTQ?G>h$ms32{qIY9?YFZ?! zp~Yv~)cT<1Yt5zr4|>P!n*kXrlaKany2WDe)gx%@I=jr2GtMg__4Q8jqBE;wJs?M~ zTjBGgMB$<@*~;=iwW68temGk_AR}?ATmRr69Wd>~&3dF%8vRk{eMa}kf$D5uDoYTh ze=D0*7tMtOwG)TVZWsSg(172p(C4>GrDf2Sr0E=A>bdvK+SDN+6j9XXa`(e+aQn9c zH-gN9-mwdwHG&Y?4|O0b$dd25ei0CtW};@iJjNpRr}VNXwlRmXW;Vv- zvvrxDI%0-!@lOt?e-nhIOGy@pSc#SJbu&;kBM9we5^9=9XHN{HEAEuz@ z9^qanVxS$f}e9zxmxb8fWjb)qmia zAwCjs=ev3D^-rbvCOYa}Mr8R>eZ>t;yX|mdn%&n_qt1Jyc~8GlV8<34K38H zCK+^_ut-MpA)v*CTeeac#8CC?tv&19{>*8;`L8eX7ChsBJxIbUuP-HXb{S=vfwo#H zKUeF3ei@c8T3VJ(y`$fO&vKMZ3jwJe4O#pu5c_%^j3cgTgv4@JT0!nMzw({CiI1g}t9J2T)sN^oSNb0n;& zFIO9ehUkH(Z&37pPuJThkI$3drMQ+&#lihT1>tX%h43b8v-duoQUi70uOc2RwY}(q zM(^QS-YFS^sMRD*7RCA$y(vmlW|#n{;0b+P(DwQBf!ewSP1@`Ad#akA>m>T~F|TtL zJ`xWI?7BA$9Mm2>Y#pNw+vA8JHt(WEb)5N_F6wkQ%5}>YgT6R%hgX_BPky?MK#nXb za1%5x2ux?kV%|yuD@2Lac1OgJ#6p{nD)X&~*tAC9_g3mCDKLzt!Ir9=IR>6(+p5c} zh^8Ih#5srU-WENm^Pa#T`9_?1D};L;q1k zA)U>(a78m0T(cqrUYVtA(Bmrqa|G!jOA(TiNU|FW5K7LdI$t=OCi@f(rlcz~jDic6 z4o|o&E-bJ(w6qu3-%TsdmDCuok-B3z5W|waP?yho05=g*V=t}BW-GE#^j^ZPdjy$& zz6wz?#hkkyJ3eYo{fA-DJIV9fzxgJ|)gD;{&5+D?5sf}}#qRXt*W5FBrS4oL)er87 z4!}w&Tz=s>*LaNMxLMY|Y}%RcO6;pqMG{9vl|zyu-e+a}QkpbwDFHJ&BkxHN>0d(1 zG`nPd#ERNY9i6$mtV7hIBZ-} z^zkT}9wY-PzFi@8el1`^v8?&*>9mlVCT6_Q7AMP7n$;k#$gTQoA z{Kn^GPP2^O{K7wF0U-KaD;(zyruU;b8|+Pns%9v@!c!w z9~Q~Dy&>RY{bOf1OPVjPk(kk=H4?bm&v-x${aNj;tUOd{(RX$x5~`kOL3n9slUtxA zs`u6dG4((-uKI|zj!m9HsrCGv2#kNnh7MOAphATwny8k{M{b12RzeS`A!=t4h)1Y2 zK~2Ng3l~QZ#4mRKOjWI3D-nglAQ5}>ljoG&DdD90IoyTk{H%3)^1Q+QzYX_|+VtN3 zE_s}H?-4{D+EhQJC#kg5p}AKQJ|dX$aSgVTT`T$|wDx(so;DR)&Hh&G2SA@dH7@7x z2;hX8(m0#=G&sUtk4#e){GSWzPdH>Bc_*6;xiTu^qgQ zKPRTFj(T$~Z$pT?&mvN~ILbU%J+UX- z#%b0)@#@4<-W|vi2mThGFc(OB!xjzR5(?^0g7R{~{j5(-ihtusB`7}qxR{9UM7v~vS6wRk-| z_H=+n?Y!C>udAvBF)4~OTk|2>|A;|AN|R+RZ(#(8???_Pf;wM?b9LdeIA_wRpzt0+ zrat~gNuhY-=58g}+J+NbokhS>Hksz-OavBE>6Q;P5(5T45}n5@uD-vvQX^Ky(lw}8p-wxGLTw>|apCO3I`4HCr%iNAMzX2X|W zxol&(wCXYrJb0+-uKt%;gbU!Ltu7sC7qdd?^P$c$L5%x;mXhH^;n;y0A77=~QH^_5 zd>h?yQw1+y^5cg3XTip1sU&9r6WRx*-11!Veh?=ww|_%|Qnq?a*dsFg&d0|YDRyPf zs5dJ-4=6$e6uh=iq@qo>YwU&9-1w=5<1Ws)#15!vUgE5l>iOBeOkMDK>&Zbq$!&C^ znvEiurDf!whPF0wDWR6XPr#R!hgFrg`$RIJqv(9hyrJnej`|-Q533#H_HCdqc zb9&PD$DtwdX~e@*6UU*bpRX$D7|_HnG0djaiIb z3(<$_3=6xf;Ml3S(plTKuFYov0o;fwPPlqXCYhi^oO+)Z}I6}@jY)MRIPU1e70>vrTO;E@M#rL{QCggSmH39T-K)^D~XboU%Pq}(G7gW`ww zOkS0)a?vTuNCSUHkh(LaoZ-KwT*YT<*9xwW<#?T4wyao`Nx=O@?o4!>I8|A!(Re}~ zeFn|2yPT!woviLpPITh&uCf|RFD-1m>ToqRu-&_I)6p~}*8j&=Byd!TpCqHg8q9dp z|5K1dsqj6+&sMCqM7Ow=(_|78v<6?mm(TCSFDHEX8Z0YDBL9`VU?Sj&;L|SGnVjix z93Mnu>u^`;Kk8J+u%O&xvb(ls?f>44_)gsh#pYuS=>o&(H;EIM>K#?A^%uM3-w0*w zcTrj*(`i~){z=MYS#0 zoD{e4kTLu!mwdLI1s~tIthJj3E77{zI7l1(qgldQ9lJbgESb(k!K-RoAKInHh=xDX zB+k@=?2}}=TuZ88K8MSi*dm-O+rYV#R8+J8HWgCy)JRawyz!`WbR#Hwz6oKq39P=| zq>ntU=1NyHVmLjEnS!@ww<8^e|I2HG-E)iD^yI?rMUu@tog4PDHK9N+E?X*tfb4Ax7veZ1Hg&k;6yq+jHC zarxQ2kVu?*eF~};^}bJ++r!J} zv{5~O=;^w8kJ*qdP3Or$AI#yoXsG9<-Via5{Nhz(l=u~VrJ?S+EqJG)8Bu>&!b9=m z+(?RJ>b#XuJXo|&RKVlQ9Z_@lW6^l_7J;c!*srVz#%`8QKl97w9&je_WVQ018H}+a zpP<0_%OcH}qqVf+($&(UVA*)V%y^OW$w>rFXRx?P`nY(6`%@)auQ&1tRl3(38&A5f ztI0QN`3sZqR>5j9*H^QEy@*q8(G7@_V*0~IEw2+EYIza2n#PcS8G?nxvhszK|0D=_ zbMfQ}oHG$-E?%POTU^Kj|DID?VDN-Al9{J}Z$H=~mHxXEk;Hasg-Qz_JztZI&~HuA zqv)Ug=2T#dt-ZZTv&NVdenpm1{=1y3C8;V9D_6I!gCX3*6 zvPfpZn{uTeTnQoTjhf-p9ov)kKSPK&Y6&MT$&?<%Yl>gyVIuW2qYnXeBi(S?TQ>gt zj995J%%w8xEFATGyYUhG;~Wl%Kq>t$;pU`eVK7FtXa9LBvxADW#^?a`{>)xkXq$3R z&2XHp^*u`v2erIfE`Hf}6JXvW!G2+(WpgoCDSI^scIV6a$GDwA?V7s7NJo~_R?0}` zQ~q8%=O@Ts3FgJ1gmxf*p1V0bZvxR;x#2&AiO3D$R#wh?;%p5?A8G~Qen zQor45G-bFyShXzx-*8h#cF9bVgUJ?^{(_6Uf~Grg`l}ofyZgezFJ7F|h&aEfyk_k|jcc7UK`r z|ElMVpxpzJ{mLs^tX^hjUbSTs+DfYU0NEqR1#@dy&eLWIs(EiF`!%UlfI(>|U22`# zDpmS2{wAIE*9(QV_8qB%IryM#8n%O5eWAhncfgQ+vuK99MCh-DlE;Lbc~1{%Abzj4 z*HT|ef9pN}0HP0(N(~_gUXy+_#Ir$%m;4ls%ArYO4Us{wVcVc2i`ZC2j7UMw!!B z(Y>4xP<*5?-?N^OOegl9=PE9ImNl2`Cm)^u%H{QaRsC68wL;EX4I|eg`69G9OSMq* zD*#c?>E9}?1#=m13n(g(F;8`LWwG8Gk8H&kw16$UC3?oiq`P!)$ZgbS!vc#Nr;T;p zJMA&@UkHW1RwOh|&6a#j%>vpim#KNBylh!G4>E?PenwzmAG`OIiIg~*WXOqKHmQpg z8!XyDYY6DSvV*F$nGi)XFT%U?0Om2rjBlHceU|0L#jrRqe;|8l_!aLImjYtLzxWKl zJBF8;&Nlx3nKg3@0a(hG(q&(v>`6)ldO5ZHTh~2J`Aa_E-=A7)QftgJkgTrZj2;6n zd6!R$?S3fScxx83Aq9=kR@kpLUGHpuBNr2PHe#>ZGO9q?*yUGV{PR~H0GkO#x2Z4&}?zL7q}k zgB(QRWEZ~Ttzswk^=E~V8ORtBM*_i|wWm$$uOCSl3s|!djQ3}^w=C+6m}t<5E6!S3 z%=d=t@@~|Uj(qg+;M36p3~K&nHY|@lh4-5HmPxD!oLx5G<~8+{^=E%gPI7Z&pq3X3 zFI-wZZ04+<^-^r`9z*lS-Yj)a*?TI{g+Bmk3<6c=z%S^mT}!s_%_eGSTjsD9E;^SB zD|}n^v58~JO|V@G0wluo{8&~Ss3VzI*$dG|9U;N;93Nwg0afT>qgc1M-PD$`?ju7E z%ubIwaZPRu8gidpwR5fYYTw%4*wa?ObPk{*5rMCQ7>TDOqeoD$y<$1_)!}6rv|iD# za3zv2Ni^Hf%G72|F66T|Hn+TW3=_5dOXu=$b*8`4U6+Gj()ZmDIVhFG>~znR8rVyd z7$(qZ08(N1;{AsZ!6lIm7|qquOm2sf7bp42)F&f7Iv?9)tWj;XwO z;>@s}=8j(}(8Nr_A`5zv*YdLbVl9Q}RT7&+Kb0JH3)ijN?Jd z8BM@Gp8Y2(cDAfT%wU8a24CNr8-qORlH(Z#@x`C*J1b+&@;c58t29spZ~S0cXuNg% zzS=|QfcAmY2)lnrvmruHopA&_d*YQ|5=S!g)n}IL&eAn|8kpd>M*th;lj$jZ#Rlbd zZeDo`lOezM(~4(=|9bvD5`UE(wVXu2$xJQ%{3*LgXuko!;-4) z#)LxE?wBzplj83h8}0LMt~-qTT_$vkJZ3vmP(oow_JuSfXfmTJ#DW<8z8$oQB^;6} zPAykwmIV3C89zKxQ*OqpwqLg@$QmMeKx{{UY_0a88FHz|{Q5AoMZ zF_{<+??vh8Pyy8P@UY4fE{q7eJLq4Mi^LD^xlh}fV};AS7(dxoaeg<&4K#(p#wVS- ze?%A8HEv7XaJ3>e-m{VQe?(~4*81SE#6w!><{xogAVI`{dy$O${m&&S&%EihF3l$5 zK{!dgv0s?HAa)=0#k)nOciz){WL9TQ#;rIJE0k(Xp@a92No@-Cl#4gG-r8zj|GBDn zpz1Fnu>b8KAEWvI$-X?TUUVVpFK|BFgGep>Gl{qmVf-JkWQ*$hWC}n^-aM zs(B&c?#e*QoU*KYo_SL1Q6q1~9%W)BV-_n60I6=<2ZgBBDlb=k#QMJ#gRiuiro-gD7n z9KArW9TeV8u+!TmphGJ+9VVL(xG>_Zw}G6ZoHirN@H|r^)$N=574cI{P0)rbFvwVg z@HBFC;i%2dl7e9JJl@^awNT=mN_t*x!r$Wp-Tq{)1gxaVlKTK@x=xkTr#XLwswkF92o>RQ*la@rlusSG30 z)j?(l&V&C+0zL4y;BPj0cC5zgFC1UvkzjP~jV$w6716#UBlVk=ywBM!tvRS<+Ezh`Rw4PVa7ic~|sB zCoRQLEL9%{knVmM{(*<~V><1P#~o&^u@m_zTIPDPj4LM3JYg(DI^(^%qL_)qzojLl zw3F6U;^=-W>QA>x7Spo$S_?s$x_-gL0qI)I%O<6hfC)pId z1p|}yd^CBX*d$ItCp0zP9?U??V?mexeBrqupvsC{=s6!#IenZeIbq`l^5hM{>Tgb} zj%$#I_}GykTQTIsFjb<(d1`!BEs*(y;$fQ=?shF5VMD4VX_{H&H zn>48}C^;5Aol)X=$M*QB7GRhJ6#!YMF;G5m+MQL~-1(bUa~J!VEaGH{&bs=|ZL2 z=3)fwv^jYB@q%HWZVDRddw19S$FZ?T5@)d1Y0HnPhPyV*;AsP+sp-@RZs)MJTz>d1 zh~z3#^+vHzd*}fbEM-3#CMHzEfpt6l&8y#cWO3sw$tK&J`35`HQhW2sl9K}Fj}y<^ zk<~DL_%B5oFeeM?*|*0}e^h~RWgfawHyvu@2`0YwO5W@&(U3PiFSvoMK&+%qQX&Fx z5xB(bUv_nH(E_A>Q(;8}x3SF9s@4((gL`{9KGBiO@0J@>|NKrujU4vDZJ{)mMixxe zbr@nq;2pokcOWm>`JUH&;~7WPy%De7-j3-vR-`iCtF4edL~PMKT=uTjU>cNy0((?e zQ}b!T(WekU`5*Yjx6okjt1{n)6@K;O&HRm5%m(m0Am6WL=3q%m2%LJzfoizto6Rg8 z$f?#Y!xl}8YLbSJhQhoY9I`4EeXb;oFj36&LkN+eX*PYlpCF4u!->(F<5NvjROqXklXjU|>`iqwaRj3fUuJUck&-Nzh{Hq_ zaa;i4NbP*OGB+6MRgIfevBosumb!o!Mi!>cLgpca9FKxMYnXQOp5FU&K}A^{>mwN( z&jHpLBCW9i)0|ZO&Rruf*e2Il%N-RI9LN(}th;C^TAr z&quG)wbna%o$|S+*>3+=KhP@i`$`Q~K&9>5L!}zOP4l6js^&;f>vGwbZAu{|$xX1N(TOlKCRO5B^#3z#36qr+j{<3^E6o{7D zdt2U-a$d-94yNFYKkq0Jm>3?8S=qgfhgBXn9#m8W^f!*O516Jkl3Yv_D^}^ekW5SA zwPoYb3jJ24D$vq|N7gU;H%r&<@hTUewXT!&*3yoXvu%ZQmJ%$V3_`>TCy0jvh0q~B zO|#0IES?5CErx4fo86?3ED!*RpkB-9xkt%*!^&K>`FDn;zOq{!* zak4I0{8t$7Q*<=v1*uZ5Wb<8-(QU5_Ju7*T6OT5j%~SQ2{t@3FS^|ua6%ov6Rx8T1 z%41i2hv3?wI{vb|#rLm^l1}=gEA=@`=c^G7*`g7ar@WEw`~~3~CI_r=>d3+=xpSy< z+%m{N1~}KPku0ZL<8^yV!Kxf*tfliDrc*1WhGSOK-YF)HZ^KyYSobOVX1YU)FeJWh z*K8)~9!19SEO1tu2}VT+iggvL6_<@+>iBMgdXBm^Z6 zSvH#FN&vC4gSNA2#`3sj4`oy{6?d5I`LbS6WD^Wmvb=61&T_R0)hkzH`CDe{Y;I;o zPd{O$XqYdIw3e?)vx*O1@&*GAAI;s@k$T20+lvh77wW)m z@@In6vmCyW*toZl{aNSO<$lCgCugD2!U$&8JiD##Yd?(mkTTm9q8OuH#f+S_0!!O~ zWj(y02-v;$UU%nM^$g7!U1UN2e7TvM+qVUpb(Leu;QP8sDb=osh>5KE+S0+yC*^}+ z4PCp(c*I9_Ct_K;aawE}dF1k`EtQ|_ z;+>Sq?*4+7TSRj~`!l2haRJ@Os@(9^up*#S{DmcorU1%Y zrp=(FamV3IwepOkb?feCDfu;Sl5FbOP=`on_R-E#TIvH4%hma{jhqC-JE9Y49*3xa)fz7 zAg3Q_UY$h@WSsU}gsZG(v77@BL5a&rX{K%=xto583_9%?AvA z{uG`*3?=^@N&L4UkmYMp)~{2Q2WB|2v64Cp9f7Ki*pJcQ=YlXWLg9i_uO^(RbgOG0 z51U|ZBUMn`Q9i~v{bQKEC|FGHG=w;f ziHll(&{aCsICEyv6i(7-aJmiriH(E_^#$)yAz8=Xm7_Uo_01laMnHXd=^6Ns6fBS<3-a)Cli}Ky)Y{L`;5Tt=U0G~O>5^(oh1nd zwAu#QkHs(@4t(NXYH;=DqD|KvDa+Lq)Ll5Y;_3N#p9zBQ$KU~H_pwO zrKWP!fCn1*oCZRXp=)?oI+gm@TS`b&Bv=>6U%fFu6A6EtU+8~&{-SM>#vIBYRs;KX zKoxIHOOgD|dYAzi%ppI)!ywz2N&Lz)p*-hz#S7tFY&ZY>Sa>e20nLeZ7+s}w%rl5q zn(|&SUs_r_JP{p+F^P0SV;NRo;6k7mHMb;u5FBUyBtgD5|#qfjlUw^0K&Y}j~$=GUGM{a-!p2Zdie$7fQKxGW3{#gXmi zNVW)N_z`rl+PLk3kdv)1gKj2$w634|N?;W-<50+AU35O;O8tL>idE4TlzlUs4 z+oIBR0b*iOX(70Bq1S`yo>)lL`OkoAko<-XRE+I=X?V9my1;@Qh|$j)w9{U1^!C}a zh$N{@FxiioWX;}O1xR{2d@88e&0X8LobhyiN!-e-c0kCJIfHCT>GQ!w>}X$ SPhkG>gX}9MsnVCm0sjX;ZCcj= diff --git a/controller/web/static/img/deis-graphic.png b/controller/web/static/img/deis-graphic.png index 7a42f13aa92c7d3895599a9635c87ce28f2263a6..ba28118d2d1dac071d8180e887870d4ab50cabda 100644 GIT binary patch delta 20485 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 delta 26153 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 delta 3938 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 diff --git a/controller/web/static/img/favicon.png b/controller/web/static/img/favicon.png index 9d33fc3da1e47196b4e0a6748cf66f360e82ad8f..77db90e90894343fae773222df27a1b6d82ce547 100644 GIT binary patch delta 217 zcmV;~04D#$0`&oqB!9d~L_t(|0i}}B4Z<)C1wBGP7$74sLPmgZe!3AOWCS*#BQQco z@CYV>7xWUPawIC9v{BRQ&M3k1b$dY;D;qa6Nkd? zU>%122--Ny(XH#l*0XeR($THM!kxpifa8SOuq@y>X)_oxqUL-hYSpg>_LF;#0p2PV`;yQ>Dg*~S5`gVPV6}iF z!-0L-fF}XA@qb}So4~F$*aUWM3I(9rC_`YC2ZtEWxCgBE;M5{t0$clFwFf7M59#WI v)q8H8$7(i4IU=%j1#AhZqqwpE=_9}Z2kl?vr%M?u00000NkvXXu0mjfj1hqO diff --git a/controller/web/static/img/fork.png b/controller/web/static/img/fork.png index 427caa6ff9d4ac219c92bda1dff5b67a854cc8b6..a1d23de9edf56b811984decf07750dd17b8e5aa2 100644 GIT binary patch delta 816 zcmV-01JC@!4ZH@B8Gi!+006Ju-2MOn0BKN6R7IJYng0}9|NsC06kC~@ng7Jr%*@RH zimm46=KoKGv$M1Rr^5duW&hLQ`T6<(@b$mHzw+|(pP!%E+1c#u?EkjR|3G^GF>wEE zncv^vxw*NltgNP{rvH1R|KjWaU5>`a#{ZbN($dm+HrF@+0Dk}lbW%=J|NsBLzfckH zO8@`@eMv+?RCodH)`tq6Fcijd{kJjhJ?>ub|By97B)zpGP&>~D7mfzO*QW1SjL5>og58At_!7yBAYZQXH0>O z{-UAa>Esn;E`Q3ni*vwruE5iE)LKu;x`1)=cQU|f$qm$&GZsK~H#=4t+BkVZ_T!F% z;;kd@Q<2OW&FL0;fMj+muuevidpWmnI5sN0a?8!$huPt3`*XF7hx2xBE~}{2oabCT zm+or{TiHf>IGXo+Fl_Wkp;t%Qii*l-KO?{}**Z5Uhkp$xv-*|W>Tp+N9!{vp3MlMk z09C%>B!(Yv=+(jeCJ$$XyQ<74?f~4w4QE+HkvonV^>D%iMG{U+bICp%(ucJil)BDa zP3)^l>v@G*=N?XYs6a2ybI<>|X;>VU$oIi6jyU3oBaS%Yi1Tam@n3Mn5l0+x#1TiF z`Uuc;mw#QIa|26WJ32K^`gSkp3~r8lIStg8W8Xz_Q`-k;j3sICmWbHXsd1-?q1ned z0;lz<2hOe&t@SxwZ)4i}J3t?-Nr7m~Ih8c)`S%c%WC6R{{#B`T7*lcbTrAyU5;`nIJskX1uXs%Du!^demU~$UR uo+IHxQC literal 1731 zcmajgdpr{g8wcN8b}QQ0BE35 z@Zg;tzcVSS$~zV*TJ-EJy%a=f3I-pSLXIKe0G_dUEbajM*O+)*FfJyRn%spu3IHhM z&~VQX%Gf;99c6L?+{y9;S`{B!R?B-DYNo*TV;j=Wv>yTfIm&F$ym|aYIjXqs+1Ywj z^34bcjqmf_i<4L)!Eo#}DDPgmjlt>rI{AcqFQ51MU1+N7nC3xQ zv!7&tXrF!Sl(976GBR6!c`(f`ON7cccE0{i)dG{9{MBsZ-QN_UB$!{r7C&}*_f85I zCQ1@#d8fJsUq<%N-pU{^(oXdL5xP$!(6MqmOXWbRU+yuhftvV22+Or;iSw|$bQmBP zw^5=knw^DmSP)vfAPb#v`st!ngMsEs{r(l(dd%0LCs(G4I3B;Y87B_|jVC82^zs>j zB^#gL3M-Q)_(6iuKc|nX5tUYg<&*Jr%`vCirdnnW&qCl?oCyBV$SU+{dRIp(PtDX?nW@( z7Ja9`*7oR`k??i=V%|ILS2f>znHpLWA|LXg8wbJc>HicZYeub~bKh<_vN8Ie{<;ur z_FC9m)^?>UuplcdrZQ(LT^kt*1hBO4wy~}2D#;%=%p-H7GK9~lfS<$qS26nZ=$5@2 z;D{=$J~Cx*Ly$AGyP1AzwIq+oSGMV|ty0?)3IGLJLVIyI#@u00D$^u5*{SRzACp!UM+3+jCj5VBvo#Yp z;Y-rqQ61N}ulc>vUoTz9Hq^_F(!WeeJUf5gFJ?c?3I*RN8EKf2Z^&K9}>wKYm(NF*}5uhJK;FMIxajk5HG-1z(NqEs^3 zdc|*Ya6&RU5*erO&<5>-p`sJDM z%f>IRtBRn@UhnDz0%%e(y%}z_DH4hPZf$)sK0aQ{V`KJ%!99AWW=v-y`vF2fE3NR{ zLKF-J<5g4~oHI~RL=9k}EzIuFNEWi3Gv?E|E5|BgpT)GzL*cE*p!kMDs)Ax@+|20c zDATHz&1Odr$pxOuKH+9hhEEy>$tV(EQb|dPtR-|yoPHLb=~)jtIeDQGD+(ER0fe~k9Sb)>h-^_XKqA5{Xn@X!4069H=Y{}9Zm_3 znWKZUpQuk@XP5NMuDWn`Kb&ERa}M;$_vU?Ul5CzHL$w{!Xmkl!-bOPOY#QmU%q@rT z{v;&H~4{*^aIw&259TJ3tB<7GJ70I)3KCW5V}0INICW z;|Fzhzu#%w%dW0Feh}G(pO#|=7c;9+zLi{JSx2LPA9f{knNy?o0_ZXzG4{@Y9c$GB ww=$HxlT5y;2}bYauPS+K{UfuQlcA&wfX;kK><`$Nu=AAwXhZ;<=M|m(UxEBYx&QzG diff --git a/controller/web/static/img/glyphs.png b/controller/web/static/img/glyphs.png index 5f046512eec12e338a5411ba6ff36a2a0a6d54b5..e1e4424f224583fc8cb932e115c6eeae9bb161b3 100644 GIT binary patch delta 1531 zcmV|8s z0>A|1WagZ+KEVyp9A%pUnLWle0J|gH17|>=<^s%M;5^AK(0@)pW40@NxdK)$=Ka)a z4_rh%0F?l;1%@RT{u=|nm14nHKqH=|0WN234H%hN3>X*k9_VyRI$$60u!4<@*;2`v z60$**OQz1YG}G6hRMyHg7gJ-N&vY6A|J!9?Cf@5XD@!|#9sVy1Q4WU59eC^8S*8QF zBX=B6C+tt~g@4dzM>XpOIhDI|n*)?xl5NhEU4r`zip#ER4U@CbR%Ec^wmKyXy)sZZ zXDF2eZGq9H1<#S@R~O(q<%K%Af?>}6ib<{593z*?i?X9~B?Y;%mR&n>>*=`lyeR8( z_@h4-&!Jkc{#e(!^(y6|W~Vx44U>htH-=* zcIpZ4L>l#&ok)jz#Fe-l^@ugn}uEY~)$5eDHNj zm9@O8vVVH4%3=Rks><5FmQ_~IRZ}c3S3Pn)SB+Wo-{+wlGo*Q_4L+tGB6c-FYCGpX zXO_GV`8GonPpB@XTRqiSJ7sNG#%TL8@j!|hCa%+5Pi%q$K~=^x1DZ~|rnS?dX+#<{ z-I6Pj?Fr6Bay0Fd5n)++08MknvTI^U#ze!?hkswJeyBk`J|#M#apk#FmOil@9)2;2 z*gDjmix=|F;A3{f-A@BeirWI8O_yL>pefywZ4RdW`}OtjzVig+cEN>TMo(Xlxp{l^ z(sSii{(Lhz{fsv}{+FlSpRaFjM!mlOINKS+cgBwo@xQ)?3Auyc-P}wz9^8Wk-)P~R z@qZAyIX{5W{m(h~aPL9I4@&=dUb$p^<{+NOpYJB0@eb~J^ZpxXXY4Xwa(}GV7ry^& z%wkY4;X|YN`d<$Hf~AIEKj`+Cldq|US6ur%heBe$gx?*i{xKvMQ^t1={5jT=;)2hQ zdh-sS7?44@%G&tG*!g;_8iSRV(J%zX35>Neol~X z!R?b($nBin^FIBCkTVyuee!i5W|rIqToGlf+>=cIa4c;eXzS1|S zry3LU5T4bywOOzL*yHnk9^WUjm4C8sXlnkyUR(O+6!+Q133i6+1UFz#umOgnY^S^P zRh#5)x>(vQw+Vh~+J%$~V`CQ2*&rR{2`-qfwLr7rwv{bD<^nKtt{7xbkgJeea*;0N zDqx#YFE|glg~Bf)M}5ikD(=h!o0TOxj&i{AzB zuq~leR(E4+vwRP=Yar7Tt69yrC3fMT`^v(-`vI?ZQ_GloW92qmY)dp^bEd6<+)AUx z5#yI|38QbP6>DbO61DF@@O0{3&$cDHX(j2?*7TvWchwYc7u*J{3RO^AyH=ywg)``(`U0mO32NTOHKWNxxcbOT<%B&$m2RjZWx6*H&3>qvde7Z3(vvwYGQL hU(?gzPj}mv_y>{hsuZ%wygUE^002ovPDHLkV1g%u2V(#L literal 3854 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 Qdw-~wrZ&j?#+M@h4Jr)YDgXcg diff --git a/controller/web/static/img/large-social.png b/controller/web/static/img/large-social.png index e95428419227858d98dd22f822a14e17fda528af..636667c75d5ec3172f5ac5289ad4c495592da7fd 100644 GIT binary patch literal 7622 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 XK~t-9TOBQH00000NkvXXu0mjf>8NAM delta 280 zcmV+z0q6et0kZ;-B!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0002h zNkl%%pXC4l{{?`Q0T3$y@dFTMWMq6mvMnHkfVdxs-vjY^Al?tf@1e8; zsfL}0Vg)R64N!v(h&2%8vi$_q6aevkXprDlsPG>G6o{}Gl5~h}-~}KKAX2XbE?1(54Jh^kh)7zXq~k!0fdTl^8B#i3 zPfFrWfF_^$FoU5P-g diff --git a/controller/web/static/img/menu-logo.png b/controller/web/static/img/menu-logo.png index cd3b7786bd027dde195a1837e3ccb1d44ed4b8c5..4565589c03ffc0226fe65a715f47f443659608dd 100644 GIT binary patch delta 2859 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 JPDHLkV1oXl!5#nr literal 4609 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 literal 3606 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 diff --git a/docs/managing_deis/DeisLoadBalancerDiagram.png b/docs/managing_deis/DeisLoadBalancerDiagram.png index d4c7111328a6908baeafd91adb65adc4512ac824..fd43b0aa627fc260bb63a9fc23a4284e8ee399f1 100644 GIT binary patch literal 137970 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:En+^9-K>djC*@i31*qH1QD}nP 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�crz+dO`p{OBaZv@xzaD{zbo29Q6MF;e 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

  • HcEEai)R{}CDNV6o_>1w>VU~|me{!SPB0LZ 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 Orjh=6J>u!BzyCikBjUyY literal 154714 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°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°_wJ|)zuQz1sm@V3naFDS{ExPd^hB(M}roDM(Y@!z0E@-mxAZSnatsE;= zuo4#@cYw09G8f)MKmFCCs2!z1{ruQ-?bM$lHf5RYnkirRhaYrsdy=I&yGfjTu1Xzu zG*KU;&e=tbM)X9w#px~`ELOy4P_X8t+U*Nb6inBQXo}2^+J>OZ-}d=-kX-$x^M1`; z_L1S^xx53=Z~rr^PjK>22;>5}ulSodlkSH`gSpg9VD?S)BgtiT`H(~`iGl~xU=mo! z#s0h?Iy46Z^B__zQHhyZoP;nCDbj#4$(h7SNJM@Qulg)r=jWw`HG5ZA+4k@>Z~cipS$06@eqVsBKQ9lrV9`#% zRErx~QtA4{4lJ#6ZRr~=72;-@)BEaxsN7C{TJm3*V8>;6OH&9#{nV;LZ1P3^29f8d zESXwo(iGjDdJ%EJS`DshC#Lx+2D&Ry5`|{WEomG=zdpO~wCOweN+Zk7M$jLbr}(jE z2r8$mK36=y*798~ICCtHkiJ*Y+Z>@oHOi*ax%AY*wRlbR{xNnrp<<)+49#oAZ*t-(%*{b)se+RRi_xXT{Vv_?BpESdnHsb)SfxJE6!3K+9SS2u=sv z)=LscQWxEJ=O&11m&7=tObYpgFg0vXf62qQ#rc8zN65EsHI?P&pvl7RW~X>-)4JIHU$}(bgB|FGCYK9j^70DRzk%Fe3kF9P>Iufp|>=X^Iklr zdc|j|xtauomj1Ag>`(jpF#=2g`9wn5&4zs+5Smp}_gk6pjeA;;f{l2)6L;N#%V3TCDpNNM8~1 zb2AMdy8V{>$1|}T8B4dH^v>YUG8EnZ;SkZW2UO{XL07A*$(?pu zBRuG7n+qhv;-&G1o;83a-b4r0n#rLR2E{#fsmn1o10O+(bcJq|L%($GonVucU{ZuB zYFOupDe`Q4z}Pis4X-!Lw_hCXPtcBt)BNHop1edGtEQeAL&m7z9`b` z*u{=A2LI9JnepTpqAyp-aK&EO}NJ1oM-R{7T3Y}M0zUx@}eQKq_~r-#sb??=n6jIB{Q)2mb@Z$L^v@d)CaJ##0(1X59)RFP5b( z$`{&KCs9BunT{iv^?WbL^UqCByYlXx@D>x4yR6>Fl@+tg0nz#?I}S+7ug|7OyF^!0 zrU#o4c3*5Mt|y~O)glE%&sfZ(Q33uWqi**mCXO>1t{(IOq+$Z+ReFtz8Yw{orZJOD zB?G0jOCUl)7|6i>E6!lRlByQddYJN2=-c3`d*7TJP?dr?b~` zDjV-&Rg>FKK+nk;hMPq7qKc=+3N<*u)^()O@cGkcHO6bZKDBu- zjwjrz%ryzbSX(4egZ991XOl+OTjQ|YpFQ$d+Pn+K zH@hR7TR>NC4fl6oDLprL0sIOpvuz7tR4{Os*_Oc|JM>8WRn_`UfvAO0fMMXHt*Kz; z>0!=*zVXbp;r#xW;ZnkY{(FazkEss{v>I`oy1m>kz;GYq{4~z2R7>;))?MDAaW1jIXLNRF%iP+3N(#R3gh>u=aC*Ho>24la?@)jHxf+CeB{8~TqH=0zVC``*h2wKBW&b2L$W@_8x z%P;i3iNi8x&IsA~;hVNuY(zVIi1D4RV8(TH)ON1-cFFiHSof4~pXsKrt$R-h^AL$v zRLkzY|5#BM$cn&vY$kL!E}*;D$oou8^S8%1QiGXpZ^$C4pblUM+5q4n;=n-w zo&I07%0AY%-w06h$)nr7SIJ)A@pxI~rATz6l&Zabt=?|qp(eQYIs_K@fE)4)2^8EY zvg6}F!2wu3p6mH;u;*_`DFzhU8(+e_rg+~tZHk+D?cbj9F(B*{BXpq`!$cOVgmhei z+gxK#b|U*o4^ z9EJ*Nodi1i-?PJ}5LDQl#EK{@Mct)9ml>+rRAnj}Beh3Ny@jSHRN;+i64iro`%NW> z@98Q6StrVX)l56?_%nA8ruPIFN}*S7Wh=TL`qMYh_{ZF-mm(_b*chg4Bsi4<#c=r} zteo|#0JksXo8x$;roBVvYJz&S&RbzcO6#zXQ-#@Ra6)l{gKB$JSc6q%JB*}v`pd1j z6Vs;sZxc1UB|I71xA$jAuq}&#n98^%hDQVXKEGM}b!$ukI z7hFmXvy7(EJG+!BJ>MrusXauFEX?=2T;W#oU$79g=L97hJxsHiyw#Dfz}(?<|u;>_jZBcd8QontLE8}5<~CuEr5iF4S;9; zs|S)v<*$kW(uwoV98GZ5iSrKr*7>>pb^La7o9hWa-B2Xf>kmg@IfX*+4NRDprldN) zpKLHy1|QV|K1%jk>gL14&TunhEdz$B=rvue(v4GVd6q_zO@wxBb6J6q zN>TL}bnjY6FhDe%AI)qiI8f3*W@%FI`i)`>Ka}A;U8o)Zw7o&&F$X#U+gs$$Wm)VJ zM4yv_s32Q^kyS3}5K$Z$}LY zSVeUP;FsS=YSA7x=7Q_N&F@gK-cxoF<3$D$=W>~6tvmZkxY;VxL?_fYj=A~?tSyWP z_6Z)|1Di2)uWGTbmFysg>4m!c5rQn4a`B*#{$r`QL&RgtRDHK?B#~YHJE3E%zd&Fm z=oWn0D8^@kcyh# z35jc5^yo@geai}^e2sa)8;vjbY9Bq3msZ!UzICY^kSze9G%zsbzX_|f6&q#RS`VoClB6%L_Fcz|s z>P&}4tJ+j3SEdH7RYzpYz05Okty<8V=Vf22Z+?r{!y}|jc17z{2-y^52twt4<`F?W z<5McmTtfc|E_`XEej#`&@r_uZ>AUwCs>XI6^+8Y_HWN%;35&^8smG3Fs5Trc4BCzm zUTTPrCjS_9J;D_DF(snKNd1bQW%U-I&mSu)>f~$8)K>pDu>k@S^qTXq>pLAr?`@Pr zktSH31rn#nUnd2mgMPtX5ChJv)brS$Dj;t{Z!JOKEn`Kr>Ft8e#d!G6OO2IHdxbkA zUap60#31))R5cihh#%und~fnEd{N0$L%=oh=wxwCfc;M2aU54umj|(@rMn0nA1lG7 zu`JH{dZj_f&ZBc3@#Gq**FWLvqcHN3q*|hNuG!#s*@<&-IVZJDTKfd1{GhGe=i%LAdDc-7boTBgKFdp@)MuUIx8{p`c$U-z zKZwByG)DA-v$+H~HoJZX=LM9E+-3~SbIxjPnIuDcBa464?0Zp5`@^ zsFG4cDfJ13ansAo6!wj(TiY55Jp;o3M<7`J;wlDGf@>F=2_CoF+`+d3M8I@{VbyW z)EKKtk}Y1S(;6s@V~)WtxPDeU()Qx9rxXIlJK^puH6BX9hdhaConDQ=^pvVm)$2w2 z@PcMeu9dbj|pc0m)1lzp$a}$f_ID_kNiq zCh>s^w6HFqS2eD9BD4&t!-Spo%8H1$-=+$r^HX+-Ykd8Qa@{Czt^&6$&Gu=;)*vrC z6Shi|q?Qwp*p|QtZV7zyUDdXCj3G)PmWJ8`9Ik1{0^OXV82CRR6#UA4@Abb^jWm|} zYrFnFcN&9jcy#1NhlHs%Zm46zj9oWd3!haA@nCQrJ@;P^_%&xC#|JHEy`z#+NAG=! zxCF|uMr25ojMUA=6IpjAjXX+5MM(*XsS0f%A)(8VJ#hn_N5FwI+zUu022z5yK+u0| zeap8qv;NmGXR=PEq%MV!Fg4^948M2M>1}rw z-Em76^mwr%THm%eV7{C#c)p^uGdJK0m^&Ec z^u$i7ai!H5o&6!Lj<=GVQum}3}1$Z_}5?BCN-efZ8oI47ODZzG_riR6<63+yaC-v2^7I(P6yv4U=}2%0AYICa07VhJ>x!s6o9WnDRX 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

    G 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 S>MBKjGtxIboOQ_V*Z%^9E7xWK diff --git a/docs/understanding_deis/DeisControlPlane.png b/docs/understanding_deis/DeisControlPlane.png index 5d8e7f182f3e3262ae1e77f5c02478fe7fbe61be..25835502f5b41b7389ee15f36129a8893bd24c4d 100644 GIT binary patch literal 124325 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

    {Q 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 literal 140620 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 z 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�%uBRR`EPfteXi$nMs5fm`HA% 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 G-uN$mD9O(N diff --git a/docs/understanding_deis/DeisDataPlane.png b/docs/understanding_deis/DeisDataPlane.png index 4c2846435129a9e560c3334066e089bcb96aef48..eb56681f9d6deede0b6e109378c2e7f372fcd4fb 100644 GIT binary patch literal 110011 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%0D@sJkYHL|d0aj? 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
    g%M%%#(Rik@GR6E| zv98FST(n2N=-7(gzvUVA2Rr>wMjW5&Kd^T5By+;mzU_aM$!q(fWAHP9qhh5ItKr*c zr&iUOM!{VEPY5Z$Q~k+|KLH@4n+MTmqDt|eY#Z}Uq`#P4NBZab25iTtz2P|s%uk6xwViQ$` zm^D-AkGxasdCPg-WKNb#Gz^uISgc}x>N(p5I==c54{{5h6A}9SR_J|-P|U5JojDm%M)HFfjx&`qgP3{WSY(dw z&mw~#TK`nkK<8aTOZgVv{^0bdqhy@LOUY^^esy3Bty!hdQ5`pBZmzW;WflC3Y9~0o zn4cJinc)H{5e6pKzjW!}@B<=aGwyeN)`3Q0ad&lQ1mII7(K58(9GT!8yC2Fegg+v_ z`aHVGH5sB|)8{y6rgBypWNCvPJPBLSj_H9572<3kx|WZBU_=2Lq+`FWf--~DALih_ z$KANj4#aKkEc{QjXiv7YzKXJQB&hLR2{$1CkTJCo zVgLH%f3cp!7>7hmF!`Q6MM)`og#s3FyyCge#V4K2(NCqN1UzN@$pAkDF2ZjM*d7+_ z+?7K!J*ZT7`5)-1pJKljP?gi0(rEd{L6-VL>wPNeA&v#PCTET#`4ttLxoTHCQITjB z-9R+sG8#7-@m&AIjGAHEc6z)lr{39u3DqQ)=bSO$d>F1k_WZZWCF>zEtqS<Ow z<=#HFqO(>&2=#t;{m`uhurHYrou@#9=P1aRJ;mA-#bQOs#vgl;0xpc{o^h%2vBx7Oy9lpF>HI9c~n32#dmpk zOd0&1y_GSQ?sv!%FAPk22btiZHGfuXt3a}lMaiDc5dV^Mr|KRs8%ID9AtgK+HCV2f zRSDU{Z`so!JvXO)$T~>gzpbBI9+Lh#FfA&G?I}vz-!r@Xg4w<<;nhDvh&6Xr(m{?(VdFG0+SOAYu9U=KTZD<|Qo==iQC8a7^va<<5>2|I9C zSr`3?v>=qi!1U`WDpC59@V7UoXf0pKdGX8SrPWls6C0ihMag-Rc;Mi;Vh3My=jJWq zl?cIo#xxX`k62PdVt4Ub_Sm_kAzs~+(@H-+t@{ZRZ6xCc<_&lV#PJ8x=2!IIq#)AX zTm{2P*%@|G`@7S$smiZ&=;#2Q&jnD_y}_vPZe4TR9_8B*2d|o%ni4`IA1#x*&t61! zg3a%i7alBPD^ko6JAA6gR{ZIXE5;q8kR}&ViE?Zcn2xq#LD?c{6bd^qu3`i#dnAJID;QnN6lQZHLt z>`*GDDxVYVGD;%d*d{=r@#u~-J|k5Oh#S}L6MWUjRd3{I6`9Nj7Hr~*AHcVsTF|5H z*>WjBSRya4es_Uvat8QQk}Vex-E4pVM<-gu@f0A;Ox?c>w36o6_OD1D;oUAwi2Nr% zoxbTg{l#|l>Ip01q}J#vp(F8-H&J{S-pSzS-w=%TSnlkyy23R3l-xqFf(uiI^SyR} zfWLscO^KzcS!W|Nd^0jY%kJC-rUXtxPa%+Yk28bOqW~3@9C*KA(KlcMK~vKEV}~+G z`cjmSwm%?U#2U#=-l{9UkYf$tl^yRqTBs4%t-t9M*`EH~bEaW;*Wv!H z+MCk3{$K2#*URAN$kTuzW0!up{tC~c<<9VtcwZ-ptdxEuhtY#ft~JqlEgK^meb^TJ z$_8<~=tb2EgW^$z3y((8fW9O!!hKHGe>qxU2g{{cOQSRGtZxt!Q#eG#F*|`!@(ozR zwUenl)_6$>IKrv9DTtCQhatb{p0(1Q=i5s#{$? zy}`w!s+YUj{QR`Ew>ilo|3D*p0v{{We=eK$Qn7Hcmoddny3wWi{sj&3=!+)g(OyLB z4K`u78XRm&u>ti$0rjZQ+$L4}FN-zyawen%dvW!=7dgYiPLBbyb!IcOFf83j_Bh)2 zUF4Hjz@!}h4Q8=z*PU*+cp~Yh`!Q7cCdcVcvp5A$xF`FxPtbkbt#_g*uodlC2{U$F zxJK%NB}y??OPx&cFk7kfM_|S>ZC}XJyomgmCrv@tTkcWJ4UlA5Bcb@hqCQFjsWedP zVr3PE+r)BqEYz5bu1zfJB`iLXn2;VpBCTxGpk)CK>4*Z zw@?rO6wWl|qjD@2h*L44WCbe@pwtCStl!y<qjwSxQo2 z%6RPFU=L0I>_bC5rkuc@iuj8D<;&)h;UF)*Zlix?`OE~fkRqE@3>xI2$4}4ipOu|> z*Q-qwdhaglrnD6+VBL=ds#Kf~E()&7;Z<@mPLSDTLz&O zXDVP%5m^}R_&2Cts6l6w~G6u8EE{F*9###pR;7};!qyV78B zBRk0dLEp9I&q-Y*MR>8nVP)B4;*_AWZjL1!F`eM3 z3#}|+_N}iHnrTB!{2P4+UkL_Zunc79yk(S3DiL^l)XZSUX6&()MPuxFAA{eN^s=Ak50d6cY+mcUa?mBA!usIG#=;9T zmxj0-k1fy_HanYi9cFpUl_wg{o@}{&U3k2_uko7Z$yBLN>e$O%MQf4MT+5Ah=30^o z9Q*nqPF-pM#KaVYzJ1>^NR8s?eNLL`S$~-gE)Y*YO_5`du&7n>&XuW0{@C3aC!_!M zwWjj;DE(TZY|^`?9M^6>ivhV6jlQ89vXG>>L?*u|jkK4`vZ7#l@o^}!q{6}tCvRb<>gU1<7i!W=!fTAE(*=!SQbI%N8M1qElJc-B$JJhq>AninDdS z`^O(kzmhxL(tU)xwE41iCFyN(jT1^&i77xS02>dL?KQnfN_KtAG%bx=k7ATQJ8W4g zZ--9kVU$tW=#wK!57*Zssd#J1Ln5+UBL-Ds}4KhEah@TICV_{<>S zTHi4{>tDjx7)+c4}wq9fJXm@;5rxT~2SE^8vm7k@-7Bk#ACRXb>kxphR zV{js;$J^m6AqmB5#AyFl)<9+=D2D-MF~A~H0R7oBIgthwV9_E2orIK*#CYvqq%8Z( zN`vsX{#R;v_QK})8SS530GUXTE8Enot#d5ZknLcZ+BaUVyo?>ph!tD+GY~uY<)SyH zmI1$60m3YXwdBLs;cxeZkZz;vSJCB57^sd})7WodW(YCB7glCjeMp|gyH1N|xmzoK z`1GPJ8(~J0XVLd1JAaiV{_W?uJT3mh7qSIJD~)4kJ~+7hcuv+hyNYJx7gT}ABGzc` zez()ommhz{KI*1HS%s9Gvd!2;1TxeDW1A6vR@Q9&kYe=*cCdB8Y1h&Cwf?j_4}}#Q zIaX8m2BykxxzfHNKc75sb_);Qcioc%_t~UH3ACZ<+YSaW+YdD^9L)^WhXQ!ok zJz&zs*&}uqsh_-~^mW7AiwG6=qEu=BIGZF_nKem88g?{t?;2NtY(}`T%EAR@8$rO! z$=;th>F$SzEEK!Ov6fs@{?;mLCs&iEl(MrWfTv$gJtn7md%PguEp%j;pk5+1Y+8S5 zWaX<82DTyq?CY5g5x#-_Jz^;X!;2?XeIyjKQ@2>|7I>wya{F;hZK|V36ewH7U$^TJ zIm84;2e_P8x`Fo5i2Ykj-k+Wn-ZN8dP6A#lL$h{!DdjcF?p$oerM#pi#8I5rPD^_^ z%NUbgNr;~YPKVlzcr)9}x4%IGR2UmMd`F<1N(G2}{KH|%>y8%!n#H~JAOo}s^6)Oq z;`quYg$J!^12ThLOUGDlS>5~7v8qX8$8l1PD%6D{cmj`>v+E32LZv0z@(^Y>2rp*8 zXukN1x8Io9E~4XJr+vY(qk3)M<7^(C(xVv%lYyx`>JxhL5a7~^H5$5>+HWc*O|jvm z@2|i$?p%}W4~n@S*h<|Y+0CQZNTAaHfIZ@f)5Q6BeqS%o)5GsruFNCoq`B=g6o1Yp z+~3~p^%qZ)OTgbP9K>Hx?d+TD9A-pM~|zrG7|mS0X2rv(!mPie&Yt z%StxYRdbq8In63KnG%%rhLjW;DJE(*MlKfWq^qB_6-Ieiv-b4X(YUlfSl76=_st03 z$KfM77<&0YWX0`S85fn{4k|xA^~rKqT=cuTdY4|b?Uer#ZGv;wJgDwGMg zx@a5HRh?QV-v5CN-%7=>7FXhI~ zv1yt>LKZu?oVMo0LycqN)1ErzWvrY2*zvp)Ihg}3-K-H7q$Ow%5=!!fQu_nk)uiO_ zUVAJwjVl#Ctu(76&s|if9IM;d+rsDAS~})%=LK&iut*AubFk zrb0$WOx<^-p=5oj{t%?rqSjpL2YbxcC^Vfwk9^Cn0)!;H-JYC;8%Z7e_&Dop9-rk? zgoe}*g^dCKM$+4dy`GSG_0Oal3afp(Z#oyfC&lA&q{_UYWH9+~@JnssazNC(q?nI` zo-fZRa;BnNXp_8VmA)PE>#G%8*5&P3dw(|E35#)ialAHlag5M1&9;7sIZS7FAc-O3 zBO)1bK$P(7^Ko3lap~dbxZ}5FK>^pE>0B!ounREJjL1a13K>fB4UA6IZQQg*xBT48 zeLCJ!E;)%6q!I15xfN93!znXvo#r%j7aAo9(ID6OlDdCVrzuFk_xJakzJ-C($_fZ* zUWk65u&re22X&i^c^qs&K(f|Gj?A*`}HYrBb&{BxJ#Yw zu>$+t7u!^P*k6}uq!alATQQo=pH+&2!$S=*1$N#6HleLvYiNgKUy9c1$kRiHc>eNXE$C^2oT8gkikTB*j#(aJ zS2l^`@ay%6F4jOuOJ;jKLn2^Mz16+de^in=`-wzu_Qwpc7j*q36qeqjHA6~m1&D(Q zmD!aWPwMH;NnF3YoWL#yx033gKL#fFWL9>ql~9 z`z@S#yn@}O2!8Z>=N>3H0;dWR55_C8i3YkAs@;!Cb~gt#2>Z3Hzz>k0y{jYb^Dyk~ zHVg$lQQ8`?8<=9Y-eb;BOzC@tV~{aOu<^v!+etpoVKjjj8mNA+JVj@7QfNthnG~Ge z38U;45+?_VUQ(iI<4U6}ueSXZ&p``2IQH%o!wn*4w-#xGmZ7pkw|yh!8Fe_6IB7LV zs|?ADB8k{Tw{b3QmKU!xRBfLbzh@nO5NULP9b7-4M5>g!YE@7cJjzAs+Xcr`i7j?>o~ z_YUNY?X?|M2=AX@D@Md?#DhH#jk%)&!H2^B-J8GelNjyNQw!bM@Ed!t>1Iwv;n28Z zyd|}mB;E*ieskaI%-A|Oh@L*f!EAj<@Tq7i-2KbG{6^UONb|9`_(>XynvK1@a~d{l z!$}pEEx~=>ZXFBhfz=3I1-pkklL7dsLNJG>PvMcyt!ee75#GZ=WI;w2!VIgFAwh3f zlFq|K%f@v)VX|nco^h_;Vb>ck_M&`&-rAdsnDlf<`lDdsi)UxZbN>yz{?6zH+AyL<{ur&_e7JGCIRtFYp@K zjj^%MT0(k^aNBFT1H`pP=^9UOPCMTb+bo&QPuNL*#sE(Q>mlb_z!By2ZLjOLHazgVj%F}wx@a#R1NE_g>7LcvhusN9}64B0+-$)vxEH6k4ic(D~-1)P%+U#0Ib!CwdiwDg%W@6w}Wf}d?NTB?Dn0fX2fPC9vE zvInR<#77I=vdm{DrtpYyq;-_mU;CNrMdUrTBiiWyY~2J?hA+ET#b)NB8vBzAr`2Fl z&1IAL=U~X^3H$g{cLRzBON%hZ*F9I zWTyCHjfchc10Eu*2JDkL^~?7NYc+s5{GxLGv)Ak*zjz~=O^W(Ejod;$&`;l;WSK^e zmt+2cKn^nNQxON7)+b+`2quvB>4>x%-;xpca+bn|<6XZSQMit54Dh7tIfHc^%gxWQlpvQZB}r2%+}Y6_Q#RAP=YSB}&#i^)ji_sh{Ow^M!g zqSKJVIebVc-DplTbD#7$8SYRo-H2@5B1u>dIVzeLO+}Y`Qp?2cjX1>*Rn_OngPcCiT+ zn;MZ`bWD1us;dcuN|KGek=KnS#tV)L$?^=}V+UiuKU!%e43@7GH-DH|m{H3L+^&O` zc^Nx321>Bxqn-0UX6qFFvU5c(e)jeh@ad9_N0U%*3mIc>q8hln{xA_#Jig1)kZ?z(c9})E6cFsU# z$`Ahx)t1L6rZ`?zt&P?BH2lJ-Hsb~{g$QHY$_g`faF7W9-0`<#v1WBkP9^Sbi9_+M zP%%gedV7k$taCFjg8&dWO*xw{4SRC`nXy{s<>5YWFS{|QxMnS}V5Pm2u~Wt<7Qn&$ zJsp%R7EZ#GId1cX9$N3)XNd$x&cDjoxl?1XzugX8M0bNP>ljd^4$XuBtYWzmx4aTp z4i*>Q9E{CZq{n`sr&Wgb4*iMs;l#STmTNn-MzPQnPh~Uf<33g(N?F;6^Z#YRwu)7Lg?#fE2 z1Jiu?Q)P&ow%tFlXd$Ynz(2FZscvap9#h8pLql2gfG?#!#Gu3nko4R~?&1ZRA1E|M0EgGEpL!jC z_jHWGBjv6d4b=_wD zaAg}T$a#`~=lJ0vo5ftdjmK*(H2e2W^}RI?U;(BH(4vmGhlm(P_$1Dz5aQEfmsW_Y zLFGEueq2<660e)ynQ|Q6T~O?%F#M(XcJXC0Vo55?G_G%q=s7QOe7Js{0a%{OgRR(} z=HXqlHgsU;%M`ni7TZ@>l1FfKpI$BfPP#m-^u zSTyp8dpt4+&;pNriaBo<8Di%Sg2^`EzKbwx*AV@XCt|M!AztGlh;#6B-b}%nT;e(d zaML8;d8PK(#W3Hh_mW5%2#J0om%WfSrWjCZKtFV8JUBVLj*ZJWRHO?m^Et^uPF;4U zZn-Y6lS{Z>=;LOs!W=Ys7-W*`mBIiQspEmFM7QpnpLso?=H^P454cCS9mDgC!zk05 z5@fOTH3mMq+WinDSwWGRFsz=ZXT6iZkw7j<|0IZI3JvzvKV)i<7Q0(V zT321_&+(pMhS#l+7tFX@2779&+`(*Rp9&N=9D1_%t%hhv{<6U3$Pky$PF06DH}v{a znBn!4q&&(toD7L)bOj0f?Vkesg_f!n{p=qTRei4eGh#8#}D z$?|^Ob;x+U*7|xo?y1(Q+Y}K#c9&8V5+cU|P0!jeO?CA6wQc^QWm#^vHNs&WJMh~5 z%(G>oQ`$#48?B=(Qxtw*7c^EnUsPu_$I?B<)A^#OVbM-l6(TYq9Z5ce0N&l-K9@{p zk8o0V06J4c()732u^4HYDwKW}XN-FM=E_%3bEm-J7ezLp?3;|Zi=j?o!td1G-TefV zB-@e^nQ^+sWV{_WfQ>raPV}R?D&)5OSR*N6U1wJ>y^~5|7u}+5x6W4ND1eu-)+kDU zYe%o6Gw~5?tH^C$Rgq|6gJOe9lK2P*DWyUu`mbwW&Ctd!s+B2_eaNtM6JMA8mHXN? ziWpNytWh@j*L`U;r6eQc7Lf2@POMYTHh7b7C7n-ez)+!_aP)t6lAhN>8 z-x9e^dVN7p$1-k@c5-C!)6pl7hQCvd#PM9Fr8+^avlTQUa?=PE?UJjdG*i2AHqU~o z$UgMKmEE*}<0LwycipsTbMM$~^dh9hn+rjqJSsM{(g$x7N24E4zBD<${Nbd(lgU+s zr*G!}WAClQs@%Fq(S@Lxpn!BKjR+FbWe`dW2uP_22+|?ah)IJqEI?_H5D*ZN66sP> z8cFHyI^$iS?(_TH_dCzM|J~=j&koibGsYZqj4?+Z+ty&(dHEzUJ$*HnTs9`xg>2H8 z@_pE)I1rGd*yD?Jl^o*!x{0;MNf<%|~ zqFO!Ui$uC-yeiL@xDVOV%%)FhC~dUiTN*D{6=Vx9KWecG-_V6-wL{6c8dO4Uzbx^7 z%}O18Y|NmQ2zy{6#k7T;2j5+%@S!<1;sw`JpuTnDS^is*VvX_ZK=(X!-OatX9{bpa za~pz4(EZ8b(-m~aKv)O!e39Un-ztjN1BZkANW3Zvw1sO5j4reBJ`u{8SKk}=A+@p4ftbPW2UJBa zEd1YsHitr7y1{>fRD*lFNbrACldh%Sbz)|D!bj~%&PCAGE~RQb9feTgSJ)GF2d!pr z94bMWHM;hby@Nv+Kd8VrvYn;!bc;XI5=I?r5ePE}CzTXcfd-B@!4vT#YE5lFsGhqM zs`@PXPJv?2>BmJKjV+L^h|o*PmefK%mODqMRQ=i;w-%1rhagZK-ch z5OP+6TTyXJ7Uy>!L~A1{)>2$uP%X7N72K%3E} znN0UWWBPzfW1vo_cLpiwh#JE$vTvA-W}UcEr#CJseZ4%ik8-k1a()SyH@+MU+&fYJ zGyTkP)LP?X=BEZ=PhN9&U%F;)d+B}`M-H*`ckcIiqXjDyy<*=uE(yi%C@tkqws>lsqiwj`~viHfcW^N#hAX zojU8QWueGE*?TcWvvCYx3`qN{&E3>2E-#-);Z7A3T3&DaX2seqHw^=0Fq;+IgowL)QpL|JoyEuqQah@H9?BwHjyWhXL$pf-`0>&@Y|%*TNrOK?PxA?A1c9ro%Htc{fn35T{3+d`@|&sUXQk9?wvRbv$<@Z+K4{&?liw^1XBzGyHKetEcoJ(7^%(4=&+&rhJ*xr~OP z)7EOL76*gaR+8Ix6Jd@yLYgHi9nl-agoSmvM_W8n8a0;3@}^x|mHT9uE(lV65$llZ zPLb-%%Otq(%4gx|BD*J^5evYg`^?=p+;E)dpL%?BmZ z?=EWPup53EaC=(tf`Q50Ty*KHx`e0}S zXY`&UC{8$nCN3D0^a-DsU@1Oq`h17$%2$05DOfoKnF{UPGcP5YD|{Ro_Zk!>f}?6< zu15-c^`wW)ywlsSs&Og+8(U=zd;zh=~{7a#1 zGs4WEJSol7`N@_FHU{N=|Ah6*=C+e4z6Zp~-QlJkKHYZO$NzlucBFdZ%{NaHf81Mg z-0sliUslq*nu{YMEAut4CidlHQ`y;T$HfR$S`0j1U}uq4eipEL@V?Yol1YQD%|PYY zH%XAF)fJ?>Z%(J}5H(%ouq+y5)+r3DVvTOrUAj?eN$OYiwk=f_&dT8T>m_f>V5j>= zqvBnhv)ZFbiKG<|8lTif!4!W)hAFSovVHyTNN^Lou7qjYE2`7mCzq2%+k;ilnpy@8 z&UaZ--P`^e`&lqq8NI?_?7wVxS;be#)zU9DUUjf2V#VY2p5rXe!K!_`0yF>X?CpD8 z9zrXma`Cg(QbtE9S-5XJJ4H~Q5%!kTlBZnFdLw?6U@0K?+ zhS5(R1G$v9xpb%j>5hs3(XE7490>@Q| zIwhi1oCoKd<5LsY4X$|)S@GET(0k*{eo7eQ9U;~8sXokkRNlmGUT^90+KA&e^Ov}| z@Bqw|3Br+B5$+FjuEQIy^eU^bok!d3ek*_?yl5vXSpZk7hW}jSKel+YP zz5I1ZZhXm+{0zBQg`Mvt=jiyX?d$5I3%ni$JVEWsH2PI+U+RZPD#$YzoIqnjcZjTC zT8#8y((KJ}ovQCGohEs`W_2e2wdYc^eC5Ytm5N6m$93FaB9XhKuZ8~J&&R>uB8S&M z4W}-H_4ZH91}3C>MPUr|;E}DTd5|fw?C9IX3f6k|rB3>m!hC+(D`pU=fVk!TZ=p2c z>H^V2U_but4-_2}qdMg$v`*>~KYL$lIP+)iHTiPK7L}R~PVH`jtGv@jf(*quaqHC^ z?Zy`(&Dk8px678Fp+C5{2p{gE@}pLEwe@almExgPO4eIk*LtqCUI93=AAGRq0*vwc z23K0DU&sE(+b)@}T#w`HG2WiY4T#&mq4q4_qFJaxE?;_}A~aScOOhMyM`oV@N8pSH z-Gp^ypqS$`q>P<^^yyZ5ZN|T}zpsP`-B*#ZP`IooHu)6>Nis500!vTwt`_iDd}YE* zOoS#Z_@K*1yzrye3^?=u^EmJDQ(i+Y*JZxrd;XL$*`Z1C8?CsmPT9BXejz6zsK$A* z$m5jrU8&DE=dZkrM|}8I9S>H)ap{`@4OKn=-N@+I4ZcqpH|4snV!RKL7>s`ee_>F3 z7z;VoVM0(ap&cjbK8KSMNSq)OkS7Lx>KD3g${WhkOqPyftIYVQkkv ze@RI>&Sj8#cMPm}mA4J$Qg!vg67XeqIY;AjU0t0y{?8XpsuoMSB`2a2Wrj&&d-)RF zKjO!W*cP?`I1hM{gIGn+`fQV-L@q?rp5WiM2MG-Z$5j4x9A4c*iwFB`=HSzfMTg!E(MLjS};Lf=sP z9~*B6e(L)~MKz6qAF=S6e*-3Bz{ijTHya2R>-N_cEMYr#<_d-K?DGr6zVj0Cy*zJ| z=9x;KCZ_03k?Hw_Z8y_3och}JHvIFwN2J$&7SR#bD&3ZB@#yG1e9iPU<@pvNg~vEi z6UoMb@BOJ+_ywyiaTo(V(0L0s|ALW!Fxyo_?ZBn)1aFdTqz|9XQk}Ru*WMW5N@t%S zP@?K=LAB1{ax#i;wZf*5;=vcKIU|Zbq1LWPLzzGMmP>fgQ=Y$h%)E=+Kss7o`U8z z-_r|fOF3U6{LMcppIzGg_$f9))ywl4hCa!0GDuQ;_I|_fichV5aHuXI$%>w0oG(}@ z9{0iHHdbG}*Zl+{>bRFmyc=FVI}8@rX(#K`;OI7K`jDqbiGwk=`DO)$kziD1hIeN79h`9~L~Xu1j+ta@8NN>NtXS49XaIZ+HLwEX_*b`(siE^>WDiu7LRS zG%w!D?D#GDPYv={%jSj7Dnk@(un0zyfNhL43$y|8mxf3@BJ|8Jtr?}i&V`t!@`K;h z*`gG-sae4#&MG&yjMBPogZ~zg66+yq$Zw%Tpu!eek3Byv}Y3^O>N$>#j!` zDrTSYj!G*vyF5Fge7@u}+tmjq)CxYXdc@6Jfe(A`D|~Dg>1tIEhz_&4u&7LPRQh4p z;-YmY;lFGOB(CS5TQQD<7VX{0guOAH?^MfZB=DoqhS~l;_YL1`QxX%r!%R9KbZ8}5 z4wVFi=Jn6k>0tc}j;&&NKH}IV%?}ZtTKQ3DUUNRW>+~AV)|+ppxc`MBfe~_VhuY|_ z2D_hZp|4P9DaWQYXk;yxAnrn8&ai)5!m+2nK}+8233j!xmHX1D3!{nByBb z5AH>CA=dAI(pUki-^&l7p(ecN@E~P?u!xB1A)E_q4Tz7&Z65OTp>_Wm6}c}^Sx5Yt ztepRAMN0qdcaVKR1b1M5Ug@TWrFe9>NltdtztF-KjGh5(uLp54!mr;C3rG&ZyNx4` zr=ikbH8gLW%ZdwP41E5Npkag`!*S91H`5W%{tRMdqdVyJ<@!EA#(ZWH6G+I6h6V2K?XD)x* z4MJi8^c%sebN{+fNmajlO<%ar!-@wfs-$hcqe)Q;3JTd@Jh5{+O$vKMu0Yi8UxHbQ z(9{@@93;H`UH5eSMIu~?JB=4Ikw0{ME)qO)2Hmu>AYcuTO(QNly)^f;cG~ zt1=E_L2P*}yJ)!VJ-gro|3(C8eiH!|r4U{v#9#B3eAfEO(t}G7TLj09f7yZ9zhx*= zyd>ksbD*ix(beTUQ2LNnTStc&H?bw9^=UJ>BmY$bLt?G=sqgedp~wb+)Vb*BXkK$H z+AEWzqlx?%$bITnY5$XS2vi}`Kb-GiSO}Gcxb$nMG16h&4-3?=fi{x$WY`3(3(eU7 z()a5DG*A$XOZ6+((M5Yp@$8E7@+TRAsP;+Q){+q;BqILMzfcd%toLNc+Zd(u&*%Ow zSps_Ej5m+F&|P@|!T;yM5c<~zRF-Xte{J!|yh$ z9!-EGA7{rZiMW(34xCT5J$LQ!nd5!y%NSQ}O2qO8u=Dpnb3TrrR_V&nq}d@HVNub_ z{M>t5HHEAvfI8|DOOCO+(|BK0=X6$uv>3fE_4rIXWz771e0&-GVgQL@!zLHR;GcYP zoXEaDj)w(5su&aMN?1yTtV)$}J3b9L2jp*?2eW z=ki5{>Zp$x)|T?>jv{9K6fc#DojaeN9DE<<8NG)?C9=`5Br%8_8WyDu#o1 zR6dH-h~K|5UQ+qoh!@Tn*=5odNha~ALw?;sq+kpEjXJ1UMv*9aFKpnxP*u;IPvkL+ zHc*0z(2{9jg%CY`_)FQKTrEbBx}(jAehBky1XdV)@_qf@LHQEme)g);a^x> zf~dNUqrlbP$EZ^xusDc|3=aj02!@AOcb^Gn^D$uq@?0%xauN-_s5*)ZZ7nS8cRWad zITd{ui>Uf?jhTO(q#p7iJ<5|R^T<4Tzwcoi?XrYBY2X^v4O5YCh}~?_FXR?RSi;_Z z2efn?r{bjab;#n=C7#orpxRU4fm(I!o*OJcRaKRFGe7HvC1yw^#BRdpB6L)K^PJ(u zb9Q!iFQZSR#M61Ur8UYAJJ@0C<~@+yQMMG9 z48l3k7lJW?GV>z|oW)+-_uJjA605_ZBz}keMp{mD@H~rbWcqofTXBqxR5wQ@&V2vi z#-x9VvN-I`c+fc<_3)_rGp6f$J=O`-kI`DC!A>?WzSgF^6Bx|Pp?XIVDA6btFxOIE2S-Zm@ih6Lg8}5 zZ68kfNzV^iVd?oH&1qY6GeQ1{M~8jZZL9TwTxGN9l81f0?l`zdeD_|gB-Nwmze%j; z9WWqm;XiV=@Av!$VL;p%~BP7~;fk)-}GA}QW zg3s)IetuOdq%^}^sdtTD=jPfvIc-6?Kq1=+6OxhVpZAxB~-{PfAKkMnp!s zw)ETB+37;b1nd>Q{m*WbP=1FRx=@S(DX3bq+^z}fCLxh%9S3CNB#|kFLLZBdGMz-| zVzaX5lf<@-iW{?#?DWXxrfu;$HFctauOA&2R;^B-Up_uD(FOVECF!%6kK^GPSS&{F zBqk+|4OVzX#+K}V1zGT*3iL(2fSsM4m;BbFvN!3N&`=&oDWxkq7Vx}Ho_ApPRxtnd%F||MS-A* z>?tKRH9N@J@5G>I{R_N>1LCHp(~$dhZq6c+9#WAOq}Tl@e_{G!5w*^G@#4kp#1f+i z4=8A8I{G2e7v_SLiMhEKm0tn%diis5vhK^hd-v#PzBEMgK~~P38xhgbjd#bVI&(BQ zRMpg^esx68@6S>L>2#%}q(BPi=CogKQ{(2V`AKg^7a0#ZDBrw!^RoKpI7}3ZZJPAJ z_Qzb1i4q{5sZ-R|(n5GDJW_alI1qAIW)*0cxHv;L*G_u<@Ye6&`8hcQ(r>7$s`ilV ze@I*Q*jok&Iu}n(5B=GN$>WOIbsi0d1_q4B;_F{Eq6G*~X)tPkdSp4-p3aHM#tI*b zyJM3@I6>~+?d|PT0a&$AQdu6&A8_ru3AqNgtb)R9SMIsRAjmgadC2z1=Vxp_fU#%KcE>?7PH-AlKfBi*(qH%+t-^=t zg@rv!Ugg~f%!SY!?Ot%j=s?eoq1sZRs3#$1r{vOLI(gkxoC>FU)( z=hmyd)$WSadEN*3YinzFp4Qjq;pCi$N;L-NM0LMD@*lV@gg$o zfvId7A7nHI#IE-ISs%`Q>RW$*jO{n5lB4%)!66%AwaUoScuRPCYg-#Yar%4K5R?=k z%l#r4;MxE=9Yq1XufEUC1)`Cg55-nSe{EWrAeSZ?4NcQihO@rZpyFr^GOFu>LLGBI z$_uO&b`lK4c!1elxS*)1N%8g})*yn1i|bXCqOPv) zRUi|7Z(Q^h?`uP+lf#+4uaGuw~{T|>(l^bEL6;v1{E6wQuN zkdvtt8x)Sm!R`KWZ(%4qElH5|cyeL_Qv5EQtpGx&W+H^%ay2nFMu;YYRgfDx zuBb?)T@-ah-ppKjAS z?slDxD6*@uI~41VWCitKmyx^x z*atWmUNO~Mi15BE;p&Iz=;#1ZJ2$Rgg#_I&m~1T1i}-F(h-A8_fcyH+T6*<^PWuuv zx1Pd;+2u9)Au5vWlFgW*S+$CCtGFex;*;wtX4g^ogkH^llv^xfwMH>7u}2J^E+t|+mrTPBxgDO$ULB~0tZg5~ zyieqiPCgWQND8>HrFk#|3fHi zZzs;zmkbO&PrX7tO=14&6p}RGUJQo-eWLOq|2lrx$P_`T>eQ##S|0^i%QVnX0;tbW zAM2e`8NL)rzPPl-b-x!Q1c4+e*QIF8B;D}Y^6?$dSMU*_+s>2)3?LbV!Qy`W{`C$m zVuHb8?zHv3ESqIvp=glT>JJd0eO_)w#mHPSm$0?5xmr^)QU8GFfsHpOBgdWHd#R5! zG~AU_^d){4bUvOMeb^H|FPAc__2dX%#rdAvnWu){oRaR!^!wc$zyGnYkgj3+WuWj0 zOjm{lyZyoHjswe=a5dm`#aMu3?IuTP%dqxD)P2!5xB?MWr7do}LgrWI%fH^p*c8I5 z)^{(FTToE2@FXk;JwMX4WnAn3kZA!PkY(4SJ0$zZiNCi?KnW!gR4NP(=H^#4?=w>P z9q|uF_v?Mo$wYDUJP;1|<(uzK$4O1*Y<)aEuETF|G)bNu$IQe+J`nI}w zYo*^*4JH1Z4rn(`$!Y6{Gd%_7{l$;e&4OH#I7JJI7*O{_7iJ^9GzUQXsQSD<{Hl2M z#_;y&*4!&jA&GGz(I?-iqcg2IHJ_=hI~+Zyv)$?b8G8vaA&>SC*iOWxoBa1xfE&lCpfr36;K4| z+9wD}ZPFZ1Kl#$VZyB`^qSN<1GTy5D$FTO}PkaMCS4y*5U_rw^c_M$XT5TNy!d zv=1)Z4u12EE8p!mB;jb(=%`6hg;ozCt|>&VFW{*$k{WC@YPciiB+Bwe6*r zKd&v+`*wA8sRuy`B}p>WyU$)S?1rl%+NV&Ur@*7+Kk4;KEKH1g5l-sJ*uH-IcFL={ zr-$$_KPFc}!iA!b7P6c1K3He&@&OleKw-$MimECV zzXdI^36xgKB1I{#KVuAir&WDd6or%xu64DBJ`q}unbD6V#kSVgFWFdbTKBCAQl9h^*P3NsE%p21HOaSwvF*bFJMFqw0mAU|&=RWae*m=ycYZI{%!`?!FD}7h;S#$hz9aO76i;O7zaX{` zDO`MN?*-!r4`dA8+4xY^5=^1d6>OR#Sf$Y-j>Pl8j4=C_HLqVB)PHHTsOp5IY{wid zaZushjK)7KzDRMGWgk)|o!KK;hDt?igI-w#sM|XUOeASqd4oT&O3!6};%ahLRr&*j zoxK?j?oCS01qKFjW}v2>oSrt-ec=YRznpL19#|Nu%VJTj_y`J2z>V!a$bE~GI){AF z7z^cSy3x?YOY;RN%Q{;^Gf4wFpMJ2RcXb()pqGK2{efKV9^`m`K-a^0WPVUI?D@Dk z)NXY zm-dwQ!!_f9YzlBDJd=rSzINWiO<0e8bl8~&^L5B6`_pts z7t+7a&CN|2BmI;HkX4up+%W4Cu3122w^&-451l@EUmn_HOJjz9dhl@SlsOcoF;IiO z4Fdg%&!_o)uR{lS7AY05U9duk@%BdMcHW}>?haD_%1vs8f}EUjjIQhwayX^u_xmz| zg(9V)@k5SM>FMcNT}V>{P<`1;0M4tRA)OaTq27iMKNO6BossFh7SE2QKHFQB+Haw(rJ8LPR=yPG~q+9;!B@^FGkx~zYl=}C?ZG2syOx=Y{Cxe1+dGTH^sB?g zI$@6Hjn0jW!UZjxn>|JX>@<`=dsr-L7BxXp}iK-OvxVv2q7>mPP^HleKbRtuGa$Z{)C zxHTveJu3KKDo zH-{C3=CAwaIBuaQ6x5KS*Sbv!BL@P9ycMjQbd>3Xxa-4*wG(CdZ6{i1wri4fw+2b9 z9}D<=%U^vbP&3{*+&DI{ep~R7j(<;53&F_KNe1uec(LV1sqGe^YJR5+m{!xO&sB}W z(5q`-9RKM%TRp%&6yg0D{!nMb{vjYE#5L2ceeTs2s(#LNnf33_7y{9%yIV=8samWe z1YP`O9DVZ8ns{LW%kxwny|G3gdOw|6=DFE_|D%#p#^6lFU24?#rQO$BU^HT*g2VoH zw^z?%R#1so1s)110_<~o-Dch+L#N0AsOc$Fk6RlhF2ie3+i$1^s>=U_0^P}>Ct)vZ z_o(kIwMTD#f3R91knc2fzq&!|{m8KOkGS(3jrlw-G8~~_m1mvSTb?f{+r37imP6m; zw9n4c=ErVjv<+6J^l@(G*cv|ia385N&DHb3*Cx?&GM;--hibJ=&!GAy#~ZOcDAdLd z#gCY|k~pK9|py?=l64>7E1^=9Wy0jS*#$VjM#}_=pY^cF4(CKV6~&6zgM| z(kWGJpVtl*Q?ilNyA#Jv&SJXc%b#t_C~00 zP>CqEEQUOPM+1lPA8385KcW55E;*xQv#qm+hk2x8M7DN?yJPx#l)_@-+p2m>-Sg5D zH@j&HJsN%FMM*RjiUSAIbZqgsqIM^0#-378Oa}#W%**vQ3oj7s>*V%?EHm(L=R+xT ze~cy)fe=??DqT-CKPPUD|MZ~m@zq+r_}U$w>0-lMzOTOB?K>+~oz!unY~poVOMj~b zi@>_WdvC$X`|r6gr=7czn9n?W!%WFsQ6t))0a1_w)3rv3%n|v~-iS8os4G)yPiI|aMNmgHM>bHKR*CUOL2oL02I`MHvE`hGJQ_kCcu_Y6Und>&=l|vt48DUrT zgAo8$vrB=8(K6zorO*@q(mr>Xi{pXf0?m5Lmft`KpNlay(S{SUMElW8s zU&*Cmg_)A_3l;7c<>Ll|-NW@Xc&oZCt{FB?Q)!pSuHD$KvSr|y+>yW_4#pG&l128( zcWmdh%-y+*lnjpwS-%!2ALh5?ElX*MS{_(b;0TP23`2%Qc?6FD{V{{~eB%ZNi0U>w zFE5rS=Q8oz3io{#F4~A#;;CX3QHHee=$pT5gS<>-t7o1FwKPR8_)&DAs~(GTDgKgDgC(xe$&TYyjWY2M z5l=FKv1AlbA665vklU4!Jtw*0q@iGpY~)J6vn~VwddQQ&-_5m!>DfJLasfUuj^DYl zainqUhs93i*p%ZfhOsVxa2G-Zcr!X=b+s)feEGw@8=da1c#O;Hj4kJ%DYFOW#(SRx z-BTp=2M#V?)+Yf9ja#R5w^z192U@eN_cr6`-ewe};^pQsGB~@q8ExPjI5bR=#GSGr z<;6Ua^L7;NRNTDQ-N`|iEzm^{Gbj~%no06bodQ2L^+|(^yE1O{qLh<{J(nSW$SE_i zvT*8W4imVBt`<>r+#z$i5 z`A-9OfT;<^#Eb?<-t+VOm_%b27f}AG<*-p|HD)^W*XcW0b zh8sieA|}&#Vez>wueE`DOO3AJIlRq@hJt5=*>rfaK=Y(65XM_WYPw6$zdRst%TTRL z;E4Rk7|BFyT#UsDh{SQs@&q=hjn)ewPFGXGMIR_Q?q5@GK77ecvhfV3qUn>3V>_b? zYwaZW0;2^UoF&}uNfl)@%=W;H2#eU10KL&O9DYPT&trS|$DB8nq4{=Pf>Z$ZOx^yv z@jk^+eR}J0CN9;~AcB-2vRE#bPS>=ZEu5tO)z*Wqam<-4UERB_oy|Nv)`Llub2pbc zH3SQM;k!A7=Z1}Fdsp0o(|qe3DK2Q^wmO-R(;*@sb^`h!G6r_pHzA(-Kq3 zCrQn$A*he^jk$ZOqCr)(plS0wh7uyMvc(DLpUb4^Vk4*Lx4!A!dP&2zSHksbc%1Da zeOt#4m%)~67FJitLocZ5anS7Hz#jcoPFf-GTI$$pTd!UBvrg4??~n=Oia?vo5wjwrf9jbj_j|`;c=d!g_&njL3=HX6vHoFL+^lyNyOE z!@O65xRM7~-@fIe?E|s-l(>S%E9gzlvC-gykgeHIzu>;lZBNFRoRS}1=2~vAQRZU$ z9@Czdq{9BD{?N*XpP=n>iq}D@Z=KSNhQao2UF|m4qnz}jqSC6GobNy9SPouZTOP0` zKs&gOVgvI;AVH=c9C7C+AXdr)u?^>IheV@Jv$V`_ddSMtKA9YSofa+0{>gs92PcVB z?`vdGwR5#c@B?#3pawt&a^OG<1T-ma>zuW*&rafdk|J%@iP1J&_smZc;d;hRhuW1V zrnb2~t;iQ&#YI#H9ZhOk9j4t*X+z7d4s6pz???*4_uxHU5Tk520lF3ZsfL!OO zs^$*v6y=)m8MML7!X;5{XMIBv-KZ1Zl=mX6(+DF3Osvf#1yw(iXSWJe^<-$N=uzjO zUBed})DApaUpUjW%$l}Jx)7hCg=!;hO++UovBPtLO*s&QNAKH_EFS!Tm zRxirfk`dL*0dMt5S`9gx6#DMo)lQm#wxN!lL>Dzz-R@+~h1S5PXM8V0Y|)V|lTSr` zsGbXAs3`DOM2Z4*;C5Cmo}cn{QXIpg(@j&h-5ye?N;A|n926wnrL4> zT6sY)lOk8j-fR4(9Wm`n2kmI$bhK;Z1sXoz{^_@gfqs6yUzz*cwtj@q7#HojT$;v4 zL}T0|jVgWh0t2xM?#ipC+BM1(u|dZj7b_Zfcx<`DHteDTT4yw;*rjTc*6(TrG;05{V|E*=)@vueeaydq)WegK8@m}@YP-rUR_Sv+C1xM~k|3A@@4QvBG*U?J zsF?4oo3E6@ZMp54u&c9eU%G&k5!+E!FShHj)o5b0`<#aW%|-mv!~h|J{sZ87Fr5{7 zoz2r0^hRjGvy&X!KgB+z(zB#r(%20ziF$0TEz$BpB0WEhxHQPrmV9XDCSuG3%#B2j zNOmEg^(8hgv;?=l7%5*Wp&<;NQNTcHMdcW!KMNefNcwKZS8nH(e1#TBd zyD&Vin|ZQTca7NRDC>);M%UHq054<8PmaUAhPz{#AJB_wLu2<_I^|spCJ~_T(G4ZX zP(8=qrPzRvgJ;W=1)opEsQbn&UW_OzDD@R{>2|esMf3*i9K^hIy zDGoBU6nIEnB(bB%@6w*h&d?{t5FrF1ZtsM!>dW=@#sD%R14RDyE^6OS%h)bnJx+i| zwAlz`HohlHC_K!dK9{|u=*~?8v z@8g!gpHuda42GM(j!t(YWV^;*@G3Z5Uw)-v-sTzfv4^3m>0G2=C;2%p1Klaz-y?gy zmBB9n{$)oa6=uxA$GOte>Ep|WYcOF1?+{R)yHTkFUXeeSILR*Zsl~Vcc$l$N^E<~1EjI|i>f%oG7%evMx--_8fzP+eS=V=k+%){U!( zE^G1*u&78|utGlwl&g;qy*x|k+R46I>)V^2BjcpZNXd5w9{f7YCl}SdpOoz-=hdxw z{b<6x7VT=+-&tM#@#e(<5~i;y*ozg#&v23s>;tm?f^W2-ZJ0;3oa{fQLh++Dl`;FG ziE)^43TvmFOFZ|z3=XePiDEq&Z#Arjw*t#Lsq`yk>@C_v-EoqTeT>X3N5VP$1e?q% zFXKOkQ=R;<7tVpT-&A5eb5HpXr~vFQ!HmP~>jgi3Q_LF;!7MdzFlGfgiRBq`imC1_ z)*5lZsW#N4H0OJg|G*N4xd6G&D`+(9?o@EBwVcrD)IVneyBOsDC)Y3wpb%dx&VQ$2 zV=!!MQv6U?+>ha!z{tfdmOZwQ>?jobjJ`VoBKO8%y33-IKN`73I-4P*5zJvQB~Y?l zbIB@s%FEg$Gl=rgCQNz%`s;}Pdh^dPe|PS*_Tz;f9kP>AZX8ZO zj_HkqM?9q+Ins7(XDTlBquVIdR5xtg0r2CmRR3u4Ox z4j@nr)%<)Dz}mMS=O;?O*T$!fiMRS3hA6k~hyn1)b=}?88%Lb=K_8i83C2s%*0y_y zfV;S!(FQ5%b_^p-3ke#4By?hc3qwNiPh)@H) zcKyKvJ&Y)n*v2l=eFvU1=?W%~)u$R*8 zu2r@9WQwj9G+nc3$3qQF>h5l6nimBtwSQoJZCRJQd$UOJ{CC4##)SIGWFXjMV}!$%rL3SAg#uULC;hAau3{zVZMZ3r-Q1kQHuVjd zPDJqcA+vmi%#)~rV?xEt>E=F#L`ZvX4c~OZOk4f}-!B2EWG}Pfg9nqKw|AZ^!>wXO ziEho6^YuF|BB)nU6Uap4@bgU;)5ZopI3hEWgvcrcHs)5Q%5#WB=%Z!Xz@~Rrt>s_hGG*r z3+!EygHHBU>fAtW_HO_K`}NoF9r??gfjs!f&EJy*F7fM||5r5PzYvZ;Bl>T{{4=8e z^I`t!{2ycgbMvoM>#sNe4D)yA7URtc^EDWlZOyvwQt)BGRQl`~No6xEX74F11l$8q ziJMd=vt(yuZ>`m%uBHdRMU@&>mL0-So&Y+j%4VV2Pu$=s372A$0(W{uO&jttBWmuu zo}W(wY{!l`%v0KyB>h{bVM*AqN+Ah+V4JB5V1bw)*!khQH^}pk=c~o5MTq?&0Wq1l zZnVSz(u_9ly_n6ToEXkeB@?dL@O}d9IxtYTu^88#uWzpCjjMqr3*U9EyaT8SSRW~H z36PJ(8Kt@9B5Imt!+jHE6AUifYT=^P>#>Ck>+j||{u;~#`yg?F3 z-54z*R9U^tKBI&3J_!AU0KLm`)5GjO)V&R!z~p1F9?-x4fK%#QwajRK%e!fqHfRZx z!bP=VH2~splAHxgNwqrjm0CI}UvF#(Xau@M7$45qaL*`FmITuP2m;{+9E}x-ArL@T zQmNAf4yhH9U{uDnY@&c|062uKekoYqDs_O~+~NV2uy+$$K)He0RmsHMoI?}<`m1Ny zO&_dAYF`cl^Y;?PY!U>SkWKaIXt1GDFZhi7<6Yrrsk?08K!F+c-fI@i6K$4yNeVGK z2yKUV2e|dh5ncq$?U|(>;wGSuq0_vg7;Zl>5~@pmZsJKYVlr$;cC%ZB_7N0*EKEe< z%>rBMI!xh7GHQ+%`ay0@h6wEXq!@ z32~puKm-rawxQl3RK^0#RNo$s)CN~Tj!?^G$8tB81gy9!l9-> z>Oujy{O)&mb=^vX86kHo@0Mf19QTKs3-1D`sIMX(&LDSg8)72j1}>@WH7xwB78%$- zI$EAJvT59_BOg( zsE&hCPa2qPVTBM-V@9+Gnp+sIgdvJ&fr8>Xv2H~$Rt zAD#d8<{xVOXGF+O+Q0tX{ND+0DFl^(i}4b~B_du@_+ndgBAeh2;eC2_iW`t`Yi*v} zun{c!yC0m^7d}LyO2NL$uef`u;L-dbLMlx#9iT;>Hz35x3wr=U3iZ6VW(UEkTb&0M zpJ}Mn`%qOnvQj8$ZN!8*J;}!9^(&mSn!%^!EO1b+2WW+CRKGErtf^sUU^ zGNR9L?)qUzzgpwdX>DWN{dc@SIojMTKOPs}zlDzi@v>Ev5Y08#|7mrZ(|Yy37;}b0 zliMr$YnXqwXN3mcw+Dx#?nZHblhM-~f@sa#?#gv2!1z)eCj3i2eeGm{C1-E$P$ceu zGOjl3xmqmh0P&aHWmu&^hzQZiKco~#;$Aw=nlJE`vu-)C?6rQacF4k^00cJ>mMF!^9Gy(bX*PEz6 zAHmdree~Cx|D~n9=G~sRb)d7`iCY+_+LR|9gn0c-lXcVCKL+c(yRn{4`UB}9+3z~i zlYeSa#CF$vwv+6Zv$6Vh1tY{>~INt1aT}^1l-am5= zH=|JdI6`&y;jkBWtVr?%abGH}iIk&S+j(wjs~1tlyVUw_BZ9LQ>1_{YhZw-AP4hS@ zcfUpT=a5Cmh~>m_&WJzHKNa5TU|wm%9hF5pep!&$aJqK&(ftnZM7yhU2=tTv%HY4K z0iWIXcZj|(Lfu7&m5iUydfU-NMMxuvsRf04S24-!Yn9<-9KGF8EBc`1@0nv*@+1rgWk~k0L~O z@q>@%;>LQ@$Zmx0D&m2NLM06#|5f3?rt#g%Whu#dQo-XI$n?tN}qlRel z4=e<3pKfRl^?jSJO&Z;vd$U_SRinwe85U#gpeD+f>Nm-uv9cuKrxjqkGg9E`degov z?I*6PGt%}R^oEb{^t%pKQB>M}EMQ0!;Q&@&08MgY*Ni^jutx=^Wv z1ym$Aub6PHM)uTre$(dYmjWphi*hNo!i}P#%xw#oNoFP*UE5YkbDsk_`8zg5{M&DK z8zv3yx7oyGh(6r+8nPNuUNKw-#JMW4j?K1q$wwU-pY|1ORPMG|(9h}A)q6lJny3C( zdDj8eRJN`&Vns)E6r+gXwFOZ?MWhG>XGBI3kO>G3C0yw$9i#=4K^;(2I*}R@lJNF9$y~Vi@z%^*@80+BTkota7H6OR@AL0}|NpoD-TtGK zJtFJS!DX6^SypD_rz=w>vKFeT*|ZTa@$Ei!As2&q(dfjsnAJF4w%&jS#qEOhV|GeK zG4(^#>|_nVqbK)$Zo7aHm}Q;}+GH%K=sQFbIE!l?tVjY__F*MTN0B#fL(Q@+qB@n1 z?G&MqKecbQr0|DXjAGHQOTm~^fQw@SJUs9As~jMT?~(MOv$b`4`ZuOTF(+f@9egtT z=>}aVzTPrOjKuizJ{#+0;m^Ct{s>5c9snIDto!J;ACPV#;oSH4#e8njb#W0*{NDI0 z^|MEPQ{KH#8{&J6?f`B<`#`9&h17cvCKd-yAG6Q-HE%5Zo5UPUdlgL~p=X*5=e&$W zc)yf|tmqNYrexEpwqG?b`#Q5(E+>O>2cOzy)+LkJy3(~_(=55x+cBg0A72YB*UNY< zf)tG5fl~Unk{WxDwwxGwvoOSy`=UX4k=`+!9Yn^saUiJI2NgdEV`p>i2etcE$~t+@ z$LveDXF_c?Y-0@EMnw6=zJ#QXa|Tfo(3Ul!hM5)zSr~QxGU9@)fcCi&icDjmhcD&; zK>c#UN?Yi)K@n*X2r08!+pP~&SfSb#s`c@?{TwGB?vd4yBTguSo?AyhJnqTBOeI}h zgp7Ljz(7*Dz0JiHw~6HHncPt(n-pX}x$d*CyJtr>IjK z=1~CLJqf9Pl(7v&d~azc^PpOH^E$qjf;95$1`DvP3eDN1CNFZ=L6lnIxc9 zoZnitN9VnEl~&#ljc%QP({#z)WGt2fHA%UQ>JF4i@DE5C03J+_!{bxnFIeT)*T_|Wu2qB7a5Dc46kA2)9z{a|W_o?m&+ z{&;Dhc^E%)N`a=WigG=ngxz%LZvr}Oa&lF75`+_=H6gIoa@vFOx>3vM476ihcW$KR ztN(?iY{xoUNHLqJ)XloJVplO=26fCXs_kHL$63^;0K*OMM>EluoV68jPXPCU1SWb8 zs~f9f`RZ+X{(R0N}mn#7W)(<*7_7@ag+e~zY3isUA5k zYs!9?4s|cW?$`A&hkhN&ee{{9SEj*<7P}*x=_U(sQ#`4Sq8Zc_V^9}nvKeF-A|m@n z$}P{R2S7Y3mmR+qNYTm7Qxc!ABwcpBtn5 zi5oV=Og$i#*oQj;PW}!gGejXftyA8m$%sPf6Bl@W<7)WU>kIes)su(5rQ@H-(xm}R zLIA>us~Z{cG2;(#%Vta{u7k>CaSJ!21OEV#LrpF6h@>lPfqZm8$*d|y+D{uoO zW%#-voes~dLO07gLCbnh%O?J_-6@#AMaS!3Qv9-2UN&*rDleNzDB8Xo(X+r)N?Q+A zfuIw6##sc)3B~x3ijt3j%?8mki%K@v)zxj@00AvwlERe3$qPx$)sj085U+lh2RwJ+ z{f6wi2EI>Q8%5!1q`}S~AzkXW3pj@j0xm^$h(P*$#HsPg;KX!JwYa`9EV!?=IS>3i zy*hom1CtMY19@A=j~^$wzu(c&hn5Nj^p9be`UQnOE1hf(h7};FM)E~CqojAUp&!?2 z8qnj$Q>w8W4?)0>=wV}+6m^%Oa2KSdS3`k&-=%je2%Nz!h&wbXe)a+<8$@6@6UEIt zf>*V0I1e0q;J%B%idMc?w{I4uTSK%0hjxB8H&1>oU`ScH8*D@c<8R9x+q2WY{$>_a zKiYyYdf?j4Qif)2ZH~jn{ot4#6&zad0Sg1PctzB&(B60i0fb_}@uR0)&mbWw?I!=A z9xyxl!$#HqI11OU@(00);DAA5378HBVOu;u6}TT2h2Q+DY+t?#7?gmcM>G&i$Hp2e z4*}w{wA97hNQ%?gg*%ol@$(;Zi`#|8&Oe}VPp5twRw`qU1n z|AXUBKY;)#;orlu58Ec^&noV=Y#)Uclc1__D-Kd^on78WAY4W`4sih~B7)dRQ3XfM z!Q!ZC3=eh|5MZ^0tABFrm19HF_Wdy4%@gxW$DG-n)<*E548*QoyTCrTlA#o0(id1& zNCD%8CRToS)5mN^pXk!t9C|yL!#}%rXbBN@U+IhSH78pyJ4<&r7Id@?+6^~92j^iT zHh+sK`gJwpG9NFq9w{Gg1xDRm@t2>wk3h~N^uwF6Diq)A--c|W=(0&bK)~sKbTRM* z8;l`D00%E9=M&WnS^NWdMM+L}obY{5)HkC3^MJi_alpPNtIKp`O)qGA@FT3#A7Ull zQ{R?%n_>$2q0mnXI}q3qwoc!91%z~4NIMkmPv?WGr4~`lf6pUfvU4Z+t^?P73u&_` zp-5&m!U8NCH8`i!GsKNy3@Q&wHwbkB7Gw|(K5u}mL=ZqUlfhPQ!i1p!flB)FcIxC; zh9RqDRxZ)W3(_qxJ*2;jn!F^#A1Lh-qCc{UKPYL*J1-zBVDBrTHHwuV?LqiASt&|TWwBog|L$t!ut6sg&%(ZIR4J8R^%d5n~ zMHh=IkJUT+*D-J&5?lg#lmrgURYA9c?xh?YI|G-XR}$U`xNj%16DPuZFFBU0Xf7+gY_O8!do5G~NKi$)Y9gH(ubw3&B zI+WvwN)60-r9pL3QBwO@jUO9;$EAWgM3x?uyBg_x1x<^fQtFKL$~-uy#It{rC0AR_ zwv<$qxg5scQK+e`EoWRF;9#ao0|WcHz1$JxZM4GQ7$sD=W}&^^a$~$Ys`#hUqveRA z2aer5Cq|R#;U6$LshTrH*X%r9wd1bMZa^b!tc#KbpVZPFuQx8pGDeeaOc_T8f5jXs zEG3Ovc>E-PgVWu;!J_LuyQ;DVq7lfk`X;p!wb6TzBJWXeQGR^LnM4Q7bBnbz-uebj zoI=X;{)BE7m2->vRptlZir8lnrB9MJwcq%`hIhTMqWe}=;z8V=mXY_Tqfq3iy);?x z;Y!1O3$J~UJhh8oUy6JV%|B!2hw@{zX2*?xU5~EI-YRe3l^YN}^HfaxC3nuRy>VtL zmyEBh>E46Clm`LUqbrVxN3Rz`zAN?0RCa!a0{-1uoonK%jBaX4*-)P)y-PEc?$Aja zl&zD<;;V2cstQNsQQm;t1MJEQ(k#d&{|L>WwLBKBG9N|b_ed+pP~-6Srj z9Hm*fKg~MdHh3@K0@w?XJ(zBs26*`7v-^3zF`8LAml6z4)7k}NaP|6}dM9@9IsNBO z9N#y$pIM*545>SM!6WbANsSn;_fkC{HyW%Gvq}57GIcIAp(MYTC@oG#7~$65Sr-X10R{yCY4{M_ zc_{qk-AQ})7UY%lqh)i}X_-0wBCHIlW0h85vn-?`i8%R-tJX`0B|u#h=!PIeFW*Ky z-Qrx}vLT(wj7n=8`u3<1lvQ9US4*9YESoq-_hjVTM|=Oqm4O}!k)j$3TZh|_AF!Z6 z?QkG&ho1?cCec@(T4d{zfp@#f2nZQBsJT=ihr8OA2!}%xk|&x+3~%wb!YDr)FopOK z;NgY2BPr{yRHcuPhlH@^;vM47+>L0B2y%XT78*JVF@mlTx+i<*mh7wru4T0MJM($; zQ~Nh&?!O&$?|S*vUP^-LdMm?;H|WmVYiK(ak?cB>x!K%RVhO78qR!lnmHXVHgm>TC zJ`~XqB1fFuN+wnJe@SWH>?-H%{(b>7Jx57Rs&2?^$lqlpeHW^?z#e@k*}kLkq7E{C zuWF~S`|HOYG=6k1_Zt7z;ce>M?E-swfxB)@%|1-d;6Cxu+^WH!1t02U=IRZ-=X4K3 zr3mWzHD>nh4rNw<30J>r8zS$bI3spr5}+K z;5XPBsfYN{3=9J#}cL(@{KD^X{xGOO!Y z;!=(GPZEdLWcqH?w;H~kt#cP&_?L@ESXn=6(-%eqZ0w5l{TU9>^nn1xce9RS=bW&I zNEW1Nbuc2ov*6DvG;H1P+4mSlMUSUd-^lChHi(ogzS?f&pJF`B%XqfsW7HnM)dm3U zejt^+#06+>KjeB?!L-$Ts^*iqX58gB*8?-%aom)527fvYuDK>$gdMBH6u=5^=LbzN!4m-p*j9j#?>Gr{cF@w z*V`7V3M{poCRSgqt#Y#iY9807kgMs_l)ex2{zD3!ncc6C`Au*S`-y2!zBZ>MX74Ch zf;3&Atdb%3`(jw+?+P!q_ui0vXv^OI{1YRZPr}wxsCDNeT~{CKzGq^!&{Oi`?Bptx zq{KWanm)SFHK}ASO&lSsV^XJQL1p-Nupe|8l~YP=>M80-zs5Ab`YC$U`%+MG$(V^c zZul{3a%W8T0q|BtvkvTEwSBe~(=bd(H8Qq(Jx!zbM-Nc_G@9avyV~3WZTWa`V)UrC z)O&Ys;o%pE6P_!-*ZN`Qo}1sU*mNF*4Aw$ei+$6x?G7TBuy*}E_khh?w|rI0|Hi6# zTuq5lceSo?>`O^ufEiOh)ekKVJfXIU-xeT^T6UFh*~H~m`ToSxA5=eZ5f;~Q{*SDg z{%JM|R$Q#0lJN5X@BfmZa6U|;@u*A6na~p<*q=mfx}ry~v(MdkRw$I}oQ$lIl&0HBp`l4K3F9kvO90_qO-V~TTyqKL z1M%ZMTeXKLc7hdNu%fLM+@#brNo+9 zEz5D5%>MR+!e>EHWxYi7YOd3iiL;cYTj6H!oubW_LkzMEZ3AjZ`+92 z5K6oCDrN?otX zv~!r@3$b@0mcfx}StpoiIC~F#CB7(&C!rEoSW* zqxOou6L~(p#{Ip&$MX+7KiqziwhQP{kn1vB_957njG6Hp<4M z!1{=nevr@1?+vUhfmi?g4RW$X#Q%K`4I&}`@AGX^N{0VFKcHe2{qOVhhjNbpeSWVLI{)A2 zD_{Qi0ROYV|19u73;fRl|FgjVEb#w`1>Pg%HDdgpp5&Vka5l+!u)A{n)3keU{@vf7 z)ZU?Lrj#wfQKpeP{fhve=TiQKCf+03bF59qN24-U*E!#sU^maB&Jmo!Jd*gUod=nl zkxjMe=F zDLwuA@vLjfpO07Y3vUXm?iq-7+2C6*#5#G54%uX*@H{w0YlMvRPyuVLzONu7z5C-T zy|BHg&E78y)y9UV?1t>BY+gi3gQAQkyOEE$c%rL&O$W7*?r6DBpPdKBY1L&wx;StP z=I;s?X(%GS6}v21_b*Ul{_6?7`e#;XVfUz5*%(#DiE|eX>GtrM1wzcR`A9Hhm60&m zs=PsO);ZIaVI5(!uB;mAU1lwoz$u`zMmwbP`A-2}Z_p6EN;rN8S1Ng&`f^;FTTx)B z(nK**yww3YuqkAnvu%{^V8q}!9B{CC!Z%SR?mj)&ffb!L!%AA8%cHi5%cC$&;_f^3 zi8H4i#_gKHb9c26d`FT4Bln%I>J#PyB=K<|<5c6rn0NNVn$C%Gv4pp(FU|Ff@G_`N z=1bFtj9zr!X|P%#QD0*Dg{-xJkk>6McJDzRuTdUT#7f`|nZwI~$qKjWtEjV5v(vUp zilbFe%D5TM-0i}%I8u>X_ zkg7QZGfG$`Z18pSfGd%S3biCXP^0Vco;jM8uX1~Kh zmswA^=}SA8o+Vd#_gm@cI8!S1K5(IX6SzqjUssZEJ-SabZsO86KmXMOA=LsU3%Qy*qNWW23gxcFNJ2-eGM#%vD6N~oBWi*bF z#&X?Ob)EcdO|k6AMDu#K@Z2nZLm%bcp3FZU`Aj+S5&h9s<>rMorJBw7R2}sXSJ6%k zf@z0Wo*XEH{fXuuT4$KTzi>DHhWZMWZdkx2l5juLE0^b z9#OOx8J{6^pZ(05cJ!0qK$VO#ZnLRqfEneu*Vk^|A;&4(yBu7BY#c$1M<`PLEy#t&;s z#W!f+Pe;rBkAfD>8mo&X%zntDk|H?O9u z3|<`N^7|F;!uojiEV>^wZ8GlIM{-i}?v0#27f7cQD02=8p%c!V7&1d{^?srB8!E&P zNCgaq-H`1n43FJ-&(tkvEtGiST=7no-I!QSQ&y4Y*pcC=UAlat=lLyKU$p?qY#A)~ zc+@YFr*7{%mKXxJmDj!Z!zm^^XCKho&oMXXB0Uwon`AoN8uEEYXAO)`TANPP*V^<^8>77HeVD>yUtPz_r{P=lmEY2^ z$K+K<8L)o#bg(}IXNEzo6~xSAa8_$zm@aTq`VYyynz|$f`7bG#*CFP3`^6=?p2 z6#rC9U-rHdO%8@wB$mUg_r6xctb+;vT~k)Oi;{CU(ELwW&H z?y(8m=2+CTLqsML@-xW1SN)u;c)qKG5CPHtd=81~M6NPcsWUX_wmCS%CiBX0?f$u+ zh;?VDak9$ex-B%s!58tJ{)@L}JUvCs&S)?gbl;Uq_o^hxgur9)XUao&s zv>}afOh4V3ixP)3bbFp{SSYQp5$cYkU$tVZrkUX8(-!s(q1!*hX&cay5KaE670jvi zKuvmMa?*og)?A@q-e#U##1#_#bUgl`*OylIV?{3JK4W}!etqHY=`O#pJv!{1Swm4} zn<*CPqj9sjnF&$7G!CVOB`b$Y>W94RTiuaehpw(z#O5_h22OMQF4jlwHEWJ!M6#m_ zs&hd5VJx^5ee79mDo*Wx-q!X)O?2_q<80pKclI0WSh_m5=TN(~A1|i&dWI(8>FGCY zx-q?%Iy+mJSBXsziu9Ai3VKJBs0AM7C8)tkej4Pa$!%IopP^q;radS=Duw#<%uZA{ zRy9Z^iEwKl=hpODysNBovXmgSxC{uU_Iljbe{ANo(XE?as*Hig9=w$24}<42f^P}c zFgG1%PfDdbH*j28^2#8r5z1?ijOUK41WL{Ec^6|5A9Q;XI8#!NVlBa#no*%!Zb$Uz z;{gYsctv&^*YgQ@84=$_85#F&MZ!u6s;s!EpOHR~Y_JlWF}8A75T_<*FZ;F-i8NhS z`y~H=W#hwK-eA|I?}s@t1DX56HSd~ymCJ|gW=qK{g+~22Y-6E&i=w)IrmeXjF;H!` zgjM~PWbgaj?D3o-yx(#Jw@54Ar7nj+9qv>x3cxYpm^B6zxWnC>S7J!TP$1xA@UCmI zqU26^6ybsUs+fEbw30Fnyn05NCNYM5cOrIUr(R80AaIfPu1dbTusq87yfB}gx>U8^ zC&AUt!_9SrQ}tuJ6!r6dx4V^xzKRoR_5Cb4Zs zk(~*#6sEqiHn$mCoyjj7DF4GnA=)yBf>PCMXY@@VEAPr^bk+U9umTHmzO)~d@@4@{ z$=&nw57Mvp`b90h@cG>~U%UU)G=uIP1+k45*rD++XO){~f4ODVLkrH|me=d+orJ7H z4_R@tqJCLe=d&y%XBl2W!CQNYCvZ_yM(DA9G9`rpH@xp4R%AMtxf!9=21lEFSiunT z?eLpY&$bX}*nQ?tlxg;RNopK|;^I?2==vi0aQaR94ZBU}#E$xNIgm?Z1(!tP&p1j3 zbArpjW+x|ez^_yh`?FnQnZs`szK;7@W~k#q9wPgTb~1+d91%8%TS5`6M?c2{aRAI>lYS+| zg{6ijx%#uOKz6oEOOf+L_S0kO@RgR)$QNmky0b(|PYQCs4aQyLmJBo(gVP(#jn5f? zjA={hR-T`LebHUJ-!qNLydMt~ay{-5@N;LQ#KOPf&BKd$9Ng+ATIXt}6v1KQtV0T^A^iQaMd2D22QHQF$Zg~MVog)~u zt*I_#Q1E|P>JE2d(5{~o@sPs}0pC?V8faS>p!Y_K#qr)0v?w4y0as62rTvBRQCEuUS*wK^-<)tY7?bwp^NQ8 zvJsMBDn8k!xUV6X8&$En2FV#-cV;B#On+MC0Dz22H?zFRdC?XZNsp^ z#OG1~4&gB0fBy?bKn_oV!En4iv<#vY8Fd>pvU)rX)qn98O$hZzQI+lDqBfey_wCOM z{o7s3{Zq+e#GwrvrF}09(`P1Y0Old-Jqfv^0o&he50}F^J6C{Y_<>stF*f-EZ~p_I zbHQxkhB7lEEx5J*k;3l zS=qsvRrGvN!ZyU@yWcZ7hzSq5plwwVPjHxV@n?)_6$*^SI92&m!@Hyh#^TW{`iGl4 zr}?$1l5%ivbR2-|GW)>jIOo)Fb6W`WVJb#R$Jg^?#^t^Tsl~;(%4e8uMyr$}U^0t= z^^fHx0P#}V$19bd4%ur%^XN%m<}0SFDZpxFMBc>ST3*6xU@tWs2D>eLs;XWrhtGFC z;CKr|M5vY9dcLd6tx!IJ=vOvX2^lI8S^G|R4^%C=Uc^;)KC30~yQ3&a;9N`IuU4sc>_AWr?3ETXsz1KFuU|I?}k4FLa4DdXqn4D#zr#FvUY<-z5n%XO6V6{ou zJ1QU78+Ua(ulaIl+n1w5y^<^bC!6TUj~}D%^!Ax`lO!<%E(j6&hg4D|H2t-o>Xq@= zQ|Qtf*HB$%tkTmfPaJLH4#jkBNE0gZ-jit5n2z~GHdT73pY~-2i5#iv$SN;Sl{p(B z2@`>gtnRV9tC>@ja*pm1GNe>uH{1)VcEn$YQK|-X9V^7&nM`VVL*JbIN`}MCWQ7rm z5~sgK8a982NeX=yabNQ-ks-r?;59392GL!Frhn0Sjy&U{u^PKkqPtsdOjUEgtHV$9Pin%{{*|_!+5rw z{Tv=fI%CEloAVLZid29{!66E~!A&D(ti|V_ph#mcZcQ47Wv>DJ@mEQQV)2cY-a+H` zZ``8P3EQUjsUAPZB0(+ml^=h~y7PvBiSoZLKFP56Tpitc^e~WG9{vmF^{d{2BYlt& zH+#}p`>jlRG-1nTN9mc6N390{o{!#gmzNm98bZZp@)uH{G3NoP^YkRZr({mTqG1{2p`E%2|)2$~oTQ=}}aud;-SJSdE8 z{UubPB_4{Xlo*{I9<kt=p@WWkHa@+S=mJWii-5d z%4+S#y6ROaX1vSIuq&_JqAIvq^Nza@WJ_mUp14;@ZWxb|8e?#j3{E4Fwr5gN(pZL96JA+V_ntq)N_nh+neh=_tW3I-`-2q_!_X@e($A3qEDt@7!f1j{;deiU-Y>o z5a>0A?DxxeH~0qwTmz1M)=6pZG=JeXMp`{C+pXzTgyB1OwM3>nXL9b&*mpX_RWQ!p zp-f}kuS@S&HvWXaxb%Ox_+ER_(k*m8&fJ*eK}@=Cw;LGL&_44OKhh~}>h`Mzz_X0a zX^H^Pgq}M+5OH%K8y}zZ8<5I-uY&#%G5LAE?W0$X__Q`-*q(AaRVlk(GkWr5OVMp$ z#(f&X9r{dOMlCx#8%4lh<(I*Y!zlWMYPhr1Qq+ywz_`8VfIdm_*C*(!Dl zPiA(`KG2`M`ZI(?!%IZ`+aHUhH_kTaaN@}-@Y-6SWU0$_#L2I#)bQ_^4!r_3>{y>z zTMJY|8Ya{SREVqrTvgjajrPpqNmi+OC{7LWcgq}u1B{;g&uj8!uT-SOOJC3BMvoIV z^*4%(jPKtE_+8t(yqD$7_=$dlb4C9;nw6AOiQk?8O}RnY!llosZz2J!e>|tKNA+d z>!TV^LT(j-;&nTj4(RHh**ZTCkf$}IAsb=O=?PtjhSccFF%p=-<)XlI%q6e`|9zzt>YOGi@*Co zaBVDLzRfI3f!g~Rnmr&6Gf_(tJc=G1e+e~SuU!7yVzs-}UKLqQR4m6{w71+U>LP&= zE;poW>c+)vk1lU9Gw-Vwgzkmq<9x(z zjIC7TZZ{V`1nII%sK@)~dTh75>5c*r9555d+pKAG4sIj3{iMOS><59Mkxy3Af#%mO z6mK(ayi*65!I(b(vUdxr8jUAdAC=S|WsihK&BZ)q-PsMui_Eq73u-Vs2$<}ceCJ
    pFj(uPHuIIWHm;ONw$-do7TW9#@R}2XnWuh?m+;KGiBju8QB`l656#HZ zq@fQKj;;$k%!r;5YRb)?$)r0fexE2TT$wYWh;^Z#VNXBxNx4Q%vg+;S3 zU9@yhE(ZFvhcg8gb&qfP0T6!Bas5)i=_R>k9H)tp9(lXwqEas5aWI}az!`Q9#2{(H zI;*J2=j_@ZT8PJ6iS%p6Cjt0@Awds3{^7?%NqrT&wj<>3DFom*U>HLSqSgKffiB}I z6WeyMNjG82G<4r>S%U<2eAyTyKNN$gDrEK8_VPmbjaUJ;>q|8%Bs=Rz^x0ki$| z_-vFS2L(<2HNZ1Kb^W_5opoxWJ%rEt3PC)>LyRazW}Vi(@UchM@0PcT%|&`9+!y$- zsmm=REgD>K?^S$p7edmq;8V zyP*r35!)DcO}S-d87TZrFcT8Vc?er$r;{`s!W_JMb*|1-bn-@9AE^Z%p;f0|hbs@Z?A#&+R+A-Si2Bmh6KBSW?>dW;|NQM?tJja)vTOxdpdPSWpb zVBJ7F?LbklBIc|U@#qcl0b$}L>?B@h_U`mi#{@QpRkVTsGX}Xb(a;a}q@_$NG>*Y% zTN<9D*Yh)(qB;TS{wq?wUKi+frDC&#DY(>eJU<>Z;1s^mJXsjXw!F6X4$EOOUUQZG z=6icrMHxcNs`SnPG~Q*tUVEED<}}*O%(~>2#-OW&heJaJ0@-|rS%8uOv%Q+;2SaHU zRxS#kuL((HQ5>RvuM43FfNgmuBC>h1W|}g0Mz5PpqA>=5a-l%zYP{(}2W1F;}m zMjRc>h^O?A%=(Uil?>m`Va4R7zQ_#JR&@JgRyY`WUS=(*qAX%A!A)`|N~{hP9g(|W zAhOSHxMwm?*N7i~6zasdVOzlT0CdBZ3M@lR#?|wOd3kxQve>DguB*T~7sJN#R-m)r z+3(4)dYH8|xB@NGdzr&3FOVy(GT1_;I52iIJacYlcrcmXco2UO62f$Bvh#EO)x#b* z(y#Td;DL^!odAudYt5Nq8V?^z_Szp`1u`$2x6I8hPRfCrl0{K0)@{X*BJq`5=`m$< zn9|8YTx~Mv?~b@Io9wNrY_CS}N$6H|)VWO{D{p-UVPRkuEqEqH(#rN0#DPBik+-RW z9AQAN@}Kp0Cs(@P$Nbi7>g@hI{&NJsk`*0t3E7qj*tOFbn2Q`c{G8Aur;aL`o*zB# z+1QfP@vA%&IH?P7Y)_PF*b`S3hwZPXR!Ro2a?4EIp2<7Orq`Bgl%bx^5Idh1aF30^ zJi_JHk-*Sc3#RW3LR&fU%+xVMbk0rXxIN+ujCH4broIYITEkcyw(;~-YBjyiu8B1; zHiWd$Ai*+_mO}dUwH>I+LDSAfRX{1|^hKJEkDa8`4(253z3K-kF&9@G$N9!tYD12rU38LTUkq5BZrt`Ii zKzW%-zc;)0>bL6W*TAdHekb+j*flBt69ngs$JqpOz+rU&O#<_NQ*#gH1x3}@6pGPl zo+6UvQqi^#ji-$kN#j8Tt0}s0EB3(bz$JA!WO6A|IiVLp0y7WTl!4x(zuqjT1BMii ztt1E)^QX*At)cH>XzE=u0*(?aSF&R`O9Zbf_djv^<;|8AGWyr^=pXkkGl|nT9b9IsSE=BJW-)=6FT>X?UxQf$hyp;C3q-Z}oAth8KEw?Zu#tBciy@q0mgMX@1WqaR9 z$Yq|pXehNi_S?c``tRa0edhx+{nl_7GOo>dW^%KB!eq$6#bk&+;qWRg-ga0XRevnP z7PTprOQylX`wShQQHG`INdO4%r)R1563|&>YYpQ9DM;UnTtiOCGPc`!jfb*%5WHt5 zbM9mgZZg#k!4`~J_)Hr>RZm_CrL3KO+wxYMUtBSEFl>D1JgW`N^Faa&mGk zra^zl$X&5F(iflPCr{AXxvX~K?d#t$w0aVl-D#|}!Go)c51(JtTaVu~ul71vA^ix- zWL${?n&ji1`NwaP)~{P=W|FSL9DH-9^AyYJR_l3s75YllCi#Y%@{L7Bh`m_yZtAKb zuWNWUr^is(qS$Uj_`Fe#mjI(V^Q#0GircYH2WSQ4dp`aFB2n5`>Le?}}z zxN#=6K3!<+k@{7iXytjjo*`nkhUldc@K)WAUz5nXq$`QC!FrWyy5LpNW{xXE=}me` z&;>7-bwFnR+{<6+Zghs#OA`|)(ZeC6Lr~+ z+)8`3{CPep{w4**W@qUf9^0MUV|4$1x%Y7D357H@?(|x=D>7w)1V)Cw0!+v2*RM53@1_7bPsSTWjcl(3 zhIFl;oo@jatsO><{}Sp_O+!OI-QWTJU>(gAX^DEZ2J$>u>61@yIq$2d3&G5&o$)=O zhPfeqpQA;(ZrFT6I;ctWomsVWFZ2qDMcG7EGQIYG66b4iLnh#eV}Bd7l)>fIOPg`+ zCc;+tS5LbM)>S_wu`tzlR##j}YrZzaL3yF@t1sR6*F`q6mzQQ4x`mYj%9Y zJSm3LcH^A&GSX)N)I#0TWXd9b9KXCFJ6oQ|-H}6G6qjy(ZLoDZsj* zQFGR!&lkwqTHkI{63!)ZC#{n^H&FD?fXax6XJI2WYyf+^JPZ|VrA&*aFB81mJSbJJ zS@3od6uYCBz|h9^BoJi8=GNNnOrd+C-3Iamd>5i>c@5L=n=Xbh-UpX-55@S7SInHO z6)Pf!m~z1dZfvS`(s!IMH@+FS#G5eZIoDW^0lZkK9FDKJEm0L|(p9~XWMk|cr0D3J z?X%$W@$RL1{)HrtN~?=hL+iIXknPsrBEffCSnu1^_ZkMJ;YuvQJdBF<+EcPtIj%Tb z+<30Y@%&sVMfZF`h1=5O?#$5c09Q%Po73ILl7%Ku;htUzXy}sxaIS#LVPD0EzPEPhMRLqHC#gVAbLf=OFMlG=F0tfz)L}L1Njvm#vHDsF*-V0In5E$g zBC~za8V1>oR+C)cr6?`)F~+X}tP#0g#K{Ms8s*}*s!MfR-A3`;9E z(KD)>QveUxMchNvOp59=l=ECjYH#FSTLkq<=sS5dIVG6n&!I6peKp z{MpR$KV_WbHqS{J1~T7wCzM5(tty)0^n+H3xaigcW-4%^;mLEHp-dATi;HJ0bj#?i zx5VF=1IT#-m>#X8=iRE*JNZ-1ou$ek%HL{pM7F%@+0R2{Pnq5Dx1$T&*aAb}o5tU^ z2_RPE?wm7K*htv?=XQuT$!~XSv7Jww`!kc0<7gU5(WPZmmyqRlW8^ zoEG5=9~&Q2rtN=ftz6dptiAvQvVwv_R@AemRQANDkMzkOsL=L(_sxFWJ?sMXN6W|e z^yb}qaXPj6kAaF6w=bXw-+gn}|MC;9InOICM64K1b79+w>fs-TWzYkzZ2JY;<51-< zzI&CSb9U^UKEOgw?SeK*7P$`lp(+C4k?!O0`+swBF)9WyHJ=2>95!;#j7&R9ev`)U z>`4|XOs@D}oUq$vneX?Yi^Y2+Fv&aqS{b|9qHNmGpCB033p$D(7sjT9>e6wKADJ#H zdBKNOSISn&_<0*6F4qlutx60AJkc4nBv#1%Dq)!2?3P6k73^M3Fmo5>ImL^L=oyNL z5NPPU8jmrgz1QH`vuANC)$Rbxu@{ugRw$TkTLi7M9>B1%vB^1hQ#B7-cY*@^H%4ML z0cH<_nSG-Wyk4!}cxZW!s}M+lOmpwc=}Zb)bS^A)vNhYwJL;_U!CO`hxOyNXLs$;I zXMv!wi)@#N!7fX3j$~o{aV9tN3z$g4=GVUHl|{cI1-TZI&9w2FOXkY%gKK2Vd_cg0 z??bqMgZP|V-EPIx?PTNGV%G)z@6lQ*{G&Ru=43KNE}VfN#7<(&KtpJ79U1>Uy>BEM zXhDVeAfWZ-(`1;E}6EPsvNy^7i}Zp}QfCFz%Adrh&tL-mF5%TOI| zbFT3{1+Yh#OI)`IKkPfMQqZPQ;M|-}#N09nqKr4}VLZ+ev6V=$zSunM*?JUE&-3LA z_jdWKyWe@dIde!h)|52MS$Rt+*@KozI3LXjB*qfC$OM`jy<3qH5WJh-_%_!e6+IUr z#R1y!J82kRKdc6;6Xi#fizMgs%pI<~_dQHqXP1M=5|ih+tw z7g#NeZN5Y0w6?uHdLi)S$*vNt$>+oYpn;|udKNqo!qC~7RJJ)r^``h)Nm+-7nm#V7 z<$5T^os`+c8Srqqnh&&QHwYx}Ki~``6=3||8w}M4CnVVET21Cj8`V#D+&*b|G3!HR zm$_zNUoX8JOkfC}dBE>3kRt2wYs1}Prfx8;<$Um2Ui6jbH1&n0O>}fv z7Sx|Q%`c*N1wE#4kuNZpM0JVB8(RQfY!@$#1AX-`mB$o>z(E{Ohj-2J|*m}F3s?Mh{ScM&NQ1<| z>$#@!jEe(`w37o08f2Oe%2ayyQ>Gv8mdxcYC-amTH+VgXv^4KYQ4qVNrJ+F5mI?&n zar$zO;e0N$vi$V$9f5NxZ^uC9EPb1xG@%k9p1}OrvHkR>;c!))S&|}Zu13ljZRc;3 z*V{ab^i<_5J7EqYVG+|4+CU$=}_<} zN90hR4afSbrCm~znA-W<7(H2(>z#d(N)3Dbu(>P8?40^mP#e$%&VqUCQ4A zoZXbWAZn!GMlFjeB%BC8!d^8xXv4z^{XxB z{ubpt|cJ!>Ru?b1c-A_7nYX|Zf{}lrLq;WCELDx_Y*4oG(Eb8vY9K$%tc9Q zx^mpC(!pyWW`hYt-?~135OnHBHZ{hwz6)Y_8cX<`WzAmskk}>Pl@3Cxh;U4yhP;n65 z*jLAB&&y{Qh{}4>t~1jZyyBEp(oZN%>E}5US zB_GGIsq*hV`VxteR>0iws;m;LdU@%O;WtyN9v{ruf#efa`&R%J)1sH5!o%Y}jQ}|K z@NMMRI!pas&y$pi^x`OtUvq$@SIB(;>hVjk#V>mj&kR;?io@@$FI+W4dL6F0=q?hD zZG9|tGfS`sAkk6p^;jXlb1mJY!j&GKEm@BqzUBIi=nMQ>NF1CKPg>MA;m!F)#Yh06 z%$_5Yskg;J(}0%3UPsJdU~i!`RiPvCZ`(lK`>I;m*%rI)mHCn90yj?_^|iTaXuKl6^OS=KI z3)L4DSGgpY4d;XT9;z7YkQPVt3{_va$;mr%q{UmA7FBN9*d$`3`2)oyVjlpG>pm!E z`5TGsyWD|MahGmQob-oni`TZ1^k;;>ZQzr1AGl`bv+pisTBbm>aJAD(k_-R1HbwALYM_1rFm%w{= zRTFTAcz3JSs<#UX3lr{6Teane1(@c*6Y3m}=TJvGy$mWW%m4x)q0Srh`&Ez4m)=tz27C8;D_L|ZsJ_g` z{-AfLdvQ(VgW7(F4tFIamB&O2a8`D3obsdXkJl~(*{aaoA3||FfDh>kf(Rf_ zrTTa9EK)(bW>Q3e%=VW^=jR8v@`pHJTw?OiAU-PO*MnW{Kj;Q_o8lfUb?nX*=0)#p z@#WYmA*G`X)~%;(!c>d{kW#!XtaLF$B+RwL{qdkJ|KRGJ=%>P)fOC$^0S!vE)}5yb zapf5*3k%~V(K-&xu%7Bwt+t&SUs^&8npGH&{I-YV^R9f^ z81`%ZW`ZvcQ=bC_hFoK|n4uEy=gBjvo|_7evY)fne8NS#|KNpgapgSG{t(Oxbe!B< zrM`Z~O18Y-l<8S1&pgN$mL%wIL_A-fZhlLx6YP6UZmY?6@beH1ie#ja32!|quD+px z#B(p*?)4_(T=KrRyq{XGnTO{iN87|l6O)l12iN8R8luX5RUN)?Rcq9p5HhlgTV z&98F9TcwUAem%nDBm(?x4RS3N2%UN^e2I>t3XVC^1LV@6hIdYt?1Pk0RSqiPz7S@9 zSg-7Su{GdHuz_=adAF_-aNPhL?-CJCb8}};NXL1jqFY^#CTIdTC9KDBa50Ay9vmqd zpP5}5kR1gud|tLd6ri1bHZC$#?bkU!Kg?bCM{HAe^fb#tlUI-#xwRCK7z=DmAeNI4 zDtshgb_mmqPO_12cVbplRpTVNUMiXW#RGB&Qk!0XJ=JQo|HmzKNPJ_|nS%U>RU1#D z{OT);T@D(lMm-(_$ZGBvhG$su0lle`A57tlQdoCiT{cWad-%d+6ydB@UV^QmACstQDspJr=gdl}B-1E2 z8j(pcD8G9&89pXfSX+dr8$U?<3ja*1mjo~Vsup^4C4PwD^D6YP%Y_s3C~7iA>|9~< z6v7Hu?|@4HVw|V7=wfCDZM~KEIvJKdVtT}@j%lIY{RZ`Yx;HfU7au62?uK&(Whd@X z_zu9gA5k(G!bo6TY}D1lJ2*>AEnsHBQq%RWxSy0^N_qES76NpduI$t5lPpaLfY}3* zNJ{5W8w@(Qv@6qUmejjM-gwFq`^>9P&N0F;YCdS@3g6OV6cNDL)moaMdC|1jxgFDi zJh}%AZdT*huV3%=k9TiX3m&_kln%5YK(OfO_{6OJ%bzbP1}O?0K8l5|kZk;+=Pdnr zP96IvJvCJ`mn1=}>?K_cCQRB~2WfQ2m(9#dsspJT+MDZp;@(4{Kl$ z(-eJii@|1!FX#|w5qKL`9ON2wn{YV1YHqwdI4w|-F5sR`JI!Z49gN!gPV28KZ9bXc z*odGN7TsbMwSqmwF9GB0Q?6)xu>^n;-;_Q%a}{SC>KRsa404nT(9T^0fh>pU@N2pP zZ?(fn`h#YV|2#(n(m_32jOx^4DPx#0euC~WXT4V^OIKzv>I5Lhng0}wir=hXdF=%& zPCfj2mBN$&HA5U6OW02fdo=gaS00!$Rv4zWN(Bmf)MqsUj6=7_G;&E!DQB)qM>>#N zU_fi3(^Z41wJe%kXMruvM zNiIQ>0i`o~6jmgi%NgKwx#E012=qo z(i|yKIj_L!9!vianuD5o6g9Qpv^KrpojE;3ubn_xK)5lGx01kYcEzBQ)4id9Mo29q z?_1t6c*ir}($I>ph--&bow=E=9Ga7f+AgZ)+r}EgEo>@!3X3(6+hc!7-E=c=ThO~^ zEijyUt}Gra2Hc^gx7$3Ncn5J<$FB9l?&90-uzC|N%Fym#(Q|9a(QUECk>SH>K!r7y zxvf-#Iuo2^T!asH!sEW&vc_7{;zFO~{b1m}hM@uq4o$yD2} zPEB+G{GhY3v+$RuT2g0{Tl9sRLgB&$eMySxPEHMQZ%gllmZo_yyadco3+7N1^#4Zh zVgHt;ibg+)uotwg%r)zRqPakR#t3--^3d7JJN!n{PrkDT;dW1Lm^W@6FxK||%q==d zZ@(f|Z{M0*A3Qn6u^1)?IxwEwzdOLM@sOdD3&P6nXTaF$2C-fqvfTT`5ipeddN#Ku zv0tYM1pQWV);m1#s<}ih1WLnziOs9+Go65!W(NE+XD%-lv^6*_cKGTla6F_TOPhFG#`seOAP4pMyJ+)BWi0nG-u&b5(wvd` zm2necSrLDP`eIC{mQ+}PENG!SyFT5^99TIZOM{%UF~3!HuQ~a{I!V4H_KeDkB{znZ zDP4f+Ct{b~I1C_<%-+ObhPTB@7$<}c0e*Nw{BJ9fq>N{Vd3mF#8(#4N7Z^)vg#5Dd zYU=>Zn_04PboaP>L2JFv;k&~(H6q2+8mOcyS?8Xd!sjB!*}zf&S)CB7JUDlq(vI+* z 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 DB|uBxL6u&$|xVtbiU#B`clsCSL9T;?r| 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 }IKI6hlvEmMW9%9+C}8gxK8Qt3 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

    &}uCPX4(o~ek8``CVLIu zv`;t+_XW>sp=!=R=WJS$Nug1iZ~9-vEwieiWOe?OiPLmsp+4ao0FqEs%T$&q=c-WzRQj(Kl*#c4LB8nrYn-8{5%m~b?qLVjNV><`;vZMVw(;Rqe-cx+0mp`?b zty1J)DiMSPXR0^OVOuJ2=T^7S<*5->chy-XT9YtdF-|}INe4gY**XE#Ms1l+#ZE>l z%vILBUX`ZJkUzVCRhcw$B<&_~`D`CwWKT5gqSZVfQPN`pTeCqbLi7KgRbvJitjO=* zsc4G+M`}$f@dv9{o@R*WBcRVhKqBBkPftBbI)l(O{CaULT>h;{2HyUL%PH?m zQJNV|=;Hq7uTk5SoZM)y_2)y`1zw{30Uq3ZoQ7B@c0e7a-bj6SCm25;Z!Q3?PJh@z zoP%~|X9)`$x%F-y*;(Wm9}#e$17(;V(;NWTm9twYafP+OMSAB`1#JvZ&8VWy%;!3cjEAYFg#^boV@IEZfHH;H?k9?(W2u`3?pa6X|wR z!P@3U`Jn}3)AtorT(cM-8ssG1PLjCmw%Q&D7knABFZZB|`}kyW=p0`cf(o8j96Re= z3DW)+YgL@7@ad zGw?(`k{I&(Nx#DZ{>TFZYs|h$daevwJ?VmrY%@gu1F}Q=PPM_@-1g02+np#Nq%|?A zaOJkervNS;*Yn+pF)HZ+tE;T5N60lj4sX7K-5mQW5|W21Oe#~|`GTT#UzaLnuT;gp z8SH*yhr86}IBGIwQDe`D9jm5H_$2?L<=Qd0HP>!!UUEmK52p~-Zh$sHvh?s5!i+l^ zDYR_)3cAyCrcBCAH4MG!{LLc2cd$XmW|Sb!hzc3*KI-W4%vZNAa&hUi?_!o%dGD}q8KGTtRqAJ28 zPXd}@K7-#o=Lo~Zv@t4I6q$j$dUGA^U%9Nv<*&8o3;)DP;n2hdd0Ca?KP)HS*pl}9 zdYc1sL&|fY?7ZtA<<{F%uU@(>_Zsmfxj$V$tQC4eOWZAVUS;cN!{PhF)p4F}`t(tD zjJg1WC7i^`j|`TNtk!(?sq#ULY@zt%U!j9dY3`U8WKq;h6^>V54QH}M+9nW|eAz+{ ze1}O)>IL;lj)#ZO{%Oq)oLTr2fGUJ6#&k)udc0Xp`X{jYRw0&IYWC5>k#9# zSW6q`mV|9PN9GV6-zG=G>2?}#^;++Bl*HvQMRCcW2elT&QDho^T35|Nv0q8KolB?O zsc}^Q%&#iOVXsUx$DTPEeN-6{k%#TUZbvn7=Z7aeRBmDjUr9};VR@i+&AN)Cx@hMO zw=o~-`Zg^Y15bJsu3>8#$qFieVd{fhwCG$)U%?cCW;{48#r->7#>hk5)v9JOA2ayE zhpQX>n)}3+(*t;l{F==qW}-H!&|`EZm6v=|%S2upJv*9eRqk6^lGodx-mZ=QNj1pU zN|^c>bbeoEb*aNnjAdV$G~?D+eAT;sziB``tw=o6tM)BVk@(~k%u@QfzRcXAy`%fx zFSqm8Vb|!mJ`EtWOf+enH(qT*3Ve3?YvFCtP+1<6E>3Pavt{PDnS8!yx*AP1=W~6@ z15fOzFOE}hA=77|SkzuuMLB7Z(w!LOWz&~;97z1^^|7_u+>s&9?%MpaQbm@6%G%SW zdi|t(sXQP2XsbIlgZB#Lr(2K8O*xrR-F7~~#%Y%;iH^HWS_CeLg_*uYl%PbuPmP#B zaKN(d{gYZlS~DXumB+0jv$Mt@DL!HR{0$MZd6!tshgnku01$>Za_D`KHRUf%j&Lx^PNPUBheJ!!RV1lm4F6#?-Q=(M%sg{lzlAJQ2^% zjA}|xeey1IAABz3!-({bIiz-hP@j(4S_N9(QlqD-Hq}gLpqeD4BZD?Ja=k;p;;VX- zeqlRJy!t)9I*(S7U3)>Zkt=l&0%g7d41NTUnDq&Z~ozgos#n%v{e7v4{xf3AFvR0v<~^cqzU zHq`TAgi8mK`SPjRBR77Wk7zEM%%~?|*QYg~2l$5R3s(sqH#f)7aTYn_w-*FQKdIi# z5nIOeiD8gJkYgPgL;^%sZARFU`Sto*2ph?`D{yMyh6M$%6YfzDE0NMR7uV7GpNJX%c@ zoaqS5JMd&%i|E|*-63#ccl-)BJIH{7G~w%T>C!5n+0~zC+{%DQBhIEE|-}tsICW~SYvf?DjSG9Au(>+koio3 zlG>3`6`j0B%G5d3n{8lm^b(#uyXvwM$y#PLQFl7^I5#(U>hVg#4=3^qSluV@An`Yksp(Pc;L_7E_grj1lW5tG@JvBRQKKJGJC<3) zM%~oolu>ex+L4SiOs^jf)f%s;xX$Qdp~9X`nNIjdO4b49kIYw4sGA6!#Qp?8je}T9 zLlW};f{obTy?tA6vwu5=+$GEUeE;)1A5i}v3c(LXhP#{IY#~yR;a6AF`6F@PiOc^1 D#5*Jm diff --git a/docs/understanding_deis/DeisGitPushWorkflow.png b/docs/understanding_deis/DeisGitPushWorkflow.png index 4f65c81e8dbf6217c9b0b12036e2062766102087..238e8403606d72e5ef98a92b7fa08bbfc50ed7e5 100644 GIT binary patch literal 166680 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%0AgWP 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 BCh-6O literal 190468 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%0D% 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

    iY7ew6upfS#%I4*m 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 RY(6&sTe?O%#W(Gr{vUt7*wFw0 diff --git a/docs/understanding_deis/DeisRouterMesh.png b/docs/understanding_deis/DeisRouterMesh.png index 5375f003f2c26cf07987a34ca984f2dff5c7ec8a..79cccbf3dba96ba9bbb50630ec9a2d32552c87cc 100644 GIT binary patch literal 105056 zcmeFXWmFt%&^1bs0KozY7TiOC!Gc=|7CgAkKybIgJt07F2sStg1PksA8r)q52A9EY zaDrXVIXUOO>%QOb`|Im93u<-uta-Y+YS*q^PuP1EIlLz?o}i$h;K{#}R!2d>O+i7y zG{i!EIOF6HReeH41+8uRZ#&f$|OU z*UJAszWsOk%>c%~C*Pp`Ykf?@`Oo~n3;o*_|JS2`BI5tX=--a`zsd9`9{&G>r<0NY zP>YL(;o;}ISr+|Us1}E^=0_0ww^^8fuSj%2;{nlrrJpp`22lTf<|x_VFEl;4HasLV z#oNtrZ2E1~u{%Y1LCFj47UMAjF$+bnams-HzWJALR8(2fM-Hv;j-WmUW`II@7q?dR?m8_a1czfwNE8rI~prm=2|2ic5AOeIc>sPB$%+?!sbx zT2oWc>PJ{wiximS)jVyl#?7;QPmzkeMmHxk_ou&_FBV)oq6lu?;2jgx-q%qA68ASJ z1uwFW8a1&b0srCl!|L?@t|2ofRsicI8~e8ni)y?+r2;i|1yi!)L%uL2$L@9IiN)-w z#nZgx=%D=8(}moL!nH`aolrxY>YLXejhsryEprwD;l2s#{%2D&0&Yw$F{D; zf4RGXEVwT+HDkXUEP$ElYgnB(+c-DMArtmyZ7ntWBa&%&#;D7KgIo64>cCf`c_sr;A^z7?ql zNQ~{%b)(I?yjv0)p;2;)&W6e%D=N&-zn;R4?*i3c?~(-^aGO^RZ?tF*SVAv@T(}-y z=!g5t7U1v1g!6;N&sBWeU5_1ppYC-{Jw9cl5%7+j*0(0EAxCekG#`jg6ZLw3|7add zXLu4d%Sn!MmArC+79fR*w`kr&b+KSuhITP`KP+;1v+{)|d!_4{vp86nB}M7=6~B;O zr|Fve#&BkbJS}yAbJ^m2Bb9NUy0)fhxzW`rOJ*?yu{wR(?|;1~Qtl{GI=z?cm}Qa~ zk9ipIh8fMiaoEW=%m4TGm>kuRhZ;P;cTq7Or?uJA|4~_D&2?#`46;~um`j4{`ZQ(X z6*7dvVa5#xy1qCZ8G+-Mt;|NF8rHsmGnku@_gVoaPMP+;8F-Dr0p!$Pz3xE zwA0bh&~TKJts?(_r6cV>EU*{MRJ3+ebFeV-6Tg{$i(hEg%|y8l+iijQ@d9&UbYfVv z=~_njlv`nfJ@aD_OSeyE!A28gQkX9BiDm}q*E`vYgW{#L1Y1Rv_4^~~V{S~J7w*mJ*e>>aPGa7tr-z-S027PPR7%nOSHM&psensS( z&vV8EH4eC@`HCr&AXBx%bO%FrvZoFG&ZaUcwQ=UGyG^b+wzYcMG@bPwx{is3rKJ1B z>nBu1O62@6)cuVlJw)b|0sM{K%4aXP?v6SL1bAMUTXw{$KbHKK*m9PaHgJ8mJC$RZ zb)@Gqu${#wt}2$tIo;L9b_X9_31^Tc@lUbc2%BBI?_0 z4tRrlaXS~;9bJqeJ%YoIwOU#6r7nDgIh2k`^VtEBxr$@85gi$NaqVIEr|n}fWjd^N(c!t+*R?q*Xs zcIN%y*|X+L6{CRLv-5p8vKK1NCX>6AC${36fR~bZ#_D}p7Jw*tZ6F`@T<>}~pE%O!zT>;O?=hpdu>5SjN1)!sNwV(7svu49aSO!1i;41=@bWJ- zvw}}FLtBjS)^WgS&1PvM9{b@4?_iN7a!h<_veU4ld8uHjn!KE0g`G5j`jY;z;d0LC z_IEC+1-zavfZwi)a&xsa*{_8I3izMC?muAEH}K7FPlWE|4Lx}h4e?rgw!qw9YwEh` zj0BjP_izh4rtgVHYXE=x<=RN7oOCsfRqnsT_n9K0CcW8qT(TuDxVQPn8L^un(HdwN zdvN+g0u*NX>_EeNhs8Fb^p4KOP}-UEleWAb)8{2l|KJTu%>bOPkk3H=%Pzze;p>2e zWRLfo&}aIu2fDJchCe<+6MSuY!kwO6arHwf*a%@mX}bDuDDdiJcW9Nnhq7avUS(xw zedw`4dBiJc3?C)sBk5h<+|o(6U*gx)KI>|{nZEtvR72yd(h_Ni)sqxn%UbJ&21dIH z{G1grOna)~^aZzTs>w=`D4p9*qF8+n8F_~9aSMIOq|EF<9K}nVP2jIS)!D$PL;Ed}w#5zmb z9DuYRbE*ZqK=NHdeGkeW8AQ|sP#Ebfnl)o`yeFS~pxZ~RnWYhT=m$zu+S(B=tkL%V z?8kJa8e5>9$EY;kld57w17jIXHmV-a+u&{m1Z6 zbBX5%rkf?(UE-^m%>xmNCylNd-dCCw<2E0RWHMD73$t;jsf;qOR#oN>e-V65t0WW~ z{)KdIJicqPBg;yFBpfT4Hd)N|nnpJt9{AiHH7>Ot?YUgcyIq(=fDIR!K5n~{vx`1E z4OUG(^a4b=ZR0)jHMTG-(WL(x02Gvu8zcX4NGnkO4~4B4OlTZ1N@wLj*u0HK$`-%) ztaEXn0R+M0wWgepY={>l&xa)<&*>p<(9-BNGe}s`d5i8;r}^7{r^ar)b7HH~@8*@v ztnmoW&M*xi?{l$d7ElYus?4NeUhoVXcgY%ghgLWS@H=y?ankNl6b{&VB{dzfDg!m7 z*d7sT8k+CpfFQ={41M}Sz}jVopo)cW;_1_`ICc%x``cK>!=A|5Tq@}4X77^> z^}$o&UR4$+jSX%G?KrM(s%#j*2KTjJ?x zuRR+jSu&hfPN?7>#Ye-Pn~Oql zjp4%Qg39BE1+;#NCg8?72IR5!{rIi+4awZw35BI`o@j`(#x^wfOs^F8)2qUko8tks zp6F$6C!E?EX3`cMK=X0qVeQ25QowyPULRlV!!uHB{yvRY4Z(Xch~s?5_G){g2r`5U z7d4{Gx?o)$8959%ne$lkxu_ZuH)wF(PUW-p2i7#?HCPPA*w&W?+duMFctNnat31XUvJk6G5tuHGTg+9eb_Zu=dk34hmjKb#e z-HD5BcUv^#fJ{RBYh#)BMA=PltzQ>(KWnG9XW$sR@S_XbZGb|d1QO>D{DH1WyR5XZ z1fi}4%FvGslNO~W2z*malcXD?Uf;rEUcO7+c)vXo&~h24_==6KCz8sbti0cOty?wO zX_C9=bRQOzR#I3xu0Pl2nc1^e(Z<^2oZYfVTB2#MJhZ1*H7s!`%F3h@E&DdbS!6!7 zM1$M4xA|gm05mx@RZ{XZ+#z}oA-1gVsX6UCC%(*zrF&#dlR$1pk@73LOauDx z-!(b*mo2CqI5;?tjVICjj|ock8>bhC^AdJaQ;j>m+#bXPY)uwwp!rdl?pbkU4n_c) ztfqcyojZG$_6R=N;9lB1^knJ$LhbMAiqJKbDSkM7E)MqLHMVmtAeEwY_x-sC>^|F> zDk>=0`u3TiW%JXuTr~BNYF0kX{kzndo$mIDsp^XdsC{o>aJ?0BbCPw>`0;*hWG07v zG~^G#6igue%ldc}-fyHxuU{Iw z$W>OPBr^VJVeKB2ivbJ&`2~ZLRFiChKgZZnIJD)U{&A}9b!z)rt z_k(#MtiYGDNzo!2`p6@1(sTbKf!2+_6#M)l`7Za{aYasZOUsj)1ohh8?x)eFp@LX$ z7tI$<{B`6ZZ5QCB&jblcNj9blNxnaDJqyM}?~w!nH#a9EUR*7ku<35i`uEz}+DQp< zkGA{_Mwl=s3^_y`v*ooM?-Yp~Ho5SaNjNe~ zqm)~td?fu$*-A$seo1>9gX-JeZTW`ck5s&@_D>m=#ZnFXLHNl@f9X1o1)UY#OW6O8 zNvwxkVhR1LlsFWd<)DPy!Y%P&ei7k*X_Fen<^QdS_|{erfUVrl6wyemFPQn-dAr&h zL2>3Lp|*j!E~M3MPa1nJfr zNs%stQyrVpV(Q>h^Sa|YUS8f^AC6@881M}b+b*>^WLw6}>ggdp12rUTD&R6pzEyU8 z;|Rs1MUN#vuZ-iS;^LR87KbmJIVo;dDXb^*qCmxL%_KCQ>+?EjDX(B>p09yXYd~p} zi8WWGE{Hy5@c4GG*v`23b*a3L;M?M&VS?zMc=5UIl-iI(#aJ#`4PB18%^nD{&6z<# zL2@|UQD@!-1`3l7EPKaP1+E18%d<*V&r$nOdfXsI_M4uKxWB%-37)13ixKs2%+56J zJ@b3!@896IJDsZt*>!9w^!@d*@t~=X2g6hE2n zqX}$LS>DB2QEk=Br4~5^cdGJPK!hhk`O|7QGn^<#++4twUbd~{m6Z>uLF0EiCa~na z%R3@2Vl!F5XFL7AekpsmL7jCmnKLu=q*7Iqo;;>Y{AT$xVGs2+vWEs!9S%$w!mXH` zQ=&;Li5+e!;r8g4%C<0RZx3Q9a7Ks3Hj~@DuQt&$&5S6g%>UG18=`r%CHm4gsI2TPSP5*S&auq=CD>+rAXn~rIQ*Exh&lPMm#?;V8}>M#y<;b7>pmN zT6;C85xv$)Wo$IRgH5MCGSOONxm}iL`!-!Mwmg#CJ)^uyCBw6^naX`;C1FA}z`i^hWnHts*}dh^c+=*?4d@h9W2p8j|jTcML9{f;5^ zX$a+tRc`NDAY&avFV9LqNQsEkTut^+f~pBOjMO>a+*M(hekbv*R=>n{hgK04187MD z`@m$krY#rRscLUG^X|2NGhd$7tqjGux&pGovMiHW>J^}2eU*Gf)bCdtCUd-eijR|Bq8+lItqfTHK{7#CA#sIzf{$O1Dce0&zS<<|HdH@vWj-;Z{FM90;1By* z1<={68ojUdeB{$khU3@^?z{H$B$y@YEZVGYhkh4ldt;wzlwFanEMsHY9NC7=EnR38ZJc}sczLe!J%Fh);J4fzX=z^OE%)*hwl>d@j^a@h{gLoN;D zS6RUAZivLyim=lkZ+&F{yV-j~RxuuJI?qnu)@x^nvmzoo;!Nqlny;8irz{&(HY2fO zZMFFG!!Rs_lJ%ze*QU*Ru4}u?R8v{i95y)duwLGv#Oo8D_3R7@Au$PwL+kCi24|Kq zc(NdMXNP@>R9b;`9Tz%+@ZWb;UC-n0<-_#&@tuM#(s%55s@6&o&EPC&j zY$!-$NS52pR>F(|7B2k6>-^x0$HMOOej{SO_@4Ht*YkR1i_I*N6h;~vYr?yuoR6*& z9|&8T3y5;(_ol=>Ywizw;$OTYqEcyH&s0Sv(=a|JR6ex4Y5evt{;uW^5B^6qq78~q zc>B1;iD&_C!+?$r7Yw1GOB~J2V(hnBQbRHszcj1glIBp04J{#B&Gx7=(G!ww0Lodz zN=d5Qm~-Xtk{8Z7jb6~bE(98*^U*w|gSpwG_GQknHSMl?ks3NJl~F6%m;>b$wu4?W zR$n2nX@*61_kxZ5l#Ry+$f|1ART2`$!cFvTjYAK0p2_E0tvR#7lWChg9Co@kEvdb> zj5UTu9Cvad)c(D6S^md`N{{C=Rx|4z;sxIhX7OGOaJF#4v4|8{(+Cth*K|Mu8JpMb zgpp+e6@EPx1R1SL;@d$~9t*QbQHOm9C>7^>>4L{nMgXpXw>AB82?xzBE8OJ6Rrb)y zNPm>T;=42ql+7lcQlLCu!|$DX?i!fV+ToIY zdHP3EZK1^@6EO-z;g`?`#3qgBsAP=zx$c)}DzTBO6pqEU5we^gxN&W9T@jq=Jm&kU ze7;==j6T04pB_w&S?DEFtC|IAYhY896 zXGbZ8ZoIGwf*JZm)#@K9Kc2K|I^Vy1{uedjd$#O$SeqJf`cD)1&vXMtiV-9y*q#V4 zn*V}I6v&@M+t1x{SHWMQv(!*KYpkvK-V@j7DAv(*-Ax1OurFE{S+zi3=agg{QFeOeAr6#0|Zuc%=+4`gyg_}Y%; zxlCZ~QJVeK&&1sZecKkQ+yuIQ>#3hV^EL`{qHPpD8>h*VjhrlcpOicl_v5;G9ztXy zlVZ|e-*><7cd}4=#{cGd^vU_0P$#S4s3?@q&{4=Tj7sz9aGi>S0xYoRq_+xL=H;*v_$mTw8m5Jx`kq+E(Q z+l_Ns`(a0pX7iDy<`25!FJSa^e_$t@zlH+17hSa@yQ=8UWn;AB_Jq+Gxj?Vt<>`z%Fp{Lu#$X^j++@tTj_4iP=kb z{j{u3-TFYDx9?2fX{e`ZGn^+72RpneoJxM$Jr;J|s`O&1%APOqee^KT`jvxyqQ|{} z{CI6ZNn|vfBqUW*UlfDQZT43z9zkMa5~as#7*lR;x^LwGAJUDL3ATdw_|g@i*G;zQy4^);wC<{7s=c}DL1<^%IvtFGL-HPHW>94I(L2_wGG_&s%?u9< zTz~uc<&zPK{G>-s-T?c5CaQntkSHrys#q%`;$H*S&kx*#8D&68-|S#yIrje2w#T=V zGx1;yufPOXUnA@ua{X1MMVK3?gH--~?~#s_LQ&an<(+mS6ROPfW;iWfJ!7Amf~L=1 zAaOPv>-$RwqWRpX^tdCjMeU*xD}~FDNcp97{Oq7uJTUjj#hk~M(_DtfdaXS})P@`- z2YN1AV(1jeXKJc+GmgKy%LVu)X46Oz(YAE+yMiU_a-zC*9z0iqv4CSo5{_>FyzTOX z!N&HJ7+(Op59kP|ozBwKpsvLLI*tbsTeHZ1sU>-FU_V!bNZJ)+g`3IlHZ?_W_i_1e z`BuZykok{AxT(CizNa6oiYW!~kMWuJC)}@OkRWYA%UwJCCl)SEvZlY|e9+6uKYz}V zixJ;Uci~T7THwEL|8jq`DKW{jd9LXL-Bl}x?sC0K^<1uAOf8o%&@mE5Hs=Kaox?2;#V+8sTjjm0fJ`|uRiJ3~zP~%|;XON|UqU91JtQy%t4;Qy$?w@jYNmF#rWf)v)Y6{Aa+YwD zO@rL|A8a5(et^2o3ma62X+2oAGOf&;plr$*WkTdtrq6-bgt9;%ZEt^noVra(hSTR( zX&$c=Wr2VjBnxmTsCHe9#Ov4jLAI`Xe7t2~ke1{4P6n2&vdPQ${S_4KM6=H*ZsiZN zp&MU3#&H8b`rDjH*T-&oUm+kTCnv0*4IG;jQwavsh2m=&od&sk-lwu;dIsvF2&5UK z4B>uQX%D8DA3l4~2{zZhNq)X8yTwJ8+2f0z&zMf~pnSS4A^Y1ie}IjiT|w|}`1Yod z;jEcOxRF4m_eTyo_7kueIFwQn5I}b#6}7dXwIJTt?4MrO2+EdP!1=zHLSSNo4|&8L1e(OscO3D4ubew2}pncrLG_Zsmy- z+#{4+0h52n3>Lh)R?$P<_%KuG<=TyJ@SgZhqw}C~$z=>#@;)MR3R^Hx% zePO(+$t^?Zs)?w-;V)J{hcxqAFO?8YO-(JWSr%$OpH4!#rxB0QIL@zp*P;YoqN$)w zPEV`ze)2lm7)wGIoQ!K3Sow>manLsF4Nn}QVDS&Uu&d@sdEmA7y@o#fGT#d|@*R#i zeepky)uJDD8mQRYbCfwM7_j~AtbeO17NF&6^x?)ihb#Vz)TYw$+Y>LOZFj+#Pq<%5 z`2O$Fqn4c+(9q;pw~66%f0qVcll*kaE(I*rdVH4*$`N9E_U9VJdtJ zn>&127|E}|`al7_(qpl5Gv_GgQ7yC9F#62Ee#PODQlc9p;#WZld1rfIt07|e?n3@i zb=7cjbl2s)?2`BSp4XTR=`7|>P(jz5EO9?-uXV!yfWD;L5WiZ5K$o8n4Y$ zEd{UE<0m{wZzInVOfZD}e9uXAXh-1S}#^v;j?hAG5JLW|7!icwCrPq`3 zs=~toFeKb$!rFS%;H8{kaIoKMSkQv$S8O8Dx*9${MF@KsiHt3PeJoc5{1eu)2Cp9^huU@_KOh3J!5yAN-7|nhdL#eM|B5x64uE0Mqs3bW@r&t*u zY?hLe5>`2wu-9E{_HH$n>i0B0Z#*3(roDAuZlTnB<$#TTRYz`sA^T8JdPYLJ?B@Emo#-6-%A>K zWA}}m@4Vn92U{%mY~)8m!}HFa+Kl)B?P6Uu6cODI+y);=ZFGz&TFz_A^lar6tH|!8 z$THILBuOX)b$N=#XLu^P3~Fq&qA*?O$U4LXUw5M`Kk*Agf4&p>(Chjno3c2UIU52Q zN}o%`;yL^Dj}rEDJc%jRPkn<$6eNA|Oi~0Xu20l7lX1b(BDZez+vH0Cc@XRh}0B_?L!A>(7?J02T@$zCfMq~bMrXrfpT z8&1HBP2~3b`$HTpU;Qn$eR`65s2NP-7*`VB)L>Fw?nSrRN^8xyzplI4>yhB^p46aJF2bdbQ8 zB`#p_Vam-K1aE<)b0t3TN4eNjG{o31xeu4t^3qn_(Jz4eIv>mMjM-z{uPzixOzRs~ z0(P&s<0OK_J}r?kFpIuyr|!*++6w>m?9JU9@$Db+mD<4uffNDB5cWfZ$*1)(Z_(7m z>Px?BMWD6Q4B~gtK0bKfH}dWZuk_!DXaN2b5dA7t^a+EV;1)r5Gtk>%L6u_VbOw4H zL5?7f{IVGwHdVkPA~4Qm1|GLEgWB$&XdbJ;(3@-NPROk<6UjmNL?>LiZapMvztwd7 zGbmSxxx(2SQ4G*Y9^9grf`GhPQ@_OVP1(u@T%Q=l3D&X-3VwOG2!sLw2$_)pNdpa+ zE`*JBSM=ez)Z)4OAs9)UvkGRCU-c-i*-H*BH+q$1Q|weY5L`GkCg#R3#repRrfvRw zV<@dBVIbHgN-3E_*c5Nm!WC5dMrXYT@#GzcrweQWwunbm4{YQolSRO}W2pIaLs-?9 zvAK2tq=rwtnPJPa)GgMUGt{0Auxy=Q3)4e?WjghBKhl>P4+)t@(hp z_p4VBj&PU4;;!waUR35X4f5K(Vz*AEVIqTeOJo?2xJusMOd}Am5NB?oQP{IwwuckV zvcbb^V8_NOIg5W+1NKC4^w`CB>YZnkXyk@%(@+^~DwipUWH@pt1W|!o7>8w|kDL`f zgH3%`6pU-FcgaPD1++k=#vj6zOp0rIsQp}bPxHPDlkVl}w5}%dQ`M_ELnjgR*{T7n z@e|Cd){Zukk{;&pc~Bbv3Q8?*6O73NdNXt7=bi{jAaZ)RwSTh^jra8Ja!O*6S!6v> z`uV$7O$rylyeECTtN$w3pf88sNt4*{4KuUNe`qFs);B8a~5%P0VWcGm8S0VIu z;O1N0pj3{LAqEdUPBsG zTCOBDL=#6 zVAaQ+|G-UkixpQYs}Kr)d-UDd8f=4FuXtO+XShUO|5`5VjONJC59?)26fRM=f2L`j zQsGtrQJXPd6P=MScVy2W*G7D{!y@*v#p$v&KxrhgXUhS7*sP3d0E&hxx80Bc0j)^2UKL!#vbxribyPo3`My(5Vq+$y^W$K8{IYHD z<6%d&lY_?U>;_;m*RxRIcZ}gl1d*T%s-x@%_=;p>8u3Jt18W21YSa2F`xm0$n(MOZ z{pE5&9s0sc4`^sFL3J#U$s4jwQ}bU}OL*uE-<*HtxOGyk-JOS(3(sd7sm>i@JlW!G$$2gO?>&yMd?sA zM70C%V{t|ZLmGf9eJWQ8EQEcaQg$KbOi<}jzpH-*FJ0)I6W74CG&Sz=)!`r$k@%x_ z_lQo!6UIQIMTV>U$C6DL@!i1-Wn&M)&ec~#2h{O588p&AAC2!JJIM2G00u6h)Eq;* zl%GVH&ozrYWWi6o&!*@`maCs|a{l1w4w&^%K|KNJn1T8hferTpb?J8#%546%)`+74 zRe|i{%f5{K+x2teqJw67h2A)$B4?4#q$qQqkYo<-+l##M4Uf^^bs@GCWlttST~y=ml9 z%VE&7WykLsErkyQ{0#ejx#2WbRxm^n1W*yWNOxfoP&oqaqoHBQkBQ%WBFOfSO>t=y z*#QT$bdCL3!C^AQ!5Yamt`tpU9~2MuaLPXFX*P%tfUw2utN7D@+Me4d%2Z$2He(Tf zW*Sa?0>Fn?(P8{-a|#Iy4Fc%UO32}Z0Oj_!V`}E)($y1JV6Uv@x9%@+N0ZyzXfKj{ z72CDwn7LrSLfia@6VPXo47G#bv^t8|XTI~nknz@V)}mgv3dc`%Kt;VJfY21I6WH_rjP`a7{3pka^AJ6+6wH!rKtVv z1??;tKzNk4toE}$WByI4=AR-{59GBN{M9BO*9!u;L7VcmC||a05SK~cKIG{s|2p*0 zf3tDAg669|rmX;oS`7p!bA1N{DE$bwRO0p!q1=4Tfo;nq%__G#)7K(RXwv;Ub&vWrNN83>6o|{kq&P$bd$1$Q8N!x+jULtZ2=yw*Cdyjw zoS@)sdGDuz;9b1VH0iIn`L0i-gWqev$-0(Iz(f-+506OXm?W!xIT~k!sn1jF$^3=d z)(aIWTIs&3U6RWl_ztH&|E=v)2DTXPYF~8j5F9Uc#n5*JrmK2iF&|P1r7igBS1!c@ z()M-2(68;m0~6jWaZGFUTT!A7z{L&Oz2G;p+0= zG)RPCIH)}VSQUIB zL=1o|Tt6=r$slMxLN;c1GAA%vg)$5b?tr7pgZ;Cp(gcNm7vxyh)<|{i*xBsA({SNa z%{ZT+x$D(hexOjVIdx2k2Hjmf+^&Mz$E>%w?QZq(lZAGl(cEr5Y~ops8Tnx0y5Ru% z3xy{+(_Mr3)VqB1i{C0SMe9M>M0K5bWVs&2KzGzyOTTw~`CUcU`+a~oTKKj9B(Z!G zrxO%);%5BA8&3Ja@8Ll2z%O(F=+93{BD!0Bzl3dtXunCK|CU%53u@56`w@6V_%!op zte!cJ5fPy**9RX>Let8mkH7T4GzJgINNWkI2I3=!V|&|it@0>aHHP

    i>VF@|1(4=HC9KskayvUA@QyAcpN0Ciejo9x^Pp;6Hdwl`2ndkK zC()toSw!?p89t!nI?LH6u^<~N1+AcQjBro!K(GTgBRjSM;mRZf*d8EymTCErE3_<4 zf**9{u&~~MArYadwrXL4-@WP3Xo^=Ih|Tyq(zNiZMPH~{-a+(&L>adOaJ?^45tZ*Q z4Py<&3!*~NYt3olQb<}-Xgfz6uf#oov_X+JF=PiMq_BhP_=CZp8yZ?Esj96UFFeK+!e zm9Us9CRmX3?2Q69eRtI!w^3`Dgd>j2_)ia^jI8M!uX0EBnv-|68?f09X4PE@?-GHU z77woY+L7egg3JqB+nuZUwR)N~oyTk?YjvcUc^~*iKtfvDA@(a2=tJR`QKGGj@d@*TcOKYUP`MHc$WBn;+Xw5~j{(f; zFGmShsPQGF){VoEZz+x}YKCGZzCP`S5~H^Bkf18jz6%Q>SkqEmL94;0tbbqq#gyI7 zs82)91nc+^{2jR>qC)+4Wz*ntjBX@X;D)870a&2t#4>&Se|GoGBU8KQX4`5^S z!a2DmCD2(#8O-5SzrKcuc*d{wK$QcqS8~;J=K`y`fq_JFklA1df!Iygh(CVD{1`lZ zf3OyR$!AM8oywr;Dsye=sv^eEZi?K}6Pvvm?+P1i0QidmI0-wVU~y3Pg+FLc%v_&@ z`9T2Oe!z|mZnkt9PK@T=11k>nmSz;luKd}KcY<{j_A!M12`{>omPv{z%5vxO+7>;1 z9B#Gm9d%54N4@davr;FBr;l0_aIT4XG0}+E! z$CBChh?#8OeB})9qq)VFyWuncT$v9ghl)LBZBhgdEuITqb&Fs&!mEQJ{N)7w#fP@U zID}Y3@3^biS8GaTyU+3f=|7`5qYMIE2?J}gW{KA~dvgX5YkCeS-;O`F(z`<2+dfL{ z(+gl_Fu=lWBu0m%;Krb7d)>4^ydIq-uco zT@`^%swih2;VOzjBoavj6}v1Ho_9LU_DjPed#G}t(=s_M~6qFuQeuF!ve@E0xvK$?mW+iX8a z!s&E#cw+z%50N0TNFR=QIxqz1SYdfO_OmxCzIpu@L}rxlH?*j-PnHaFrJf;v5GU#2 zYvluQ+oyq;qfd>;>j`+QpMIjY(Z*n=3mkclR1E}w4kk}*=O~_LlW~puz4i1f0g-e> zOuQ0~2850F9pd)?fJl5EP+$sGLab-Mb61}jFo4}M;uU^lz2;_ke%5k!&@6ctB%*l$ z5eh=oR7AF0bS-G=s{P!hnDMFLC=O*Kf$`|D`ndx+V+|nrER&YDZ9U`Yc<_qlpnoM8OsI0qHiMO<8_CPA0%@x#tf>(;L#jQy)tR1kuKZz8nFNlKJxs&J(s%kk=)a8?VUrA2vFb zU!|NKg%=#V3LbyLPY#Z=!DvYcO_f0<#Qws0Bl=aM(n-dP389*emX9?`aMR2A_co-^b@G8i?8aJOED_=(x z-V4>}zWTk!i@it8>2E!E%IwPAZN)51(v#0-+Oj9Zd3VJb;C!**VVO@RYy*%1mBK%J zy;o{`a+b$#A3|Bp!nLMr3c=x<{DpYpQRAzk<3Jl+#!KAHIApD0ZA&IzCc6vSVazfV$y53Ub zi>>xDGH|S~aDdpqbYlt8{%vyEGV={uVu~gBkK!crpI{0CxbO9jhhVOXZ8jo7ll31d zWLLqnA%IdNGQ3lR$|MbJ+fjr`UYv3|FE-Scdd>25wq5wcdA4UQ!;&)+s8NB*wsg~6q zn!f|!)jG{L#1sN{k=dc4H*F}Nr$oJMEM0bsYooWHv5eT2)O+ww#JuqkIr@kuep{%@ zvAaJsoXB*l4k~0`c%`4U#QsKRp)!6#4hdf<0d6ztUeL@=T*iCUNTf{ ze3xA?9cnN)gHAyQH|0V1O(PH^))b=X&$22a!(~>v#Q(oa!=!(djGVNn_*6(R5MYED|aadzE@im=oapbL)!cx zbhX~@J6@chXS0;l_z$qo1WYL!MK=M<>)(&AwB-1{qH@ zjpw7bI=#P_hv2}NdVdgCk|7*Q3FxkL3kHIDH%1XpV!-u}uV8>oM%2&mLmPm{%u{!} zN_V>P|4SU)0av(~?Pm~l`p~pp(4$?hvA*FN*nMV z1s{Mwa0^uf(1+7Gcw%tzzQS!Fr-PF<`zIqmK*hvjXn+s3vg=O8cLe)^MBbu9Y{$*m zo3@l02+oV#peQ@{qhG{d+xJgK(^2u<1gjs4a zr8rb@3GM~jV#Tc#3#GVQ@M0BQiw24nch>}WNpSZf!QBZEp2Kv0GjsiCKD=Mw>v{N) zD>>nuoU`|`z1F?&mAD7#3ZCURd*0BQ&4>b$6!3Ro#!kMmit;sh%V1W z)IDq+C5_X|S@KP&sbR^1oE5Thn3QFq%U;iO0^xfJh>R?RDrb%Mm!W&9eD{3?oE(yV zc7NI6(C~fru2cp0h&DU#%X2pbFiDanDnE0;OZMA3#~62xdO% zh)qKYv6w89dz+>vDt=wSfk>vTJ)5f_^jKru^YjIZk4MZWPt!s`L@jOwDjq<`RE)KFAZ?*eiHT{P*##9HR z^%z2x*L94Q4}m-c8WIq5IQ5=A`@*93{PA8WV3)s&Mnrg7?!_(vdVS4Y?2g4}Gd1!T zDWp~4a$Fx9+;=F4XHC23P~5Ut;$7u$ACJ6mO3Zbu<-8?=7aZ*qclk^aDzlTI{-W<> zZuYTBCLFB$O?nH0I&!j3Eb(Rhzgd8S;*NMewU;XwR`s`s#yG)HtmkU(p=6;ih#+f_ z*51pvVFU=I4+|aAB0sVFp;Xj@AiOqgw6%)-pO&$?A#X>tZz z!4};1Rt;T3>9tFCiwv;#Lb;vSy!?|+hcb2b*h}}{Z9~{g3zMBpw|zx+8c!vWLimPT zH8zd99)Xa9FiFtH8fFbzXTL;}d+Uy}yf%mxVwe)OTS%dgwejd&=19H5r=V^vr~dqu zRR=QwojJc^|?82m7kpUvGf7eJ{C->^L!!{GZG?i~pDHEjTyfXa1I07&@fBLud3J{Utvfk37il^;i`$H~DP77#m-0^zxnZvG^_|%vR z=`5l9k~K}c&p0WqmcdY`Y>14-Jl~HJ#+mh5$Eg74b{812z-U!ESlx$$G4EGxwAIDr zrd6)%6v_HnF&z9ND&WJ}+UV1ZVMVC?ilirgQGue92npto$hq=6zHhUa_SBff3GdeKus`a~^2#~E)DRqI~paf&D| zNTIqd;y2b~vfWTon||1ZDBKZkV9+h1Ff z$dFJ9D5A3OIPun$)e4mZEJu3Cm)e-j;MV(Y6{z_ldj<$7+5EUliv6pq2MtUJ?Cc|S zvRSb0Z@FDihh@kIQhPTm7aX{OnKqhFQNDNschheXGw9^7MMgh#jF+>399<}BCym<` zXRilh)e73fN)pP(n)HslN+a~Z&!x!)N4THlQWN+rA%AQ_*Y;Nv7zO3JJx>Rd7Wi=9 ziZt88d^YYq8v3pUWjbF@zH3pvt<@a88;%V)YoXog?MCTH6Sg#vwY}~wK`l+KOkRr7 zQnrx!q3in6#UnWg?)lrLAK%>@MJiuCPNM^A5|!ieQ1E$%Hs_u*6&QIf{1Qch|EaFh6?Vt6}&`1`dFOn{?hMo8{IM?26&%5eo8v|6^bf2w^D; z`hf0Y5t~CS-&F_0NKSP@AkA02h%X(_-BavfsP{a8xpwZny)8dY zNP#6->$UfXZHwE1PB3&ik(YWJA+4~|2f%ahFB>k?ufxgaRLyUZaI zOAe5j10Lz*ohnoJGh3yf$8A3lsAtb#e%;CXvj6O*wJ@MOU9Vq`-cu)Pl5{%3c@QBA zj9S4BVwtPcUiCEt{^DO@;athWtx3JB#Bf^CQePMxypNT;yy=d?^Q=AIU?%yV+wgcY zCJ%Nbzh4u|U*Gn;B3OvtaN{h0b~inF9=|wN{}s168OaL-T-}78HP1jjciWfC&p`66C3ywfR!Es_IwC`YFnXk zH1=P4#gGJ4ngt>(_yH5HYa74sNPeuAwni{SO!rX9As2UYp$X>c{0nS-VE}>_N5|yb z?RGB1G`2%&S<~(pmBXu&C*@a`+N?HqyeQ4QmWEq{okdvA4rAOyrzb8h7MJ9rgG)om z&u(cNETnMr@LUv}hYZs&7oC)~RunZ2>rTeyXwD5F9Neu!TX(Ar9l?bfC8k)Vc1V=& zPY|@6#||c|S9f}7UB<($Ho&JE{oZ1iiN%q11;XIs1SHpqI4gwbMiMHgF*C>UpZgEw zXEu&{919)G%P^>3&m%03y{CYKB$jn~u(Txlk=8;M23{#3hl5e1Z11%}_O9x^59k_1 zg&AKrLnyHK0LUx+mm9VYbyKRWHmJTWmi&tnU6lAO#!Yp5*iJ)dDT3zh94+dy0+3=g z*wO#R#{|sBbJFTofu%g>%1##)JYA<<_S^HbQ-*Y_Kg|dmBWLXnCy&(yFGq3nL7ZlW z?|OQgE%KdShf}f6?j5nxojH#0Vr3;W#a3MtfLg9J@g$BVaDmu@vBE#qz#4>Wa}OqZ z2P}^x>7P}EjHj~&$Wa>eD7mThKf!1-9?*IVFUU}o*y&d9zga;4^lV*-u2M^Iz1-OZ z98EZNXE-E`-M8+7qR+i=sA4I)!Zd0FJeVnaF>UP;=X9lFmPI24I`ws>wasT*6dI;h zE^~HC?a{HssiDnWtfQbDl6d<8sc@G;b`*rLK^+1BKE8_M)fqNnF&nvT51}3)GFApY z4-wiZw0}krl3q-Fdf_PnwY+>c*E?0!K|`|Gm*cWpg{ zlE$vy`@A{3evo<$z8Hb;FNgkoxsOea5^xUPU%uE+#zI6>2yR2>ZXq`=aE-NxbQlvo z7$`0SR~n8bdj%$js8&gds(fx|U}6lU6$bhYkJbZ@gnW$aXUUKEO%4g~3)!5ThK8&=48FGj3C{jXNCiQA=UO~u z^WA%{-$kpQ3e4$qtC7BRX=))WsDJkHJPQ$}0K~g)tNS`82{T^dKx#Z_t9to^F~7fL zBTD(IPLOlUXd9Bt_YosZ2V}K}$50P4-NT*A0pA=!Xv5?kRcND$=hFPs4^=veYF>=0 zy5{^e2q?`_*ACyRa^iM`H4)B_XI)vqX6dACAdL9+S32VFFv1(rqq&Z)24U7d-)t+# zN^UaLq!iQ_)Dbh zcV9@gGgi-Xd@`aEvWs;$N}6`M{a`z9%s4*{ExeCZ)uJolvSala%SNaMqa$G8(GL!X zWl|9r@PMccp7IkTQEln@7z(J+8ifD#TLZzK?T>J){TDF#&MKHJxMOQM>{9R8M4CU!rLXNxCOc2L#h5n25^^i-eO9+ z4P{uyH4(hnN%+n@Fdx4@>$xGYK2WMQcU!59kR)UczHJXDtp-;)HvW=U0xawdLwvnl z$T{y#JRlt*P0avQzK_e@Iu`$>=y0%w9C>N*v|;G%ZZMhrDKh^Oyut#x@gOeT-% z>b^W}&)Bc{;YU&qtjRIOGBFIpuxljo_b!=>QJ55=vpf5vc7d~67ImK^M;R(^b(;Z2$ zMvqMhrsd%-Zy{^`q}h1-#Q2UP6f0HQt4Bfj9E1Dx3xVd?$WYKo6Y6V&{f^eGgilAz zbpIbRDSR2*`(~!Asdu{ujVf$lmx`|fWNFduAeHK&^R=(!#Hzjbx{S$n$KG*s({D?} z+p1N8_wqjO6}*QsP3_;?E9&`5pWjs+!JGH%e%@M@;J4gYNp}luk#MlH57rP#BLQpC zKss}9G?=2TJI2@dzK;EI|K1)~Huf|;NM zrdUZPZVjWoiWo9l6CXJ~h`+5^bgtc%ztE65*b&90;B&>n=WA?vqrxP}Vwo=|SC4LG zU7*Jy7FmO+qSQ`VKAty6Cm05D!12~gEnDwnS}UhNneUga0>Fu?PXukFM9)O49^|>e zZr#dzd|E~_@x&&7@m;@W<9XTB>;3>tD=(k+@ZAuKboWhCRcMn+|2-a;=BAL;m&ALQ zY}jCZ95ATyh4@pUj-<-HZLIi$96an$?;Vnr(U(y#aDCWUAkXkV&OmN89b(IPtwH8W zQ&%9J)}k+s_t*_c{*{+;K77!+t)_9l{AItjes%Y(?$hPKw$;ACP06!hI`e_P44mvm z|4d5CanoENm1dsrPhfnySbv#H!|ma=t4wr|ceYg<>L<|(hy{Y$U%yiK!iOgC3LNU# zcuK@pS}f)Wtpd~1NQGysWR&6h=CB+f(2c>h`=0D{cdO03^mf`Znc(0th4l{*BD>fWVlLXJ%IU%4(|b69TO!71y{ z>JK|p%M^PRl}Vm6E+d*opz3}d{r+!IR@ZR^n*cD|x8_>cL5?0a!zfZA#W=V0)}keR z`GKd~-;1PPiK!yFyGlYkvjL5fg@EYT>tpws-_Tj8J97wM3b7)+h@2@y zUPG~7t8*^APIQpkf_OIz*KA}=S+`ZnQi4J6;_RSUcbB`FqL!^ASdYmmiCm7KFVS2? zFhQ|;y*_uu5dACSwXJ*CfK%bYIw^H|d)M<=5}i{-BGuWmvJWxTx|Fmip+!T#VUIIq zYUv~@>Yr#1q2A=4N8f!W$_w@s&9E^P%pZ)y98}M?D{bIDxe81*mV9}wg^#jQ<1%Cu z`e(junOU28G@I)<^$H#T)NHr1mmEK?;l-Ufo;gP6cHD82Uk(~nOQf|2hVlXH5RDFz zzuyhj&hpaFcCIcGAZSDGJ-PL+Fyn_;aM*(YdYX-q4zl-WsH4RjkBFz~qTpcS zks=Qz*DtbLkWSGz1rO)m(1ee0pg~Ao1^j zAq5i4&(k(uQhck*fUOJg28dtF8g(J*wJeee`Z-4*{D&PudCVgLFF`jM- z;N`I4;0p6+|B?9MG9wilR6 zO?-gBEp9-CABmp4W`qtuIt3hEQ!w+TM`S2>1O18oEAsg-Po3@k;zhV#eCLzq0F_^A z_~9;fqrxvM?zbEN`j2{(YQ~ywdri7Xi9sqEB?D-jI3F%3ZPBSbuiW*TT+lZ-8H)-I z-^L(5ZNsXL8)YPvDXUJtwp*i8XdK&GOed?b73&STIHa-h=nV2u$}kJ7>QS&wbHn)P zjwy7v3t`eqbCFxf^1)so%$PDAX|q938xq@Dq?-#Gm50vg8$H*1b)-*)W?N*b5>|Bk z`9$}wR@pw2&P9OSv*#{Xkd1jh3|g%&p#L(-*~H2l;Y}$zI#-xVS?m#c{YXLRa0p1O zb$ux{x;)PmDP>rL3^OO-zv84GjGsGoaDhKAtI6r@avd0@1-yI@0hsGGPX=QFo?TMR zkwk)68c>O{BB}Z2fmO}D=hOM^HRkCXwubblDRZ+Jz7JMc@j;)V*9CL$TQ9cUT7-9m z&!9=CB+og@JM>;U99Vw6`ek?5OC;OW7wWt?AFDFFAizA)+%DMX?zT!y`=Ecq_I zc8QpC>VIY`gTU(I{Pmfb^DQ;)i}Eq-N7dJ5qBsTR*NrP=ee@#49@80|3`_>pu7`(S zFt`k=b=!%^Z_dY_noX-mba)nVE5 zm>!FH6(CX(QPZP)h2b_{2v64k0d@ZZIKjae8+=m2p4y(tmGuRqoBfD(Z8RTEac+?v z6v3ule>l?=>pP@vKa{vk4qsktW;E=c8;;t?VagM5&V|)?j66Cs#B zMN9&INFST?%tEVGZDTa@AjiB?!ffrJxHDEiV9!}F|b>=1y}~s>;&IfN`K|@Sm^p<%7>FMb$41G7f@}U zH7c9{@AMN;%txJ6$`Sv|eM6a^foP7BTgnQVpL|M%f0%KFB~;XSs`M8oc32UEMu$VK z7{N9xAB-tA)rFj3YSNDeK67 zk)R_HA5!=RM*BQ3b+g6W>P@BPMoQalspcD%v+PDq?2fZr?OGuU9xivLk52$}2(kqy z3&EX6qtJywITR>o+XHM6WwLR?xv2yx_!TxqMdC9VyfsVZl~Xn^H1v$fEmR=O5dO*w zrf$c0GF?gj<8_^LeC@DP1xyMD6d?&6Lz#)c?xkW|{@hOG8Xud~=fNJE=?!1%P5^-8 zIn+1f_}5dgKzrs^0uHbiFFL_yJMFz}@N-hk0htkfbM9uxBdZf&Fn#_T0@_Lz{2|!j`Yn1xWaz*(urPkMUk#NK=N$I z?U67p>gVLm-T`3cBSwvUdl!XOX{K&Sxd3dgxL!-mTU2`Y1>XI{YhS)&P4hL)Qdia6 zD80bUOHlcwzH@#yXMMg?N zA5w>kg~TY&dX1IXA;(Dk0+x~h-CbPR9ju-@xt*~~%$bdlUn}0JBqfSPgA$ASxS8iK zLW?8dvJ1sieFP%w#QVdo{VYz<7)v1cR!|%>e@AyI8OSOfAyspK#Qi8q1CM=~|F-mu zYFNWKZ;$l5!mPLDcmyXjP}@7tWvutdrn1C{nxP{A5%fXQu~c(9z{Vy3Os7#{9nddiz7psDP30!Hyqu`Sjp*o+@+k-;M>A{hChqvCKoV>X72uTJAfa zr<*`h0H{%d_8H>j?g*HZt#~p-hj^6L=HWD|Em7L^ZJ?)r{%m%kg>8`e3WM;vN$E;^ z{|haAy(E2R^D;P?r*-=~&0BFbutzK6!`=XiX|7uet;O7N0|?!4He(&@PybUC)q>*4 zR=eG5Ha+3M1TExSI2bIfJ`!+@kMVka2*5=75DE}jpNO-|@}`rbo~)it+7wFqtfoZV z$$jxAmFzs976$*LB;QsYK8O8wMsd+s@Hg`i!#l6W*hEDPj7fI$ zT;9jka}9l4?aj;G&8TlPE9ZBBy?UCpli3eP-FAt~!MSs8npr8O>Y~$R8^xU(AI^P8 z;f|LfAqxo^ptJAmzh(0+Krxc%}jx$kf0-?6N+Q$!5o%K6VO05R@u|O`BnS zlV2~>ZbkItP2xS~CPCu722Scn7U9eIn6=59=hmM$q??o8AaXfyn%(1W@B68|N$FmB zijK}J`cTiy)Tn$j6HZ#&!tAnlZacYi?$ zpFllIbj>{t9!_4bj3Q_csoaL}yIwS8G{Np}FK8F+FNNd{P>iRJ9ShTfB8=^-w=rjR2d%8NOR9w)BZG;;x^B(Y zv!?}21yxPqs7SmjFpfH=o5uxKRJ%Vi8P2DRz_7s(C>4WeFDCXA-4!2;e`t6UdKwLE zrjWk8*mbJ+t%=eOtZZjP3rod)3>F6<$u90}tn@lw@;FP&Yz$25ak5@XXOVHd$r^2I z#z0t7TpQvz}fru}5@oi9eT#l2ilB!_kUZ$HD|n~j(R zEx_=&EtsSn2MUR)jaJc(9XIx8$g^<>jA$x>Oe+hTo-PgYsOUv>h{umjz`!9aJ!|B2 z@5)*{g$t`@`yIPd3}*F<;m^|w65!yeJ`^cD1)aJvw2<0!Jdv+tmJ)o({UpI|oTt=L zI(>j7Gr@6Za@M0SkAHLUhY?R@BkE1Fn{ok>@Ue?|k8nG+k6#S`6(%&N?y%e1p`yIE zg~XPyJHONz>9#;NQw3lqMec3+If$P zK8}&N5zPE?=AIW>qgOHV*ZoOXAkC9Rci%JT3qlp~@zs9LX8h+OdbfKgca`M9AQvNM zf2`-1%EZ&xnyaw(ApU5&N7grb^|7nKuVq+eA9~!p_1-now_wUUysBQ;u{_eJ4eR{f z>zYpAyd%)he;LXi7r$cNIJP8+jE3GRP{!&Z-YHsnB*7C)aqh2en&<%eZ`6 z9E*9uyZ%2=DAJE){O0%(Rgi-L1(A`Gj;%@6cxPnxuIOUMqvU<_b^1BXe$f;yJKZ7dNE>$|aTyT$;7>24q zb04Iwt9JI{P<1ff=J^`q&uP7xcV$v8G~NrM3ZFPMwFoyrzadG0s5 zAUc^i5o`T?58Xt6W7Nx!`eyK0bi2Z45|a2U*ya98+vnSaew&|}pZ79pEt%m8((f^Q4JoMNY=<0gItba0JfvL zRXOWDOOv>nA@*8BBdj1M6KTT!WlL)hgnp>7k$+c#ECUdw-9g{g1PE|xySHNcdGhZQ zd0&`DWV-FRZ&Udrq8JpVAi!qQ+Fvfc-waU>Oz+O%qjeQPj|@aA3X%*xCk-5HWDuB` zV6ETSqYsIR9mAn$oT~=cSvG6~e0u4|uhlBlsVn&KDoTxdT9TMGUSBQVZjJjGz^+ZxeaGO$sRyS&wTP-~d7?X7bVzggAF(zaYN79-9;H zL6P3g`P7xp_r1SpI5q0F>tDcq$!8>Gpv0XG}*PVf zdu<(RQO}>Rhz&pBGP!dnE2mKvC^tQr{49(F1V!%43*txO-1mHTHbc!Md9EiJDwD*4 zh^#Jm%s!Xjy-E7^RD}$HG+fJ*o@{;iH7x3`=#m!zstTtYY}y1{B7bVy%a>=Lu>BA# zW3pnpRLm(>@IizfTaKhR6QOR_XY6f2Iz18%SC!OMy4i$0+&Wf*&nh&@fgV!ctP zwj08mUNNbpaT$t4{pcU?A=jThU*e^5Jx~(l`^tm5uj}*B@ulb|Zu4iEA0;-SBB!g& z#8xVqx_#`=iB011Sc^RY+O|{k>n=91$FN(U$N7-Sj_C%R)nmKczZCec`EITq=zAzX zGCnAUd6bM)Ugz}elg#;19>tqsey{GKGl3_*QTA&g499g4TO4Cg&y8a}W?4JNn2vTE zeTjOklcL!VY)=;*9kR}NZpGg}70RL)^KzDWy17z)$MXRb7~QfnJ4ABAi05HwAqe`( z_SP|4a|Yu~Z;0Erp~Z2={`vT(PD@kfZq@-yNPDK+nQsnc?0B3X*I0*pu&NOT75W>30Z1s zTDHcPVuJ7&bQ#0GnnW`il(@gP@iKsoh-nnSv#QkWHn|Yu4(4*3W)mzqXQaG}gT{sh zmwU`a>{7NG1=NL{;mkz1Nhng1+2j4wbAVURwd0vDvsQ%#CU0EHA~(C$eUvpeG&0m} zr5WIER%tT9mlf1@?Cj7yZW7nFO+uA`!CmU5;K?&;1kE=Ije?3WBUo4W7ya-mNO_=y zl&E?4x5c*uluM1os?mtew~{I{YPpLrfe^u^vGs!Lo<}fSe?Q63ep6g!BXPXeGvwWn{3=c+5vDCJR=i^2Dc%Kwok|H;aFE#k5A5BCIXLH2{5?@yti z1k@Uhzn!Y}y9foI)tUU>(~BQcZ0lJBGEvX#E;r?`S- z>>tiQf49~d##_8u-75@mdX``f_ zSv*3hOnF-C)a?YuVir&=N;*M4TdvMY`By>;=BNy0l7Ay9OUINW&o5hVR-KDn`6K29gpX2xkLH+JCv5d&o;QeeQ0B)Z;J4)>Qb zYoB)8t+jS{O{{s6n{F9n&HN+AmEtiwl*vcxP6(-(K*+-5(A@H9R-KmsSEd@+wl&G~ z(szl3lctftyHax!J~64?#fXX4F*de4C~oDg-<2B$y9a|&w7L`(G%Yu8G1@Pfa74SF?#SxsLBKVZU}8Ct!m4|N+IaNuiVhPrb9m;y2M ztrkVTW_0Og~F>kwg^4EEU)Es=|6JC9=21^^lO6Y8cO$E9j zmWvrPbwoFxQ;?3h9BFW>h}Rdt&Fl0^c0u3nstL`^pFx)^MuQhdrk4M^T4 z9i3oU-?P48AXDjQh7N&L7fjMS9}$q{r-MNA?XzcfVrE8_72AL+i-8b^^D#X*;$#$S zCW;Fsg34uF{{Be-*%LrBzTQS=_405?1ps}|j*ZbbQjiR}>nWH)ABDSxB9n8)n?y^m z!2AfA{K%0PFeP$U{%s;z@@L^3_OW|SbR=)T>NOj{%0{HFgAH-i5qmO^_zpCP^GRi${yu z(KbV<(cD|bddduz3=uuf!G~Pcos%Crd?fD3qBt1z5d|teHUu&n8Wyw((h=noOLgZV zS?vLG{50-baotARq!K>v^Tq9ZbxF~x^ikcYm+f+(gimv=M6vvF-KGIgqAZkbeOK)# zYA>WGw0NvR^|1aVH{rr^oNwP3_Ji4%lRPo2nF)24XFM*fPX^gx0 zrL%whAe}wVluwu#8!EGzYZ5w|k&&QSdImwrW^|M&uTMK|*A7@ZsFu?>n%g3f1{_ux z)p0OaJ4cL0hNPH+$c25KXM;?urz4>jQ$&~x+&Ox~&v0F$Qt<4unfS%B2r%uebtm&) zIcC-ti}LSP)ygX?WtK}C!p?Em%;qYDp$HQFDa&KM=y81aW5L;20mCjI1-JQ!*3Qjd zKS*8La%kVFsj5omR*;{3kqMoK49Wpa*g9C=Z)g*uJ>l+!1qIOpoGVdWa;(tuo=RCFFJsI1TqU|5sNTXD;S*K@~4Kvb*ZuJt!b>WbONV&$^M;$c33T%SZ2e_LJEenz!#Ba6aeJeap|I}-=ri=)>hUaa-_E!#tb0i8B5W#7h9EqPaH}OHJ09%fURhe{iguSTh&5{;MBns zp37ImaD1Cc@y*KZI@hgYNm0>n8xUi)(a3BSl$T<5JHYJvvtEaiOvBZ_^CL(RvpPcm zFg^0t$rI)n&lNn$qGuKF_dZxXwf?)|Fwlp9<&OrNpItu7y?th?moGoQWGp{4W2(&O zS~7&HE2ig8SBSb}m{QT1V0Prrp_n1UcAcyQoNdkQBP;uuL(52c;(!pn%cs%|Hoe&CEgeJUdDmXkD1) z)}>gdOILn2pmPvglV`JXq+dI68_R0SIpf z(u<|q)=VrT1_Ro|tfS-sE9Ggb-lsr5L1b`LHW%nR$`vs82;RR{X9F9(DxI=6SND$dpj?- zv^6Ro-=FE^eUgf6)mEA?*iWO@c@DKdo`NjM6}q%C8QP&nI=jO(w=&OvxIy}-Kd2$f zw@AKM2(I*mJx@Rs7DRvBYpAhr?do+$bIOWo%CJlwv|;_j6**U6|MAJ_NW*rUq1mY7CS8-b4sAMrA5u072{C;xO1*it6$vD|z`-k( z5V`m&;R~-2Pr$oinS4E(|ozY9P#pUOTEuFw=p5HTH%OTkV@OI_Qc58M$5SE z0>HtjJmpb~`;48P`f|23<<<9DER~{j%|~2kFA^adpyzriG(v%wBG{uN>?5Xc-SX2_ zqf0;b)Zo@^Up!`lqR^+Io+Tf9z%Wi*OrFeHj&8{}tvM@uQq&E(TM zxHZ=LnJI3*Vh-S^&}%}VFx0b)*?WHMTwykO-|r&TuZ=cG)05P}R;? ze{KTp?@SEMi@D(MGBZ(!qaqjl*v<1Fh*;F=>!rUk0$x7!nV9MtPWv{>Y};b{q{CMj zSsX5-@|xa-mB@+AJX$8;*64(wA-|oValU483EOu%j*7=3JD!L8I&b0f5|LRW=Nfhf z_JH*)3W~icQnlI^_W`~}GaU%0$wYkxG$zk-uB>n8-Jp^Fwqe!huVb>eTYAUyYPC zzm(*ZoyL=~LArPMT}f=-d1*z(`=xN{bPI@@^se5jy=D(}iY%>)YLpDRthlbO4h%Am z)jl!xs)<>jN-xZiiyIjl8e-G0O z?nUP0fg81 z=ou>uKC_#eoc{I zb`oq{R2tsBpi`Vu@=jA$=2*pM*D&`4AeB4QnY3RX;Od-e)#aAT(BIg`#8ems5D92uAAF+qgc||I1@{)vyXsQ z_WK}B^I~w23?FQNxi{%D@wi57LaGfBy(|%#HUuyei0mZe(g2Xs+0!1U9J+T*`T54} zVUv*OJO)NR@i41txGv?5`#iM=>8w%esscD4gQJW)C!9NDd)?53B{r;4N77-EsD$lL z(2csXX=8EGe1mGwoo`fZrD@e;kOIczT%F4`_)!Ks%R@1gs^ zl>Sq9`2-$0%FnBVnf3b#+b_{o3z(Aj*-Y7lH4O!iZi9JyeF2o}KWAu+;}3o4!1qq; z97Pt6pY#RI6nVTDwkDMuH%YVNYaU8!4JJDSQQV6SqN(`W!B(HeQ<-!*4$l>S?}_q3 zGmW$u9?~P);k{?`3r2DG`6GK+RHj7QX4P=zo3Mr|Ef$r32=3nhBthLFGCkK0T4q zsB`YbX{B&l&I4DR|GYRdHqw(uM|wmmOH$dDrDa5SoT3B)uO^mmY^&hp)SI&9RKKpR zbJnGX`|?+V;8sn9zAiDTKKQ`cx05b7tZ;O=7eGjx>l`wYXfLs1Y0#=Lsu*DQRy$Rh z)Pyi&3%ZXuYzLyY&%_Q;te&vyYS-29#Sg)v8c(3&(_y}ppE~ljBf)rhoii7|d_}-D z&bG(%?DC>*+BNo4iv&sM)SNQCR#O9_WTmshX9emNZm_AQ#6<7FCmv^$vpizAXB7&h zd6djL7cT$}a+$53sb#F&EZJ5@2&5ju>7=)udgq;LHaF`5cyNfwma|ioazKpw<85cd zKj!N9%V%T6A8$Sy5pbLeGr`-J7bvlhoU@9SMKSbU-)_SUj$P3>Zm*IKAConwmCG!? zWyxx&T%?*go0+Ml5?cQ(*%Jl%mDQEnPg8jyf@E9^`1YAa>$#v8wrQC)dQYq*>uLS! z+OIylJ2?EM+f`WKn6~c6h(=#Va%hsaSTKd^OSc7?=Et6*%?pLlJ1=m6m^T$i~`U7!H#pcNt6e zod$YHfI640w)>1_w_>n-@%ke|g**GZQ?{EGzATuupH-J0J5K z{UiDDODF1gBi)ZnUyYup$~NTrJq(2_g3pwh*I(WBN%;miobe-Hi-(ff?1GMuTc06r zkF*%PbIY@jmWfz3&OcZ5g}>qv9>lkMioll5Qhl42M*O5=k8cT|6I7o1^}A$iiP8`M zfKoxwO=@Q@zf}HPughK!{8YE4bBwQg_&#|a4=d`q5kT+(#=(Q}%EKgRu(7eLM#CQ_ zp&)~ALxQx!-;vQGXr?^E*vVzSf?L&Wk#Yl;xl=A8+jdP5cFQv5fLolcixZyTezzU^ zQ=tBgIFP~wB(*~5N!&5DG{VpnFM~HD28&cJ$wmug15(j}`7}u#Z*`5#v0+mk9f4t6 z*y7q|U7Sot&^}T|N+xRY>k%A2SmafYVmRKkhY_cDj1DBPC(qL_&BQKps29kwzYw1g zjfoNDbZJ)wwlKGY?{y|W3lJ4~JZLaKmSAoZ{>!$U__#8Ru+UH1e~B*Y{Mmx<7p{QJ zFfhWZVxhey+*{^D&J@L4VV#w&#VREAeeKRFD~Aef%eN#HS$*Hb<||a!!d+gsC%h1< zb_}26{F=g-YH#9~(j*>n>hx#V_}|a_zZ6!TZo2yjdCbcQ8bgiHl<#^Y1L89|pPL%g zU%0~)y@wuK>F3g0l^W$r4vVyV%aW6o4&b#@Ooo@0`=s{!=Tqg=Y`v&6`K%FEHXp$U zifS*Omn9@BHmpioWK`S#xi~uSJh+oew_ME()qQTn&@@c@-k%v7H!1JxIJx@9NYDZc z=y^qc>^?Wfw!f&n5d*UsmKQWYD1%#Ao{dJw>+T^RDGkg#%Ox_S@s#rQ=~Rp)Vy-*a ziT^Etzn|n!Qu$w0!YxlSB_*`q+~wXF=k5S zA+C8QN!~nVmxJI}=Fzv~yPSJCcX^p;H#shXJSUis3cDb-7C_b|Sq11x%BZn@(n}$6 zxoiZ(gw|Gnw$$$?Wpmq*1#xn68h9E3f3zLFK+-t~hD637#v<8QJ`c8B7c_`D{1nv% z&4Uaaxp0Mtgw$mzdq>a2;{I{RevkhYxog+{Y-n`#St^g~ufrvOsoUq@jl{0L`Aq${ z)B4AGtI~gE2%eJtb%iSZ|Mi*r|K&X8zs@WBd(BE+Jn+}yxBvOmQh$B_^Y00H`n%i4 z)mQ(#*ndCKUl-{6-HrC@^Y>eS9o78Zx$o+8_+JNK{cc8l_4yV4Uq?;;?)3ft-7GNY ze+|t4-;Qicz~6$cZTi>qQ2#AS+y5yvb^j?JC;wYYm(d?5a%&_y@7X@@`GzYz=K5RAKPM(878DeqM}hp=a=gjP%1YMu;5Y1Rz_h&* znhEeh_YMIYb1Ad`xXYiIoc)57+!^QeyAQ7cI`+d@N?(nI$&Gl=5y7ocJtCpz#ILucB7_=)J@~2$`zWr?R zPkZ@V8v9Yr3M~WA?>%B~?ww1Wu@etWnbZO|>$pWp& z*+OCHlYiWX{(@lAY|JD$Yl}YVT}+{bY$0E z>dvN1BCh`P?5oLl#10ltM7)Gq=KP=}qf!d=lcg#Gl0FC^H z!dP@BE|*Tz-`JI^b{jm9Ok#taXTug0$oO`H(46+?rn??yrZq1W-CUju8?OJLLL(9K z!mBNO9DkZQK*m4&&Q5vkk7#Dcw1s>cYqdn~p2e=(sa zcR!yr2A9m0VT~qw^uN)<-`*WqWEa8>b?@ZA(79w#qqIBdw_W_l=pBn(E{O^%kTAWU zPZ;2`6!P3{_+dSR)}zf&uXe&jde1Lo=jVzHTTCvg^k_Muy~z}+KmKarG?(+0kr@`e zJCTIM_2|@SwLU?HSn!bf{?W!0h*T_U2(C4}vO3|VqB<|ETi8#R&e&DWmu=oc>Tr$i zvuMFf!+5rx?BoX~93sBW)@-KFdK@0V=MkcDE;<^*PV-TDw0x@K%CO%@!H z-_Ltxp??*Oe!4W&HcSq0OBB@iSn?eanTgIQz67ffV^F+Xr(1HpMuVDM+3B{UzmzU9 z8%uoge-75wG=%jR*E?rrnhz?&nVCUMv7o+~H2 z)LZXYL+Mz%-Bq{OJ<;=*p2(iMrHi)K2u~DjoX!}YLlMQ-Hlb-!rd$aX*UX1+l z=5SYNf$PR3uMkwuynpfXQz!{plAkEf-{UqmBzVB25QH*{9x%k~f60qW#Z@_+GYeZC zU%K#!)uK8%Z%mwZKaIu;Bv>u!JnbqJ5=56{olt^;)X-b#krD!d&>;j8@}1y} zGxNR||GWQp^W{SMk;6G_@4eQup0)N``!JyD*SdkBrFzoV)xvVHFNl#_8bR)3$+IVD z6Ajl5g#VgQ!06Xoci#nI2Mh{Stc~u4A%|a`6A0s$o}Q@3Ds826E5b^*o0qv3 z)2Nzd+@sQyf2lKlP)kW;0cPUd2OYSEje7>0X)- zcu9-)al0)*ngpg9XJpVCQ{G5Bh5TZfc@su+vH{RMokE%F6Ov~!T#1lDn3?=$v3Fjh{iNQAd;ik1YaFpV+BkLv} z1Z@6%?D$W|L|(>+9d3CpRN*dBR%(RK6(zPv$kPlUJAN66hJ$zIeNa~HL?ih)R>`WZ z)UvIK{nJ)2I>WeGnzesw2ZgucdBi z=sa`5(YLtQZYkj&{5HL`+2JMhiTAtSHQ4;Qd5p*+f{Ww=7YPa##}^Am?3{ zbgmNCh89R(5OwxlCRLJ@*vw<2b`Ev3lFfqqQs%4RFux2@|Cxwk7ZzjMVg9`F&Vo-!o_Rq7@NQ9( z4y7&hX_kF&{i2-f?AO<1v`hLYgs%wuPRci@FoGXONBrK25m@rR`>{P@?5Dw%6 z%EsOn=q1LCD|%7(`YSn>eH2nAkPugp*>pqWfeh?R<3)W4lJ-Q#BwpBbd?OR_EV(6a z+?jkFOk2V4AYV*!)h&n?6DNgXv0sVJ%J+$nc^mvGjcy5Vin$<;tHKcuR|g!+ z3N1}El1U~Pt2r*Q1l&Y9+<(2mk55SSB=Jb1A5)lKE&!c|HtbNc2XpnreANbBtfm#sjLooHOP8x4t`eB3 zKt^5mfWaD~Y7`ff*X{;k*!3#7>l1VU+LD27-0Zwo%5BejiQ|%eozlBnF?HJjEq)C-_mPthuypqa z$k_)KbMGO@#0cQskWvck?r6(W!a-wVix7N!;*qYkw9*rf>b1*dys(YlD5`RMN)RJ^ zx(6GkH()dN#9SK~3=X!ox3|B4ihEZ zA=g;k$=X)CI*GO8BcxYkobxJO2)Yje7Ow&#PwwyWt$;9qlqR9-u=(bs5@+OW@3nKe z_(GgFImfObY)z^`e!hDL1DUvshS{}6t}$I6-3-r361VmxmZ5b)iU-@`A1m_>8^vJa zm$@XaR*dyLGSQLNr-~zj*i6N9dB&jK#&d2sP&k@L2rr`oYY~C z4r(UG@cbEMHJ}fVh+B0-Ei~`>s=(kvWiBDZPv3_81uLmx8HdH0^;e%g9puaSN)TM# zp$a03i;5UaRLCDlN_7mYeiiUs-ub(ZO*+z}=}yNBrI5 zaU4~x+XDFI4h+5}J|{@uhjfiEiW4*@)kaz=YM_ps*KUp+W09GEV0?=h{biccsWtu=_ z_^m|U)R#sEDZ_VG`mYh)Smy}aS^z!OJ=YUz82%_(VyWXWiUzzIJ+`@Fwl-fmID@iS zxQE_D5SEvf*&;bX@%azFR*Ihq@UK#&ZVx^W1?;|+;ZExriw-xx9T%EN`hE-EJRc5c zPAY*QH{%k_4~Yo>xZ3ux#?9djGnhU_Jo19#RldRYD!-e&Fcv*9=kLgJtC^S~rmCl_ zl<1yZV#p8#Ua0(?n*d8or`5vjrg;hYEZn87uMEO?-H0_*Mr^#`p`)*l?Su)O^xMM+ zrj*JojYtW}ph?;1-)^tu+^U3dchhdnW8Ym*$I4n~YAoq?v*0hvnk{|A z3Wg}EK_Sk#7JdWrjjjPdW`AgCq{W+`TNnf2WL2sb=S850QWz8Br(c;?S6PZP-fmy+ z#y+^5avq9rc=d~TiyEo*ke}8X#X-^nL*A|aJmAvC9(7T2|Dg%o#HAKV7QY^_P33+j zr+rx^zUsv?)fORyxOqsi&eKH4i!hbwpq!NnT!zwan(dWCeTWw}Qc@DH-JLHtDvUuJ zr2JqtpXrqChj|zp*6`zRpjszWbegKEvllZ<=STTcyR6s|g-(z0o~A_hyGMv`u{D?*Ual zq*ZR(x~lMHq))Z;4B}C`gsh_G#zVxq%i$UgzXLXBw1NAsug~Mn4sNe0NlFGmCQ=>@ zQIM=*4igndSJK+@Ttc&uv-{nPv$JKP&#%yt_a9KRT^*P2#t9&+1JGHYBH5hVhavFA zXLB>-6LmQX+Pf1|zlmryyklq6e{-2%K%i3sLfG)9Dl4+Gv$vfv>DEf7df49v%Rh*B zL&7N|)ylsEd+cEUEfZmG->>UuJ|>-M4sH_=><%lR;F5ATlu?E$q(Agu4GxYxLDt4> zE%kEo?T@eBm5XJEhbkjuiq`B0$WuCzYADmY{>MYZ-2xVq|1g9=XJe1 zK6pOJ+gP75;f?17+*aB$;QFHgGhjRii1-gYt%?h74nfnTGUUvVeAU1K-81I^@t6Ya zpAjM;pjw{!b`uv=lGNRO0`?F%>Gd3+CS^8H$pOZ>gNy*Ib{KfIsn!Ivg?Pa_ZTA~H zZ1MTZXz5U2StPsPb)s7A#Kw>*m+vQ=D6Z$veokMt(kArJ_ zl)eipq4oaZ9Ws>GeHUs_pz3-XdK?GIC$yjjIVSJu)PJFm38?Y@pw zVBdat`dBD_MY0AM+RfjhLJzhHSBOOcxI{_tw8MK{}Y!|si=X+U%PnQNWE zOPz-?=?Xr%nrYs1FpSmsb$B(_TTr50{N00tGCCghQWv;sGoh-rp4{?_p3QHV{QyQ; zr?~wXk*?63!71my$Uz(DC%TF>?#194PTdd{W$BiXl%sRuI(!pZgE~8gDfV}_$yOKkrjr^47EZxp^1PkX{yH811`ZjH5 zCL)47j<%NmCX6b$!$2>4q%&vjVFh`p!?F!J0Zo(9n`(_OT1iKBW7`Rju3uq??|)$# z9MSAmq&{qq0_@C2y;u`eFQCXHHaN!|e2Od856wD(XliQe%cQ#*T~b7Bg9mY()wsfb zxUhmRLbvWN8#BwLca+IxZBAmvG%L5~1)nTk%%_ja0825hxWOe)^j@2Kb%k+jp$F~$+DP2yjnYKYgRcQy z6|>@}qqr0<84nfN^y+$2QfLP>eqmuIqqhMKxJahMoN zy5hi571to^vXvIwY0*CHJ0(@RJ*=i-;5->mnW#ESl>eZ+v*N!_3_{>FQ>{qIfy>&v zC?up5rw&32XbFQ!@Tq}FbnWZ_y3AJ(8*+|sHf)e7rArA+A(=y$zqOkzr|xHy(6Tq;q?~N8U!O z0E}*T2r5}GmmeXFG3nLnR7LO59di{4H;p1MeVs-^It{qCGYqlW(~tbrjlE#84#JoeFvt$2E`Z@ag5(fheK zd1SNmIqE+?t`vBo(Wo%avL#+{L|YgU`{)s$Tjs|Nt+03u$w!Q7bZi%@RkQQ96~)p}iTB<7<@ST(M*RkJOZ$#U38 z?iTHtd`_()0_zTUXno(sKgrhPNuRSHO0p@Duw307rU^Q^e9y_00}oBxtJrT(>;M># zl^o!i%egpS5I_P2qnywy2C8;=D9mg9W3+?i{iq%Zk>zh+fKKPONKUjwf?#?k4hgx! zC=Ky(8u!!XD4C9AXVb*91P1$guuS$V%s=YSwkzN$b{|}b21!=JqQXt%lKWZR;9LH3 zM=9YSJbZ#Lejy7NI+5ps+~u}4MZrUAv1cOy@6$Vo`u zw*$Mnx&i^!Lp%@^p0v3-=nA|En(gjr(t~H-cj9}~!Vz8M{c)>=V4<&Ng}W%T4$u|g z^@Z(GwTGg-TG~qAB7D;_QK+`!&{1d$>>${xBWkan9UMioL?pP(53*X4_7nUQrz>Hj1@-J2Xe#4^B1y^yE%%hrX4S)fI=3(0jQX z;K5u?hXV*)ghesY1N&4t7)boPFL5iG*woVfNOW53D{h{(i2b&7Ca=EHzQn4ED|Ncx%ZZ#qfFaMlA5P$gvJ2KXqhU>D)ljq$xhWpf`_Li3tP!)jo6N!=cZH$Gj)_3C_2 zOiP$$(R&Zm@ls1|ZSD3nI@SNUV(t&p2TT2~h@aA@QJcZOPg_%6UJ9h-ST$YuZH_9m0n6qS?BY*;IWCH%eCt4k?)NC?i8WQMW2oq8y_H|E+~FNc41rwFi`{blf;E zd%7Y#86Nu1;F30E#3n+2sZP$gfuGniC}3q< z*?S!RV=U?EHCJ07c3ADC)+o-m0gV4}DOAv+=)K*PJC(@|-z5uV(HL1VKRm+N_^%mb@H z%2oh+DOPXVe*2u8n;RYE<%VxTGneR4m+~r24_baQb{+Nz$SkW6s_4!YI~SuGR`gIPnqHN z?ejgWKTZ^E+#!;FV}?{aoBH|r?UmP*KHHd`j@qRY{R&WPumIc;B`>kHcr6M@6tsn* z&PD|QkkqShu~xsctHLSAW9~+XoZ=#!&7ADUgL(itYA5;;n+RFGxQ$ZB6moo2a+TOMDsoyO_rQO*QFa^Ng){L9$Fco8~2Mg|P;Q zYPDEidQ?9y^!oYww=agshTYC0?8;C9c^TiG#$j9pVEZ$4To-b8ZEUbMx@dP*Ri~{$ z0K$Ijg1nFZ=DWA0U%X!!v_yV|_X%v+B?9)ECa)RZtbW$#E{MJsKU`C0@8s)vK{&uA zS|=56qKzJ|diPEw0T=Wxw>f20Kqr!> zVWo~fb{*+@=XQHiB|rMn#rc88+BH@O2vz4WwZY@4ToLT~O+;zw2KlF7X8Q_8uT=W^ zt%1NIkeZv>;(&4jiRX{P3{iD$fvLuqh!1&g5zqGYtxnasG%PJt(KyZgH*)%nGgc?S zz)nHwS9Lf5xd_h9J1rwld1++^_0H5D_UVU2L$|doI?&~vbA!)lXuvOSxm+}WDo8j_ z%?B0DzOHu^fVVhEDak+ev&W)zmDK!i6OU4nKWG?`jWPS?hOF%^{@td3+ip;f(r9i! z2Z3`S>fkspy^W_~KxSNRc>&tOiOJ(CNz6b(_)WQe^CNV>`U6?7uRZ(~cQ)Ex0V0`` z9(w^yb#sBI$mUsN57#jQVO7qYa%FH6+FtU|@|-Qatf}&f1A4?ILK&%3UKzu&Q4nUy zULrbCxi-Wn0H20zu6FuWKNNC0+?Sax%B>Qq;G@s(4-yOP&%s_*Lk8IcF89DM7*9PX zRstDoZ>4d;$i0(!x`u`?T5=N7>^SL}>LP=Zll?|^NQ*bad7f(*sw*>bp=-{geNQ`b zOCl`7^$#9r^o|z;XIM@}4efYW&5TJCyyY*ZlnkxuBJ2PP>NkOIx~Q(V8X2YTIBlI% z6`)W%zse8t?$LBl(>^0TfC9LCP>1If^MA}Je4+LUklT5`9M%cE`zY0Gn8p9aePK+4 z=M*dGQ*^1 zhizCyb0(YHtaPC^5NXbJxOhNo?0_D^4bC9So;wx=pu3Bg(-Z2P=+H@zk;Y&dF&Jw3iM-w~SPU|V3i2%UiehEq!h8v2XqFXX zW({M%NIUO(&G*i1SCw)d=`v734VE$4<&xJ!(guM|0|)!%rl6xO!oSJ6iV7|r8(#Yj zAd4pGCfVck$Nn(*jnx%Nc0IJ@lc!cP82UH=Xlo>w!v0=xkQl7?v_Vu7E`zI(8UM%8 zC4b+!1=yzrA`n}W8*(*O&to0J{Jn7X$6AJTPGKVWo!f*l0H~Ol=w0e@J-WdU<0U0j z;E@o~?#a_VM?myX8nLytm5&b*Le)JmX|M)gE`&4Vk3xWovXR89^m%kK%dgh{!ZvA6YN~;M^ zdc_1S*Y*t7$h%G&S_c0D!6OgKERp`(6gc0dd8! zgJ!0X_C=BJ_1H&W0z!tda#T+#6l^oPAXhWWET{L&o_{&2ivBSK2`MQ}vzo%S*HH+L zEf=HVF-Rk4WeK+a>k2D}W~$6g;E~jQ(4gPHOO=^hul+~CHSbr-pkWJCm9c;~v>0ksirIqg^#TfS=k>_VF;ykqk8l0MT z9S&2yu7gwOSOeTJ!8xY6#6@whx$-QfOEP}s3f2@xX=gimUm3{g(Qp7MZ{PV*$o>~> z)BpSHft0%A=KmD7_mlvO{nv-CI)8oWi~N7(w{*??-!lBa-~Kfx|NqQRetv$Uf{zCV zZYqkLj|spx9c}HOZsd%>zH4<+pCjcQ2NeB3bvw4AKz)Gmp4bX5j%Xi#9W()`3$A|im^e9D&_&pJHY_>Z0c=y*eyP!DPszEq5E1jR`Uw-n~?H=HoCoQ3@1;j?$L8It{BaD8z$7Db5 zV&KMdgb@@`8k(jP{k{Ire19N8XTq{AQh4v~cSk317KDLgqp3g=L(o>0F2YONYU9D$ zN!0VBEv=VHVTXH@AD)gOh*qGJn@7|99ekc|D(!1&QW9vUjLY)@n;Go$tVbg_azP(9 zxKUtOFQagAtqZN{k0VbHd<#tVF&cSui8ceDr8!Ru(#(ioX!bn^8{D+mZb2QI;rBZn zf&5=Tep{*jr>g%iD58Hwztvx#|IgpJwe;26GF>Ip+T@B|(U$K`K}UksBmg-0%>uR2$Q@unFfn`@$#+F^NGH?n*~m}Y z%m;Dk^~pgfqp)eCUDt<0H8nLT?e75r6HLd@+rO9?Lv8jpgEJDG)y*4Z{bsUD=i0)h zE}Vke9676_>pz3ofK}NQreHtA?7Qxs;ZLLX2GKSl-_E|HtSbMK;o;o(40-+5Es|}t zMsViY!2_l2hP^{RgOo?B5C3`KQ9GH8#kmyj38Sfok8j?Wt7dkFR#G&;dc|*FSf0JA zwX%D$$zs=8A~D=pP69gG?51glF)}Z?admaQ{ly&eu}w}uod`m{oAZn?Q?Es-@4jv_ zbDZg$nq<$Rr)x7=y{N63G!Fbfavu%xkKBq6wZShYlj}~FgKfzP(2#}dOGwkFL9$m2 z!bZ3mf`u!J4eNTKYWIT1z7=n~U~rXrlJ&S{sbpbXdd>UIjR3235{)&B?V#zZ=CibZ znS=>qyvaYqI(9TJ$FTWqAlk$gEpu=Qd>5mJaPY;tUR ze|946fcbn}V#SD4FNKh2jzevX=b4vi^vZY(XlR&+k+(tIQ&!qiKgN7C`YHQ3=HN;0RLwjHKC}OyGod~=q|yKE6R%{+>h$A4 zg)76XtVKBU&g-l5){4rBMQRQ%59>#`gWuX}-7WM;!<|)i%mm2~G@2%W(>xfSyK~Mm zN?r&H)v~hE_~kD=q7R6^9N&hc6a%*7q<_JrnEMLqUlr&gE4#b=R3b=gpMIo4U78)@fb(r(5mVg?U9F;LuD{0P9)Ad^@#=V>)qnU^9y6_wJ~* zftWv1(cQ5VZByA!dqI{#Y|DU#F>`~QU27wPR18w4?5o@EskGcvm2?=8>6)|051;QNqK=o7}a~S9aCKH+1qfu-v=h3I`SQ_9|Biiv>d3 zpxt&ByD2%?g<%9{eq-*`Z{PXtcTHI{ECzyyC(dIXoLmJ3{Anc}-4$>n`z6OU$tJ91 z2rl9+RMM^lXD&BRs-3ZuGfb{@`^syNLFVf!5o`O;Wn_w)(M>llPu2uBG8R8s?2QPh z^H9JxN>mcBR1W7_Z594Lu5#kfw$skeBO4Y`+BR=`6l51fBQ?o+=jLd<4qr1Tr{@?! z%%84HvA#QJWTSZKHAYiBbli_L)j2A@_%7!YpiAjxVM?`xn$Y~4 z%hQDO;2mvm)Gi^%qo8D=BZT2z(`NaKA7A^Uy-PvwE0%Tp?4on*7|b8MoqX@#JHTt? zlbkmCR7k*oZp)=-0Y@WddY!%ST{8N=&qV=x`uQ8Gp)%N9hSxb^@^wM;OWiD5aj{q4 z=Q|>}w~soPq{&}jH@*{S097V@_+npf+9l0)o~>i*^UU+bY6Z{3rdP_ruuq0UIu8Hb zmIS!7W7{j!!m?uh&!kk-JBwGubl`K_FT!_E7KDs2NZYRsmY`qy`{lfubS9w!gLk=Q z4Gay^ZG>(h^7GwgRCvS`MMR{ktjcqV$=Rnk{-)i{ciYV4lPYCQVR;*TMP*Pj%AZb1S zHgVCmfN!6X_URe9V@r15hk0$#a%laj&bcHX5>d%@|HVjBY8V+RN#%eo^}$V23@q=T z(ok2A@y>BA9UL2z^ezH)}T2P=PZBlJjJYBWCJ>~}Gr1Bc8T<0y=9NZV?oTy5d z@ooRwe{DIDTP`jxt;&BeU0Jok3^92xz4Wo5WiJYmfVen@=$(}nCmeno zgz+Z%n$vE{@Y9+1Cpagn84q*wGZGNSDA|UAnfHI}xoJ-9a;J;?Z&Q*6?K$)JxA8fL z=fO86w6k;G^}UH6ZRFh8%hK{Uq|N@Nj%{D(*H6!_iM!)rbQCIJh#ezOvm0zdB18c9x?JZadL8@ ztAV8RPndY@3X~gI(zj7j8H&!~%>4{fuj4P_&W54wNHy1O&#>mCiTgXwZ%JvY9hQ^b zcx*E$>u4hShvRp zOO?4DEx6w7|E>z66+OQHv?bZ$Pe>;Ys&?Cl#N8Lnbb9{e?KwzP!=bY)a6Y4mQ};dz zMb-|4G;+Ad`W$7Gj^_Qyn}1bRQID(XHkXEuxpx>E(X9Ov;WO8mx?Q{$@ zvT~wMplmYR&BAw*Mx&bV5T^D2{BS29KYfsIwyHl~;}raB-_497{_6_(R{=Eqll1ER zn!O}X#Z9cUzQc9i*r7>;pg};nZzY6}hv(Vq*U~SF(=C5~J2?O`I{o^#l;@q_ z1tI6Zei}HF&3>)c@WEH1gv4`$)2k*8I2+z|=iRQZo+?*Sf5l!}N8nAjo}}{iRD6;z zP{96y>Q6%lI)Kx~5R}*Y;y{%LGSBl8_47-hWl~J{we+-i-SfvgHk_dJ=Uv*^+HaE@ zD334Ku@vLW@>R}V6%XC-N(vgVDz5!xzCTO0Nk6PMZ@kgNVWYIau6*r^Q?QpkBD=*{zL6+Ag;N5T%RPIgMBFlWTxV z&4$fbFe5_4XS?=WnS+vo>zxIp)A5ljff=C*oTd9p>}GBHE`-OEtxtdd}G? z=U$d}X%hkKgPg9zC+p1|0zq0Ai17eWhfd63d+Jc$8Aj!@ssNdd3s+*$ag2mo|%?_r&(Slf_edTsPPO;f`nnJBmTc8d zLR%Yfe0~9AVv=e+kTKZvZUiA1a?s;TtrtY}dcL;xTfHD-yU9|db5VCLbE(6t%f)oU z$#|zYTZ}`>S^co`2^_lzG&!wM=4_lM23>HBNDI!J zj^6bO3-Jm!eYZ_nm_vL83{D|J{ROT4Bz@!uQjuGmOuhnrQaQq=rMISae9^<gpY}rr@aCheOELN~^Pw^~+pDk^&%Knm-csx!*qkA@|r2?oHH19EGPLVbh zx>}N2I<(Kk5q6^8Li`I)g%x_ZI9ibO7{0LMD<&yyZe8s>xWIG$4HU-(GdPOlj79#= zID=1|D!Ra}-TstCvmFC9Vi4N1nvC6+E5LlN0ZIZn-c=NqY2%h^@@yIpV%TaLS4x|N z!Ne+Q;$Q-sq1@@kQ%5KaCzM72XXC|GD7v%}=1;nAPu|FoDl1!yilf z-QREMS7)PbMFfPC;a3iCnD4Sz=X?p9Gk4Zer;GKkRYI#Y!R(^U#@;C{g{ab%L`kle z*1rF7z`Td*6==lFF7EY9WW<(j~M&H?+@>VbzYizyabksV_uZr^o=oKM5rstblw9 zbI;{D$;?e}-pHA?+GxyU@g~%GfsA9+(r(Vh<=6DoEohz1SO~JvPHfqEhH&bYtDYc= ztu6!8P(B8JF_ek*_1_n4+vZ4D_$CX+KL7f;G(Z7|Tj?gR#7b_Y1O)>xbA;$MMuuhz z%B5%j&S(Z1{bLMChzG@voIbAqDqiqSu;kugkLUIyW91QE-PBm%kXB5n-8o*Pnlbxn}adbfZ&lm*_;N!Xj*^D0(Z=UC9 zWfDZZrO6{PpYz|#bxj|#>q--q?8xk$8DW!z6|-L~2lV$FHd1VMy|&+rxoIVm2>|qG z*$uh&QibG75))z8v@>`Z^19#W?RQZKe}%Q59Afgn$VGVbZXzhbo%c;WQ^lS?%;QT} zD781;wrL4J37T2zPP^YF-+=j?${@eBZ>EYB-`rmHv?{6z(nwevlM!u7PQ1lhj<~w6 z9`!hMr`puzGAXd|Lf!CCyr4i))nd|sFqk8a^lIpjqR~}xa^RlI{{0ePFBrcGd=DHg zp)wh7y#lKNj$z$njNbZrmNcgo+nS9{d{57b{bwSyo4@)ymF}4Q%6;7sZ-x~tM3k>x zK0jBNnHCB&SW}%<%Bl=a763^UT@7FkFuH>lKAS%Hjo2HtJMCmagTQz?Z~}2CJ{H z-sZGIl$`@f@s>R8neTxt89twGZGD}kHMR!yL-sl=b9<8c%nkquC!)l+d1mE$K7yN*c0?Y)ArLW zu*TsN>YIoqB~Ak~?LXs-#$>_dnhn|3l$?8+7=SFH22BU33pr>o&(U5DJ(K@^SB0(| zk{=vjWM2v1zBu;5Y#e`3MA{E^$lxv}-gNfz9leh^AJ*|UkLH~#TwcDB{*?@KWS{VW{p zy0d^oOcmTOZzOtK21+wuGD=@zGX;lFb$W)5qHnELh#&3G{jiWes2#G*WGXFy3@eRz z(%cWx9a%}cf+2y~ja*yym&*uS@Wr#$iy+PAvl}GirnSgX}XA+IxCHjd=;p3MKk3s z@{xHXVc)$@+JpeuR zeS0eHw&LGb511%NWAXnk<*7CY!cJ7mm2IYK= z#rF-Sf9okLr2ZLJA<-C(%YA|7e|xaruV1;4Za&G*Gp=0i#x(i z*fMg|mh&eV+7v?gjWiMv57ciM=O-G(xzy`!%zeqEb|wk#tazGloU1S6p8yop7%1^8 zG^)ALfdkGug`yNa#DPv(hphM_D4~MR(-YiOrV{5#gd!8&@>AQC- zM#GC_nXrawLk0=3#eKX7Ha$7LUDpT6Qf|BtX&E8J@-luHea+tMEoo!cvwK zZfKYV6m=`Z^J{qF51k4PhvYuc5?5f6X%g4TiC=kN9+&&57}#mulgzoJANU|2;C(xS z@a<6b;&t=DpU>rq03qag(^5eT9j#x@fS8C=(%SLW*8P|rfL8`x`}D%-m9Nw6`%W1b zY9Ii2S@!$kwx>B#Z@}~Rju7pkYMte`4?kmkf#4QxZhSFs+ASedHbt>qjtbvfA=c72 zIDqYG`j`N-wneIoh9=qGi(K7#+*4oB{8hiZr|_`QzPT)eNLi?yD!E~M5K|D0>!hx*FU^dpRr7=vZLEAO#e;aaV1HwEH?&)#Ed~|aOasa06^}VuW zX(WZL1f(BMj=bWSrcUp3@^yPvI(g_hYPYa1M=M^_9UE-RaAOL9T6kcatr0JLhQkTD z>Czr29G~W#KRD6q8k4Eg!|I6&;xn!Eek5)T|5+C7I0u-=LW)akn`6iE1O+j8!}mSp zzft9wFnFn9pD?mw;HNE#V@#I|58!VqxXi(?X}Fox-^;bPKA*MEq(sg=1cLK6VOmc^ znL`_Y(S);Viyx}7wt0^=Nle37$5o|{Ekz^uE`0auem2~5YH&rEBIP*wUc&UfzExJ| z)}tbO_j9cqv4V5Is|~8?vewNOVt4cu(Ir_~8ub@gOcX_nr`Rn$=WuwV%|dc&&Vyk)*Z1{mss2#O6&mWpYtA zc#<~%l%#*z$8(Hd8qfJ{r~t@&whmY5x9cNC#GQ@a8w#7NP8wC^m8gy9)Yhhn{ZUv@ z(C4SD$}21$Ff*H*E&=@h-ArA8`=7Hj=}TQiA;?<{7t>Wi#MbKE9aT zM*SebuNio)tu<0D>q;$R0y=96FU;+&0g^fqhv#ScWNe?2i)DLTO=8$g%AKjo z&G*lXdkXY`019G&34J3LzbaKrfscS0FdS_7mCiRm$a`Ak;un zQ&i^SG+aa^tDpPv)3YP1#iWuRg?(nxH3dia zVi4EG=@Qy6W5aIWn#Zs!w7r^l`r=n7l53xjMM*c-uHx(Ha9`4x?nA9{7DOYSk z89i|hFPa}xr~T|V_H$Jhk5YBU7FoQ3d{1H@o6SR3uu8$y?)}N=nuQfDzPj0$8z6eN zjM2HZ8z_mrJ+^MBFJ2gXw2k>Mq#6%dR4EG@bYfvKEu~Jyt*vxbkBl^sV$G?}6KjVW z?@eSep6m_%1Fs!6lbO$%b%r}tz7`xoWtqv;VCQU1r>=qc?4ZLHf1Q@_0|3WAjtYsU zxJ_+;j&5t+_iUam$M1Dz3AI%vvH^F4?1- zJ7fm`=L?bnlVa#%1xQvk^6}!0=KLv8-e}H#B&c%O9}Q zvJ`>)E&6rD2%e*@+<(t;0g%L`yHcrFm&_!yyo51L)dBvKEMOH~{r%yY4R)4#n=XKG z_x8*Z#@0}mQw08Js^);5j9__&r$yUUx2d1tp*?|kRKGz%y)qd68rge6Hq&vz| z42c=U6^u9wzj`2@pc0LGH04bZhz!szuA@C;<>fe;5)F{^ICc> z-chson)YVbBE~~LIQAo;s^8P!{~z6GJ@e7~YwclXbu%%8tjeuvADF%S!}@ad050)t ziE)gjvKGF7VSGNPvsid6x_X$V~4}QI{{(fIT<9t948} z`;%ZvlH+9JO4V%J;|)3G$nLJLbI>&)t&IE{CXHS*`MOS#Q% z)IvRW-81+Y@qCS|(p+t*QzqT+IW=R+9SN73ErKu|ObfICm6q5P*8pa=Nww0cipjYZ*tM3gx=r7`_n&mrl zw)da!&{s{s104y5?Fo^#wY3e*;>M?czb_(NQzK=eR~%aqj_?fuYeN8y=? z!YLJAR)DpJe8M8TftcPYuB{(j!U9n980G{t#{1JiKSDXsP}*knfMD6|7Zn`z<8@D5 z_}WtX1YS+W}LV2B;V43f6PwhcBpOBQ;yKYnh0mX{bvV zdNk~~F7;&S@-e1lH}0C}eDjLX452eA4@dCv=JC#2#0oEP@@7-rK87KqW5Ms;F4d6u z<{KcXr=NGqERh{a4k;`wj0Pq2hCUw)PIJ3sDzo?ZV{Q721k4gmwmNHA4W*n$TgQ*= zeB!oHy^D7~ZRj*}a7NQ0gbE;C$4~`IDXtWw){CRvK|Q@?+7^)pmXi0L4VG%pe!*~x zQ+kfUukNl?fbe2<@&!(v=yJ&af>a;F6OWnl<;`V~{aXaqxzCa6Tqk=j&tKm0#O*-M zS6)uV=z*bo%uHELgAl>J{VaRbdjH;|=S^HZ#?#XTf%Z}XYaZwB_%Ujj6}vsGG3L+L zh5#MiL;h%ri)^w>OK=~LcO8tj6a#HhnR8Q;E?R>05~K?l7z~hEq24`!)(XUwD#P4 zb4~NX1Et4iGH~+q3(k^U4`v4{1+my$?myC_6zzkF(901!a$q~ zTOAaMCQdd5l$@DwDFk}mc>)MPp320R-kG!ST3W zTgZ%PZ3_Z)n|4Q2weoAgPSho!du=;XRsZXcYkI)+seQUsc*8dH7M;|EE@Na5<70Rt z#2(r!Pj$n=rE(>a@oUzE9YCVZ3ebGOj3Gx^OsM4#v7E>9M>+vj!{Vje==h z*{7vqEyg1*zDJd?kUD3fCnBe=*h1qLtLyY|$4QHdYqtOKUi;qdV;$8Nf9e?T;P-pT zqjUJL2c09E*@Qwfr7rr~wn%7_T({9cWvDg$f$vWy1tF4v!#1M4m{=V?RQ z{SDUWqqO!VqV(dkWhLVN7Yzws9x@kbqlPK8wbh|S+=lIEA~lj?o6|o%SvNTcSs)O^7k`iY|*r7dOy8ybVQ1^gL>%6?3 zPoHdPtag8TObW2?sqtr>IdJX|wWN)`4BvBPhpnv$@Hfsk(iG!&&h0osGBm-cmAlWy z)Lb}o5nedky#T9RyrixyH5KtpdufW8_J!=L;oW0a*SAqxXK=UR{T*y(N(yChgHU?j z$+py3f2ee0w1dkwb0BpgD@T`heR@|sNwRpLdUoMQV$KF!&hLfz-VyV7;*#-HeEWJ@ z2dX6BF0FlDu7;J6rcYdI3<;ijn$DE<0sihx&3kp8_;_!Zei7uoB{^nE{*|Jg3~sAJ zG&S`h7A|%f;|->xKHB*^JG%IMjE?&}9w}wxyas??E8;1eG*FlnBTz%fBbQvG;VPwn zq-0|$pV;_Cq_Nm!1f{=VE&fJhMCrNko`@{odl(qjD5d&Vg*DcPazI0{?~^I%d%@?l z!Q2nwACQ#!aQ&HMm1i}Hd{^7}Dmpqk5@no5-%#^Q2Aq=-^6_hq!Ae1EPGf0}kzn(> zk$nkaj?R9n^+F^eKkw5h)Q0!@8GOZhr#Uqpsm>wo9&XRy0=4n6e{iIKq(5l*J4zBT zT|j4i8-;>7Oss0fEQ1%CpGKSr6HR^h?#60||EiFlRMYg{f&I9B`uH)s#xljLQ*{me zI1P->CwC(!rGg0k@#xNu!DmK7luDDi4+>_%;c&&(4nJppys8AD(I_Fo&E4v8#=iTu z`cth!bZ(trBjx-CP@@4RQIv*H(n- zSTtB9rm7l9<%O((1-2@X6PR0ShT+9Exx3cFf%ucQ7cY^{a(S;A-SzF2#4ZQrxbhZr zH>(N{TyClOK9tT{TvU|tmt?EMb?Vs($!_V~^=E#&FC4c=QC;rVZQbn#+azZcY1O>1 z)uDYewatFE8~m6otgzeJGEj|es?HfdjBY{Wn%0ae?l0{lYC(q7Ztf}QKitIEO9zhb zJS!gnma^R)yb0+=0oG4#yMQ%KD8PE>2L_pY4!WTzaKo9ck`Z#kXU^fCG2;k+lY2?? zdH8vI+_^Ae9=Vr2{v8GfTv7Kwr)F-UFammcj2X5n8#T&J++737wtReH}Z+K1b zYTpCu%I9Q-%;IWO&WUR)EBjM}55le8MSA1Vm5-Ad8LDU!GTzf}9vs1Bcn6?X1cqzGvNj1s>?-hgR(B-%M&D9_I20$6{KXt7pjt173)nWJ?|#2!*<*AS^JnA z$aS?Gh({C~au$6un(%QH#^*kcBKg(L*-|Y3HLjQ59XooI6ur9yf^PskiMazA#D(oi zVG8|HH7FIoULbUVCHZ>m5?CGP^v+yZOR+#VBKw>#-k-!NQNRrSKgzZ&Wh z1B(?Un4AonXts&PJ}NE7rN^>8eQ2htQPJik^z5EaS};X4}}8ylgW-Cw45Q!t+RHubEk zCrlS?*g*k0M}QTqr8e6*vY4G$?Bm&SKmaXbe=YsI!{;|uie!|%<`0E`%HNV!T=>*4=7S&>}C@Nf*S;=E*=Cx9gUqB?kg!o$PyIU9jct1IIjM%Ug)Vyhh5uP7z z5(BMl*05W0uP-cD;>_li%<4rjhack=A*!!dY^8`I#_y2ysNv3{6MIY#v~L`|kS##z z&j9Od^aLG#suj>sJ;CVo?58|~`{GQNCVLAY;PfOi^X!m36Zn7PHl9N96{rxKkdFUq zV`r&#dfw`DCg`?g*7vAr%+0rU>hbs>W^dgOO;Ta&0aL1;Ldzb5Ojr}yMHr?t_J%ADZydj!SsebID2L7ccXM5RIVIv3E&+&=4rVuGTh7n`xNONb5Tqf(H>eNL2<2K+*fbz#R zgd5wM3~Eb69=}5<;2PTyF9Bs-0RIkkhBH=eW1WNz_Lw*FKf0f1oZak|9)?sGY>4)X z9}8NY-YtS|Iv|Hj$v0+!3HHa%+Tb(`vz2ZN;&>W2da?`Pw0Iivkb$178g~BS{0(M1 z>kPtz>exi5{oSQnn~LnR1CYuTkkJ#=6ZA>9y~h(0?icC*j)JhW<1{aGwY20D(Ef7= zz1J2X?MhDUb`;dZsIz#TvF8MI^Ri>5I*ziNt=LXVY!lwAh=yU}gdF3_3#OwG3d+jL zZnrQ`$98dS9E{PF_6OEw=Rd^Yk$=Qn%D%2k1@M+~>$2t2nF?hbv)(To2~M04XB8lP z*tmDN7vUT*5-%e5liiBkGFy~qp}7I+#mK`H%C2> zwAHOGW@f0$2kN#)0VungOO-ITMqtq_uv>7evf_;#%ukuanL`TsEhV(9Y7QwpqNq-R zKNcZ59pX7AKuA-Tjc^U>L{`iq>tKTMo4GxRUT>5owu}WRKQ4AZ^=>8Hxj{ki{y9~e z#aeI-n4G07S$coPADNnb>ZCsD{r1Nbp^9w!SV9vNsF7VPme@EhpGfQbfgaEo{}|^0 z6uJwm2ZQONCtw^ho-0G|{Z)%6h^$WPqZJ-AcHI=}mt^JvL$orxtoO!vStdtifn9TH z*NUmr=Zp-^wuZJKt{Owx)l8=U`a~~KV;rc1O6NnL=#?E9RKzb)6jo&=Tqbqi9`w94 z^L#wH>uJ67ZI0+%C;2Mpo&w_zj`^9M!93}|wBjY4l}^MU`4p)XJ{Xdp`z?g`BPIi=CoxPQz zz$(5k*5i0Tzk>!BLH5*jU`ZGfaz}4ntUAQ-{e(ZYC+7{Grb0_hRtV1c=ofn;&GApX zO!ri<2#t5<#9W8yy9u9WHg?b2Bs^XR{5!S0{6&PNc(Mn9?4!Kf(g`#N#XdhhnnNm% zh*z+Y(gJ1OX5a1$Y>a92*AQ~?OjIxl_#k_?r8vSFdThObj6!&4_6)`#~ zdBquhET+6U+Cn+NvJ6$l((JNBU9E#{v=g*@D(lz!8-p6u3*+r8R9p;#aMyTm+4@h0 zPQprOgw}1!M&cwEZON}Ha-G9&y=e~QvtAx}vB4vb;e4ruf07$!t1!s@fxyOg3x?k=IahxOG)xrDwA!<|M3jy*2yr_?9(x8h41(!(km*V5mx7AIbb zo_Wvib~gu2E1f&Z&lTO~7p)?x8nNno1ZG3)2@JlD=~)UcnBr`lcwTask{!@ePrC*5 z#&5*-mLj|*cYlv=yno~bYrgk8l)GWn+A~B=j?8KVUbNL1!DLCWz<%3{H4!W8MZ8YQ zL@(VL|FM#Yu1k}~uorr6QY-kpIB0Au)!{r}RtUksQ3o41Kzg?o;Vf{en`_^hyfMRL zw=2%(6wA4&xTt4RLb=d=wI^RAZuTJ>6!RZnAS-ZNJ7OuJ35xR~h)ET-tkC6RA|jA) z|4@G9yp1}te2(o$?7#4ODVf8te({R=m<-WI=F;UU8Aocg z1fdEgvk59G zbYyn>4BK7@BF=L$F_F-vt#)pgqRj?@gsd(D=I@Aody0Zq6mBGBq(mYA3#L= zz}J++#fgXpk)x(9wxjnxV9%ffeZ^y3Esthq6~PgmYO{uTxqphtLw&({Rsg7AFqq`` z5>T2-g&^y3+46E=U|^$MglI(kkmOigx$b_mTtV$o&TNax=V$^&c=E%*X>l|OWdOW8 zYa6QquIOyTZl1zm5^5Lf&GPe0n0iPGeEx7}Oj%hoN ztGJ#YjZ_}&Wf4CEY?Zitn3{5l*y`b4Eo8ZT%lm#r!$e@qm)sQW8f&zH8ISy6H8<=2 zJmvf?DOGWYFlnjWM)Zb;OI}gU``rtKR^VLy!{#>`o)SlMAL7WMgp$gyQ0{N$vl<@B zfx8mJ*PZYQSMC?U-+2@y1?veKJ7W?Qr8$W6xk%$+E?La8VyCJ0(Qu18+MXc%NsiPv z{{IyF=n+xlMis{s^KR!ntR2*oC-feMQtwP1oAe22ZrDz0YSS&LIpjnrA7g?S! zfIg=DS)j11u!{Vkv=z}H6U+5#b)PMQ`nr|0Ibl ze*QH;6yt5}tcdz6G9(UHD9i_;Rg4w5Bq}#OHzqAp*%K|qU-7_*sg}SLR>W45x4kU_^NqcSS`XZk4-pFfD}6aZ_(31<2H8J zeq}l9t&d^ylWmptU^10?|0NChoW<34MZrU5P4ndEX8M9&5wZM%3jAxX`hsUiB=}b^ z)-7+8OipBx;mX|?LzqeIvL5Pc9#l}s$`khTAI2m`hxtK}@gOCf0E25ax~1SRXmu;| ziQo5N3$J0K%fsQ;WjJ%3fBkJl9E>BhmY>U>x%KoQ56p*1khW4 zaGsl(dJF7rOQdBE*&v99L|Qc7O7rd+$~c(m&a>>YF*y+HmBV@y0Q7C=-2!_Z*Ci8% zklV^UcJ)X_+?D&cz4AT%1g`4NHaJeK|5 z;&bLbwF<@vW}xiAZ1!qxWE|-{ffhTe_%AFPsXVj$sBHZ4&jJK{nf1V}-co6j3$q=l zWkL}TE((5hyZcW)K@P;>#$;wwSV$-0^={_<+#`sM7M$bmmO`}VRA2r?XeYp_9@?e` zny9x4_L(1d{iK!l7r;0DRalza6Vcjz`>dN-8IGQ}4C(c6<}$s5V}{w-6UinqOFG?L zg?vJn)^E%khwN9JPfwO7vKYw$yu6K=W$FOQ1H$?Re;RS=#`C{tf&~ElmhVvn!-#5H zG^_mweest^Q3pn1Mf5cn+-(8=Q`$tIIrbU1q+|*#?&V6HNN5^rS$qWwx zw23X^Vr~sJ-&Wx&`2j8k<&({-*Ij%@(oA^D)Wx`Qq4dhU`3;cLk|&OYC6tdE;GDl6 z6f+UeC@63O+4WF_Wt$yj=%ygP?>2UHzuVeH+z>j$LfJE1W|Z^ z%80pSbkow((%PCI$lj>=eW9Fy50U&HnNz!g272*<5*n#?)hdO39}EX{($WR3VOSf_ zjHMU9^ghv(3L=F9c?Rf>hZZHk1-vV)wGk@2^^a!j31+jFCD7ct3*qPZl^4|UZv$>X z#!m!;FY8-U_$H7G8<>{R!#va`OGuJzdT*N)!yo;~c=_(n>;ybY4}m$FiCR<|r>yjP zoLb(o7Yk9UphqCwms)8JXf#j`swme5Y}5o$k4U=7LR#6N3*2<_y*$pe-Pn@*uATt; zwyZ5afCq-Da#AmbAI-cHRC94MU)j4G1%wAZH+2^0^e@vkS^3>CafAPn9>!Ogt6f%n zZ_VCD=k@HDUgTNY!8)#@;}9Z3+kl0inaZWy zPHj@m+Nt`MQm64}P4*_mir5!<-Ts>I({G1$!oRPH#4W7@XWEY$%S}dXEL&F>9F~yf zY>!mV8vL{dDRtR#5uU`c6%QFHijn_m)@|ByR$3X?HK@loQ?ZWW$ECC)PAD6!zNPpH zEE(d?y$+t0!-=NhKSwGb`lc>`e(aRD7Z%Xn+V+l8GP!3pf0F!7O7Jgc<50)#9)5YJ z95~hw^)asI<&q#h-fr&zyW!E%kVysZ5$a3{{K!N75bu{;88=r=R~tRZx^4g;^=`dF zXTxes;4EC(qbqr^v+W8H)XSehoDkQ3pcG!4TRQj5cb>D`v*66%Oe^k^N&R1p$v`Hz znj=2bAq8y?-; zHYt6yW92W7lX{rgx|b%j{MemTJPqyHwml>->npbj0@tV_lNd5QDD6m&y2n5zP#;4L zYa9*B?G@&K*c#+Np08~jSMtcO^sd}zU~N4S6KHLte(TnALp?!Kn_m#&4gjbX<};jp zZ=?o+gJ6x8PrL0=L@AM3U#m@(-$tb$k^W2taI<^bs;UPC(1X|d5xPtXw-v0gO@vh7 z8|JLP-iXXpc-JjD46?Dk{dg9m7F_P1(YuoC7m1q}Kwqv*5U_TNFXQCiR+Ah*?a&!o zrY8XO_Iz854V4=`h{A$`Yk5iSSvC3Lj^ELd%4goeQojwk1#+L(w$;xrt6YWwGddp8 ziF+7^rm5ZbVm6k2qWVE-yBu zn5?w%W0h#dun{v{imd*A^5MiIBhgO!l*IzL3_w3|6Wkz7n@W!?;23`rFxNj19v47I z!DN=JB_!}cS$Il4DE?@u*p0F?!P03MvHwXLfZkL_0XDr}@7~daim0AK*4GSVk;}3Pv zz#qCX_MDw|utbt%clOl+t_1Fr)9uy8lM<}ZO$mLYjOW}IYzKe!U10qMpy$IQBO7;( zT4Ggrih9Tmu2;S9ZiT(oi~``*(Ngij`y2Bl)LIHk-`KwCh5%acS5zT|%ef8F zkaS}TiA-sDX262R9hs_ZH!}x=b3a0Ho~u`o7W8n)dW5(~lTz@Z_5Wpp>@eHdHnWmEYDW6`WO;9Z>d<+7>e_Tc3i zuU2c6HO-1M7iXd>0ZjmQk^-DC=~Dqrus4nbTFU>aCNn_8*2Dq9`N*HLD8UiCnyZu3 zJlxq(0m`~i(o_->#?pRsCEJ5TGV%|qW1)VOV=97!;B2YzywYZnN&5)7#Grrjcj z@pI!now>_A11KVSJ>W#xB{Qcl7RJ*FPRoGpQt-SsRQ+x7hkkJ-s`PTPYQ@y>39&?} zuW3xONKA9(Qp|?6+J?q(h9#)3D$yC$lb-v0eh*V*G?hlnk4K4ZQJSB1NjOE|xL zqCekr3IW;_4-SD2i7$p*@d?!eG6k-+ zyu&;yQFrz9K;~k`fdcsX7L|fJooXC+$Yp`B17^y|mz9*z?@eb&946wIJ^IvR$gL*i z-CGt|6X3@f+!@XZ5lOF9i&}KGSa(xE_Eu*crP-A@#4!2(+jTxiMN?c=N5^e!+V}?R zu~J~m3*Pv5D2veV$C*M3MnKfap0!+HLMnRtIlai5 z7LJ^1KJeh>Vu=5zfvVo|&XT5bf_3Vo+0Gxe$;|3E%#Rw`0~by%oeV!+eoA2^(9X_o zxc@@gHd6)^`K#BjkrUa)pltSoSqp5y2v1Btr<6F?-0@8Hm+2H?A>SsVkxF#=QGVa= z$&tzyhI@xkqqnvSw8s>MdqN-w_lDx%fc` zq9Oym{v6p4B31o)#{Ne*051grkVFIB5FF@mXMMr1AYK51#VN+svq3Nu3D5tL^P-8hou9;@v2i;d~V0C8Wx=5D-f2g z$4QZMv#gl4FIrPh3nsUQSU8e2>Z=uOwa4e8}Jd|OSJpQ3bZc8X{^38_!fGX(! zV_5^LDp{cc^1|s43Cv+psZ;f|fu$Cunbhk$%;-`?rq`W=ndIr~ukoYd?ccr9E2}L~fp!r3!W?Vaf^T5py;1%Ev8&(q@ zc!4%_Fz=36asok1Zt}_S%k^^|{HM{6DNb*ku}Wxkg3Ri|8-uvwl)>{6+(fO@KWR-1 ztbD-nA8;UdHJ1XsUmv%e0QT!&URskX&8h@K-ZxRS(HSEfEO!w03~AqH5c&BK(}P*a zy(9<_%1q}aZsN`bYn1`bUDuKzrPro&Bjb4iybG4Wc$oh3-C|z z3cCXC++Mh{OgQk{j{AW4;NO9KfR2X6(fR3j(^k}Gn!I`70_Zzi7j-MojwN*)i=pKzS|vF2j|d`JN)+dgy0 z$LxT#%VboZSzCr27=+XaRsYFfkkxyMn+$Ab&ka3HhOOo<4Mv~2agO+_eLNtf{2!lX zNrn#`DG`SmJNbzr1dCyqDMPT4UgxdKvwXY)ce^M1@|A-K!2$$q^hjg!#F{cW`1YxYWFQ82|I@gAv~P z%EDo&tAG#`1HlOvX}{)IU0|9Ih-n7z?)~s@dJe-TH7yYU-}L4 zx^w8kru0l~pY|6He@ncoxY%kYC8pw``}-mYFhn^flgx##N^2#grQi0o#9kQI=s~D4V`rOpSl@J2Lnu@8U7p-%&Dk$^cd>Q2%?Y@n)XpY&MDVhfeJE98e_ny zEhtS>K)D8s+Pe*}Ayjfx5a^J@2&@ZC=k1Kh{M%9?j$nV$SO3cwTRpT5HjeQ2 zu$jXILrQtI5rRl_^AURy8VlfWMmU~XVQXwMFgm;OZQmG|s)0@H@zxntbMK8}qv9i;fvoe571=;$) zAJu8d%ag3g3(DF}!2_4m9Ff=t!ZfiZp!Gv7g*;hoZSem&%k`SNoooS34BUlUF>lc^eJ7*r)V(y<#&bL2p zg=N7Q^oXV8kj$xb0d*iC8JHcO&C3>kt$r^14!*0s{Y!C#>vjSXJ(}|mwM3sU6NoW> z_&r`G*a9Hxh77rA%BZ@eu;k@QV)B!-_0Bi`-G z!WFuAj03C1E?drICT;No?h}(O%6eXZbcM&wV|t3J{mhqKWb)so6JhX;^)WCUw|^wv+~f#*o9%90xX<@FBU59HVocgH zwEze9f=^X@4cQd%CIFFUe8@Qd=4#bkhlfHR2k|801Pcc4CO>onJW%$+%3-3`k3D~f zYX5;IeuuZ^K8j5jz|Yuu!;4?o<<&R@4tI2L;=EN*TnSCc`!By%_a0qz-AbfPTZ;w|qF%sbi)`*=T6@(QLFpksVWjs5FtYdp$z{Tfwi!!=kc2r^Jji~NaaGm= z@;e&AB9UJadRCBw`YUYmGodU_dqvY|xq8|gj#i%RE6oI%r!kV<=PGc1jm(Yuc~RYR ze5{rUb0vjm?oKzZo>8Dpp7V-)-=}~x1zij#Ki0?;Xf`mW z3XYtGoQM;dj*#jgapjWXREPT@V{O;pnG^I3;D15IxaH}QnY98+Mz2$_Hw{RJZBf2L{t<6*y%8tS3_H+yWg$Ns^IgjW5c>EY30_z;sEs+AZvABykSu2jdK zF;aWBb*Qd6NaG8TBznq%prQ5=gl%7*B38{jF@@5804u0g+A}92E^KVF`PAK%5UQz6 z7Q@YzyFcnXipc?K2LH$a_=i~0>D??G1*1D*79Z&rQ`t>9l4sFMu|!YI^r)w9-F|7H ztc&g7dDk8RNO-)y zAp~HRDx9CjR>nkc3VJDP3r&S|ex0-aK4%%cjm4j367!+tp8qa3*qP0mnRN{12(blZ zmj;zTm<`>R+n;CO@l8>eawqbPhHWcC?wmsQ;3vJ;hdL11nFa(vrIONI9}M#<+!Xw} zL7DeBzv#4a(k*@VocNR{47>9`kEqo{`vsWbW?ZJnP1oMAyTO10PtA@snc`~R9Ft0S z3~rFVDY3>gHS-ds{RIog(;Q%JLAWwt=*;R<)Xixrl)S?T{V2pck~zYud(_8g52e7= zI#U0Q=Tnl0q|0~@o$UYip9d6xu%jjG7W#s7@>^`F{fq1S0o7;M-}_OJ08$M=pGpG1 zUzs2nsP@`rqi_AjAX5M{mc2OH#TTGt!(CtVe6jKWJ4Cde=?DN;Ux~3bPz4}Hy?K>Z zJWflZlw6r=mtJ4ug`Agj){(b)6ePW;0vkAuk02~zxppi+OufcoJo|Ro*KUk3sD97LFFaHpJD*raOz%BGqj1$BZy0By;|2*w?$3Z+7+1Yn4 z9bGS}K;G~gBt|%tP}+OX`3q>jQhSwEUkI3D$_a_ON4XR$Tif!}Q+w)K$mQb8B}eJX zCd?^_q%hZ_PHQNR$o!9b^qZLV)Wrs@C(w~m`3SY!7@V`w(o2OP_RELDoUxduvUazE zM|HYr{^|T{bwb%ZY0^lr;E#fdn9yDVVa`eWyC8F($^&rnFFpWrf$12Ea`o3z27q0m zkphHovDv^$q=5EDnH!105-X@&+C(>k=W4o;(Ies>mQb1i?lk&cR+$PX+xVn?YsOUO zb_f-@4+3a({}#9(%g%>xLn{ISRouQPw7KSI$mlr~xS#mv?Z_w*2}EdYM{= zw_v;gMYZ}DP2Gb5gt9|Z9!&;ZU~VP2Jb6 zS@aBM0tGSqpxzH|EtajB@ZJ%w)lFHOS|Cceou6qbr(OTLgV_!Qx<|O`` z;BL$X$Yq1P5!wlVl5nlKvn2?a>-HK^4rX4>@>6<^AfIXIdjl|A*ngD+=o!$VFX?*F ztxK9%K0?f;9lG{jc|`DO>!;B&e*=yMt5avndT2Et2JgKq=_zsQTKl6k3iS-+)9$-= zx+FG@E1TE1SNtI&S!MoWVL{O!aSo`?&DTulPr?qA@>e+4@DRL?bTvQq-*}cU_@|Q% z{c*sm6Y0yRo^a}W{4wb_eu8=SBig5OA(OVIdA;8;az=R<2RpqfPe8nyLCUzzSLX=_LzPA*v^0YU z)f?s9H4#4I^>Ow&i1(V<+qQuCVdh^rAsqVPs{7W;9GB*+fj5tzmwQc|Bz84^<&xbX z-)as!6|4m>wajiG?iJz7cUrt}YBpqkRJ4Ws70D!aRrErRUist2Rlbpa83|}%21sTw zzliW>k}?i4zbJg*E1>B>(B-ZXkiXx{Yp!72;HP9xy?nZ%QM=+wGOSo63gIeMR;wA6 zWiBmA^?VISZ6SvfHAe?R9DT=vkW0HqOyWA)+mmiimbVb|i$|8pgUJ^^3>pmZRfJ82 zojpwei{`?)Hr{<_s>L%dVwaW1odLWzHJcA=Mx3`b)C(p{BQ{nZQ*4h+$)(-yUq2Ws ziv^enTGl|%T%|j}|3YG|2xNOkd8Un%6rjtqH%J82$|5wsv-)I(^N1F+dp>K^l08mz zuH*HEg_9>wuDxH%%^h*n!r$xuCPgvx-~pk~*B;^OHa%tUly9=K2@vwJEf=iiO#(l< zS{}rm=x*(KyYXEo%(aS z!PJO3ky^%ngd#ylS3f;V_ipan`SN2t)&Tc-$GhR5J zL#{m1xh^ZQc#lMARv6BSB1)zd*BFP(=4aRG0ml|BPuzBFf9cJ?8F;X~?Bj6v@Z%bi z3M(G0ju{im-%9f2H?n)i{wyLTZ7ppvCoBEI^jb}p;fl4spl;^aguWp^tKzhy^m#rhF^W6{?v0M7d%=7Uttyuv>>g1oeo@lAh}duKGZ{|B2IFDqsT9%lmy|Xe=(PUl%F@VkLC#D>@a9KjcYLpH{nfGj!oEC^ZZuIIem7&93OV zt^k6v0s59C()-%7FY3Z(N75p+Id$q6lOH}W^LQ$v(nh4qU1O}worvDtf-!A03lTT6hC~cU6nr3$FK20fKGEJIO5J;l zT%GrN;%bhDdr_C2GW^ZT1}pJfwYrjb=!3`y<=J|2f2=0o%PS%?r9fMMF~pi1ajno; z*B*d!BU%E+&Q^ABukreRvT=EkYpECNa(kre$8Ci)QfqH?#%Y$lQDFg;_Z_BLr(dP= zC<^#HGTvdod9$Y?33j@q`orfV6L;>*u_g8J-x5E@_EJ!*?6kZ8OlmCubQ-~ft31d! z>@OZ~Ta=8u33h3{Pi?JihBWKFxGo*34pQweC*D!mBHWQlFVWip zW%9j6FCiqy*9=vl+ClOHo(=psD1A7^u>9=s&oYtVgim9su}N319Cu{+j!FnIu!<~ zLTQSs$ST3XT5hN~XSz4-HGuPZ1hn46oUP_zP5f27T1 zK!11Li2W^k?dfgj9S|g2MRpqiVlU*SBqWed+- zKFpEHpOApzNfPhc+FB61_!023k@0hr(K=lxEwGrMcVM^(lX9K@hL4v7i}{TAG1yMc zDJTp*-8C0|=A-dk-}Yk|o`C(zcWE9ydNfTvk&}}%h~ELMrUu0cE~IW``jUzc=ISs! zzy!wr`(5i_51(fUGOjzsBDKfm>UhxC{3dKWz9>;#Q1p-RHzI<}# z*I$61`F+COZJ-1F^!qUk41T{){kuW~!*%+;u=HPk4=mW!YkR#n^!4wtWMGi{eFJ)F zjO|a~OLU;-wtoA@E=nSi+U_#EEt85sXP<)#bXm8u$>G~Ai4@jw06oefJK&MqGG z^V!Kjp`@4D2q=Q~x%rt%88p|_;J)h9|M45aHMr-IE3 zPwrvpG>oD?0}s{-1t)Ab`@w~XkpvGxt38a2^P2OoU%%G5%kYLZxs03glFw@UJ$EAAgAyMT}Pg1^uM?1Qd9N-I<*Qx@7#};k1Z@dl$T4JjaK?F zoHDD&X&Ai6thqoP`+dgy|aoPTaBMju-yh68-mm8Ju8$=C(E35hn zt&LYZY2SX(w+_?{T8+9|4~ibY zEg(gYZNVrze6M=gq7=?Z!++-DCdqzI)~^kr3LAr7$l zV~{my{u2xaGm?n%c5t}VI0h&79ZAoY?)DaqAygxFIc$9eofhq&+K*W&CBEL11{`QG zV2$Q>6x<##-6NFF(Vq?#YMJUUUS3{SD1Z04{_KuRnxACaSrhpl-OD$I=GhbTM6auY zpP5iAUq20l&mSIK0DVu%tJ%L})`O80Y#1nXwWb|Pu>%|AJBHjCk-&D=Mv zqonJ!jWuX%YUBmG$pCZtq-2j1D&#!+ovWV7S+lSK_;VfX2mEvw&K5D zQQG}Qw*Eln%75Jnl$v41IT`KODYxk&T=njj?@%ZurY0yTNXG&^wMei?OTQ)(=%L5W z3=g60gcumW8;aZVD|KHq0KOsE2u_f$-NntJuLS9;YFqW(#rNi!J^lgB&nF!I(5WmJ z_3}SeL4Q?kS6SK5lC2AeB=*-`pekR5{#9mleY36XRMga#Ko2&=)L4Tk+%FXvCxsN2 z$%f}g@#(-%Ltk&t!762;@`6izI`pbQ+s)AV*wfMBn8HWjdu>}$Jv2(QGTrBrVh!z; z`BOJM+3mld>jnMuwk!z{ZhF&|;mav?o@V(pj{@$cs0M~}p?~}H+Hh)2#0-(AWo`5r7ZR%64kQp%K+3YP8h?gPQYS=RzdiQl@Smr50{GR!);6%c_2CB6u<4Jg^{E2+-bWbvmLlb#vK)3SY9A0t;qy+(pN6nC3_2v($Ci8>Sc%T&EhPCh&Ff%801m1TN;(cV74FA2 z(I*ykj$hI!CMGKCn%CL_80H^eeT`Rl=u~=dYFAJrVD{yOV4Fi0zu#6COw(*leSQ7Q zV*h8^V?s?AMBiMJkdU}^snu2VazD|N=y_Isc*8$Xj^1aEbfG=Z!?Qd?q}8(7A2@WV zcIOWT&BxBIgM(XLIo{4d@5|l0y$hOu+jH~@P#LlI708*va^-8}XHwMIsk zppM&~1*A`)78a=dboJ_0790aPJ%PtFVF^i9cn+PiJ$*iUEKesSBt&7bSZscNzN_LB zsp$FepfPGeOBlVtaA+_-^2hkpCF6c0$CkEAL=XbBsavRIVJQU-3{M3idF+S z2oAb-crxYZI*2siyod=234u22O*x``i2OP}%{76%C{jW_{jn;RKFPOr0l=Rq8=H$( z-V4cGAc49%bPqCgB%M=q^{;xyn-@?0zAb}&*_`~QmE36p_4G*NQSZK8MmwMm+*TjQ z+1UeP)@LeZBlq&EuTY#!RQD3xlc=vrZx&i&ZeXSeV zfI7(x)M?7ix{mBaGx_d@?z@d|z9$FE_{C(yifi+BQY;N+*jeaXx&5Dy`Tk!6R0sVl zz*aFZ0LfIaesma2#pBs0xwwMm=?ZFFAKPm24KI9V^IFPJ)R!LcW9FxlcJ11QjQykpo%B;Z*9CJ`t`5f*+xB0*a^)E7|I^-g zMn#czi#9r9LNSm81V>bq(1?IU0Y$)30g((%5EPJ1lQZfV00}BN3nEI+(4@veVv}=j z1ezS1*ra}^s&QuS{l549+;!hw@2#nE^%Pa7PS|IkozC9-d|=1tJh?Y?$@)yY8dpeD zMtB1`G`c`d zPWMTz!?R;7*Jt|+GozavfJz=N4^>COjf&@0UqtOEA2e8j6)LXcurmTAxEb>-QAZv{ zMMc1_$CHawh%rR*P^VIZr$+h;F1e-OMgyhFtpxc}SqoFs%jehT2cz(l zFB$bri{^r$_Vz@E)upaVS}9fy)3u;fpcR_9K2e}Qc}9bfJmfl)9^MWpv1)k8dZYMw z|Cc(xtpnAtpb^qUq*?7lB_*XxhOLk+^i#wDt2A;+MRdW8P#=OBurV+&u(ub?kS zUUsR+D6o@^;P-3DGA!1y!dx^{j21a5gx&DNid?()-YaNmXb8+6pK(vQhns2)5S*A# zL&Kra?lBbR+g0u_XlJ!6oDOq?B~GK&{&D2(34!V2?~inQ(IGR(`6A5-zo&1jias=- zCj_pdht)|kdM&R30e!p`B2z`&3IFkm#p=tJBMx2$aJ}Kt(X5uv=VrcIf6RIA3epNT zgVi(JlZ|@Y)7yKd{YghiWieV#1C;|L8{PTjyH0}+8mNZM?fOhq{jySq&upsQ#^R6g z(nmKw3#{-m~%DGutT$>=0$~wna5dEH?n- zm*LdDYsn%m#4%N#)wX+lPjC(gV$^%xbl(Y?cimPXxw}C&a27W5$3CuzNBTO zH{cRd%F1@;3h_-rGw5zf;$kK3I#RIKWIXx{qXYWe3^n$L`(ygIjt^)TTIn9|@lztcL@x+m+AO!uu9?hnP>)@I*v$WQxaxEI&rg&{(i1yLVwj7-o$Hs^C@ z#3$V#n+F(nwIO26B7Hz#eg1MoFz5IR5yvO5prWGEfQ&mh&FS1&YU^1NE|r*=Nb*lG z1M|vQb~9kjM|R)jY zF89ZmK9IQ%r1CU!B=wfLt;?w)Z~6(E;MAHrTt<92jgJ%R9Xyw}4*Eng>N!6$cF@Mg zr$-;`s`YLt02us9n`v`5VJ1UZ!?5^WUAx_2UH@#p?l!@x^O;EgaF1rUID$Sjn68%xFDXrev9GD-3 zhn$ThzjUYTge_$1l@&+Vh7?LT&h{kz9wl0s*^o?}=hnz*$P``e%t;e-UK|E_P1%Adk*Xv`2wQ&-F7&`Vk6XXG2tb@GJw;MZ-)tjY1q5`(LW=`5ph&#j5Nwk;)*F%hr zCI5a=jV?uH&aLEzOT^K4(`-{9Tk6oOV=N=5=wz1wUodV`BMT*)Wzk@YOG*-rK{Cr_ zVsb5?4wjhTAV~~dYqa(hSkEVjuL?Vpch(bsJX7!^eX?B&D1{ImCM=f)-dwBFEUh@7 zn-Dn_f^w=HGg3L_55??=_o2d~Ic4cdQ<}Nif$;4ceEI?x? zkf-Wv&0;y|@wnhl=uZ*e0xf(z99h#62oJzZmo!=kscu?D1 zxgR(3{E(tiy_R@{j>q=XAHRC%(s_Sb7Cu(zHDdIX>`#U0mNkNa2sntnv$Kf23!y*! zk)ffX8Ntx(=~JInXem;b2g3V?+uE3KHQ>mEevmp!KBlg&ZregNLg=@to4e8SpJcCn;6O z1NDhjAX9v8W`z*Xl(zl3=E(e3Q6%kI+6}>&2p%ew6O%l;L+^g zrDNM%3@4^yI7vLT&v3A0F53X%9%SbRGR9`{lPs!IDr5EVLkpslB=GW4KaKjW$ z+d^9cEKr~vHMC$aNH+vQTB3ixE^K6>bWL8q2C(VE`=4!Y#!kEZG4Yh$9~LPnZ<8KQ z&CG}c`UQMJ!^}Ef{?4tm0QJ84v}6Wk#zWBAc0&KN_yVkWO+8QC-Q9t-6#C02UtmGa zW`Z!Ef_|nczJBo1`Y$Uk|2Hk`|8(}hYtJJ7%|+O>2q6!}4uQCT|9-Tjhbth;497vP zHut`*?h`;69rZ#!KX;d~-6H*Eb z3&BRlGy+&a7%lCnws&m+$p(qGvo8C70gJD~!L|-`;@PujKt4ExK_JDHtd_?cMW0_z zsSwFUGCzdtinKQVA*g45$ZU!^3D!^yl~jUnV$b+UiJdz08HHzcm@i#!da|3q1B6|HGna2)Vdo$j)X6s*Wmb9M-)1`S z!XJngkJ4_Pk2@U4T5nRd8RA#sv=DF)Fe7-eUb=LN&3X9Q7nSs)p#XOULp5{vj8nK1 z74@M-WgOS;yG)m%+g>p~c?5JY#@7l_RUv`z+_Nqq)bp!zO$>2OU#6y}FmFFXia8|H z8UP5lt8+_wA#+9|_eoz$_v#7TUtD@w`~dd){ixd2noLDpIn~Dflh~~o%}#Zx4gn-2 zn?h4fLzrGzh`au7#!tbP3bET5yUF+jyEA89lk>}q7cZ3i+yt*_g&&q~T4ks0q+M17=gcXx@PPNuByWy;KjR3`W70 zT6RN)Ji7;7l72t49l~H$zCxVb%CF_XPi>&{wr|mK*Y}SdaZB4>{hAi++adix2{G#c31SS#jL}#|(G)rGiUL{Rb8)058J5Q=OuxrQ z=5ba2g8ujCFyEpOsaqLFSbBJKfii90WzM?73gXD4blf9YvRnf-LadyXoxGN}UmI)l zL#vf|GIJwqNTQU6+ya z^Ot(tTz)Fm>x7H@qL*R)_s1)7n2qceL^z_a{2CHLn;yUobyv0nG_XkI%JZ=83YuB# zHX@GRNhFI;`;+mLn>fu&i2I0`!$%p8tpW^&2hkwFmw5}v_uYbRcS*JOfcN2e9@e9f z#TH&T&Mx!;UQ8Oah)dpv-$uwr3p5f|B~23BjYZV^Xlg19XqalRa>O6JoTu=WA!z#; zfb$&XQk8k%09iY)LXOc;ug9(m)UGoGJnHl zp{(0;UCb@LWT-~_Jmn(0cHg=UUEfzy-n@CkYyDYZc4ye3uuTkmXK zqTcTM;Fh&}2_dd`jT~zor|cSH6y7j^UZ9nE*L*POQ1?Zyr@|8Jz+jYefu=iQ02izs zTvB^+`W=BY>zCYfyYA&tvPZDDrv}LiKTek=<=j*_aq>(%Te<~lJLhbj_*$kEW^3f2 z)4CKc)Jt+rHcaIS8M`A`)3p}Hjwe*M2NI8$n(~C3nX_4tN41YdU_E>88;Xs*C3oL-upeCy;@7N^v0BAG4vOo@quIZ1ZR7rUdkTk8JU z*{NS1hVt$CI0$4wPt;@nyzPS3f{cG93magsvz*nZC+?jnc7D;1Z{E{R%4sVTKbT2e zTfh$fs5-d5;O{X7}J-Nr1 z`<}5lIo~@SXmMpaPc?Qo``M3F4GmtZw1RNwbz0F+gX-!B&uOp@+KjoBk@y`GZmreD z##m9SbgokGOz$k2sp_CoPhnbKu+eoLnar{@#(8CybCBnXy_nw&=q@Hn)cq>yGIa9v z$&>FMHI@R@M26jGo;=w~xNDZ|{ktJX{}@^|!1CgY%7zuQqKppd^XVa1O2-A#KOH_; zgi0-DiZuK3)jv}m{(T(!A!?-Ok3b!mKa0l(2BrNb^P$l~X zYYZ+p_0DeW1{D3523#O(U$-IFSx2VlW5WJ z$uQCvqriL?qpm%Q2NfS}kBELSYf@XVfSwDS6A?sZJfOAzgbQJPM1z&9>=YDa=UVF^vUlVX4n0JaMX7MbsM@ox7<|z#kp4Vj~TGF!98#tH% z5YOa`D;qe-(E690aqtY#QNx@XepQUx-v1+#nyQ1a@3uXLb)=ne>g36jx=83Js!aCn#{Eb<@pXNqCZND$U8H($i#KVNkOdC%PVbclBL}*wi+sIdkAW6z z*gfdSob~t$X!at(PE4lBXQJ-QPS~vSLsOD~*K65L;v7%d%(Zow!5r7D8>Q+APB-?u zMzGyOrW#Yi_6XkI}+s9dp1W0`HRoc?EYrcol_6|zJ#Jb=N@?=XXH`qq#8D< z_9^<{(ZkHFyVQ0*JN&eV)()EA3`>3e2Fa*&NR?TAcb~O&xbKzMJjwfv9O7}E*6;gL zfB9^CKM~=_p^_N={2dkQQK>!AswnTg)X3n+eaDOGHL6g|6Xywv+ExCko2Lppr&}j+ zYMJjrel3o;8T79JUymbRn;X@cxj*%J=4&5JLABu zhWlZDF&BDnCFb(C92+qSmfWwN6~e1@-BRpmFVDB+0A<3DgY~+R<+v&{w|(zRS_r3F z36Z`s?l2vN<%k4aXU#Jo%7xZ?{TlUY(irmaz(%YCG2q)x%A4xFaJiH+8C6wlwEBj~@JEf4XG#gD`G-ggyE8HS7V15@Z|}`Hw_?L|SQo zE5U3+UR1nas!|<=R77Amxjw$)-IBPr%ouO6zb#d!lfTPn)1+wb{OxvKRUMn#9 z5P8pJ_MjIj9qcs-^IHHsp-K*o{H1?tV9MgH^;xvGDel#(b30XKk+Mca=6lI%M3^68 zYqe&lX=15(7);*pfdBnRAPLdHvnL`||ABS!xln1rIX?Q}^EZ`~OHdrcsjAQOn{ivlsjqEM|`zxs}pru$9;Eic}E( zP!#$gL%cuLP>g!}udT8jbOktA4d}O94L6gdR~YwAwn)7gDYfePtHlgA5jPcH9IhD0 zpd@UyE3;b&%%BQJb1@I8S7*cKN>ExH)(DRU7k3jQ`@q8Hsewt2KnIND>);eG@vTIp z#Gw9q9Dkx+ZCdbz>j5SJN5-s$vD|37lTA5+szwWe`l25HtmXM5$ z4&}HI`!r;CH7IX*GU2T2b?kv`+B%E`;MLJTuKkC2SQ+?cyZdI$8jY%*{m z1s3Wi9D_K=f$?ILh5cNhx#zDR674Z3{)IQ)W1R%gbdjNo8(gEh87H+HP+{B=#O$fg zvB1IwG@(Zn$$0OSyL>S!7w}$YeD9(CsEiE$>cZ<7mI_P4T9s`G?m-LPzjc`s8|J;UDmV<#!|7ELL;{`?Ph2!}wwMY&W68VD~g$!RkLUhlPG-?WZz}JscVy6QO z=54BMa|7Xd%nvH%NkH@MG2@w?{R~#+FOEww^$5q7~i#^FJ?(M0O zf5@@l7bmnkQJ3%u8TPMB?KHg9u70ew)3w?3KN_SotR1v}z8DpK-B{p~zGV-=*CW4v zDmu@WgDGia|;L7_xS675W^=%{3*b*7*p_1~E&$x>TIKqiI z(8D(Xx_N0z^a_B#{4`{aMooye`U5A$nZMlEe5f5Zu~gSBR*cTe*-y9#+*Bh{E=>NQ0d zM}*B3U%p;+j~FmTpT1s67>V7F@7_JMsgaobEkjd5L9CYWJf$fl)GdABWe>Xp2JtV8 z*jx<8^KaTx29nR7%S`br5?{LO=qaDd`wdG_{pCVih2Ha^TZS~r!QoPTjLG*-j~!fp z`J2-lmdBbO86Lf7`<&Gmj#IPqmqx7D%!cxM)k%?l_SUmi4VNP&=bu7-o_EzX?wRZl zf^-oo@~s8!Kzy~mR`+lGDYh>ClKHB>OeJSOj zK~!v(O-1U}DJ@+;yK?51Oyg&g`UK>39a1SGG}Wp$zz0Myp8FRRQK+Ku@W`WRYrnfW zkE_fMGoj!2T-L@8+&w<)s#oBolFw%N(5GboxVK+0ulz+izlR^%(5&Mns9qbYuTLCm zx3z>j!)wgld7sN%|ADp@3vDIzApnJqm&}~3YN7tt*6_eU#H8<}Ya-G9?m&yGV2h}X zop61VAXsRuGs2H-JjGb!R(m`hR^Jq<55I2@n|b=VFe|M(oY#q}uMDZN|9>|X%KLnN zkbV`JslzmUMBlGUVLzrPXHt%%f09nicx^rEwRnY$YZH>OvGtEO8FVpVqkx7?iz8_= zKh%04jI;fx{Oh>~ZpyU3p;llN>m-c)CcJgy%PtACOEafY@2u-RG4%c#BxC>LK#Psw=J{^-Fh2+GwV>))sZ|qqtk^}14&Uw5 zDJrAX{}vT5!Kj$sbRZ(Re6sSivP}x{h(96vocg)0`w!lY&!A?h)i$@;(_~MSO%Twl ziB4jCPe2wOpqy)9FN(#u@t!O^88+{%`%?Vsv9MIV!QPLZy_$NX+=Ne;5Vw&)Y?wj$ z{FX@j;5=iDl=!-A#nR4n@QLCQ2kptjE7lMG55(9cmRYpwQ^0%vmjdmPx1&=^_r1DY zW&TNnoB6crr=`x%*V67gW}NU(lMMoAAIlB)zrj_JtkaA`(mDx|0dJ7q8@qCOOr}1X zL4?noNeRMcSfdZb7ZIwh@%wUHu74vumt?wumq@E#=G8xPV{6CO9vhi2D`^?==IbdL zuXF#7Ctk9FrYRNe+iIwJSv2N@*gn71kRP~+52qFQBkvwl@_&H25&O$|{O7B^x!(Jf zY%toSs^4GQ#krJ^nxA~EX&n~l`4Gw2Q5+U`$+b6h%wzYx^uWk~aH$mP7dCS=fm_Ec!6eChY(*)c0GBmOw`kpk6UeWf%U0$93z2WIiTCHq^% zaI4;B_Y7@$@%Nuqw4s1XGgD9{C zzhKKl^)HXD2N87?^sxujJcw?_F{3OS$MskHlklaOd{MmOZl%{UgZ63t-C?{MIkDDj zW6tyB9}eYTt#?Tl_H2Aqni)6&XG7X0-i1dpxsn{<_I%u_T6}p9QvWbEh9b%oG0b%6shweI_=v zi#;3Mykk_ZlscZ0&SJgTp#QM>nbROHpJ7-JS!2t(j(+BbdAl(H!Vh|~4}m=z8rK%I zXuzm_KxW5>k_R*m$7$oo#)_pP@bYE-=U}rO1u_>*C{~CG9I{Z2HYvU z-7&rK)p@HsF_vA`(B)zQbha%5@i31S{4V~1nkAEpGDg>LOYX!~j|Gm7FfK(&F)BI8 zTa`{<+2wdezSsrtBvX7Cu5K;xdtj`ZLe7#1waH*lsL~YPj;3sp8@OC7U)L)gP@&dQ z(Av1R7VBS{o$UfQ2k#Alt)SPk+wJ+aEc8)VJw(yR3QAASK+!*Y8~M(JTqgZD_^l)n z*KTI6494-1K`*};$k7Git-BNh0ePG(uD5-`b2Hs}rA)+wpP@W0%I3y$V$odY=sPE2 z-Z7{QqM{7)$S@#`d=KP^Qm~@*tB6IyLzM2DhfYpTd5m9nva!Vv3illxCb~z9pG^XOMBfzvEGi^^J{7ca88h6}OlDY84;I_>6j{Hz$=+!1pIaO#Yn-PZ~B?Yj+SEN2jL8Y5rz z-wNy~L*8A$8&~k~9+nOT@07ktUU<{WIJ$gS2cJh3RM|z#Ir36|gwKmJg@%?^p5;Yy zoM&-qM=s4b@|f^Qw$2FO@v86K7!Qk@QIUWT`un}ej3a?-)txV==Y09F+vs4>$2+Yc zQfTqBgS5h^`j{_f{bCRvPU(yv^*G6WU-`qco!VjN^&gTHdhsQ za&@4;f)I6U%=~aANfUCgU5B=QuOtCy)2o@}H`XP^CngjNJ8fBOFjlo8nO!1w<8SAD z&x|G5nwfDW``g|?u-<>o-IQpW*e(E9kNSIcL7{Jq093IDh+>&Z> zPRAHH9=e)-xaoP!qDl_(1A`FT*}R}cD@Z*2ONdlk+1ZNgWiO9<16Qaoop?O9v=k!M z(*01HY6K52uY!`2eERmg?Ilxi7~rVH7!(kx3|?mD!Atd{F1(Y{R+2Z14CzH!})0W z5k!0)cms}s2TdcgUcfK~(YHE_Y6ye^Qj-TvE*~#1{E`EH$-v0ym+&SZryqg^k+s?& z>QPWY09s8I0q|TgojLP#wHxZ-^;F>K2{pI}R9;QcW6dm60NOoQQ65bT66i4;3kl{8 zW^K?>^)1un1K?@ZYD9E2#O)1U=R>$wy1O}(EeYIhTCc*9nQON^l#3tWKPX9_0dFgg zo5QeWW7GS}cb9t=xRl9OA`pNOmdyA)bn*aRzpYSZe`BC9r38=uo1bRo<c;S5o z016`Oz+IOy34|l_bipnJ^;c9xJ3xVS)lEdtK& z2`j)0otKYKJ{Ritx#lop@K@u_4uA^~o(=%-JY_E5k^F8wKVxVqNXPQg%PI@}S-a!H z(9ZYMO1GyXOkyL#!{6jXOVV3HtA07@G6AC!D=GVe0-{CWGwlSztEXD!*>BiSwzRc9 zq=Wzw1+O#*6CYo>>oO8Nq1Y-yY4}s{5C~fNf(9Y1z}tTAojjY%QWYcTrAy<5wBDB+ zttAnNKz4+SV=(6(mw@2p-&{V^sS&?lNut98+`5wu!iNVOx^;oqd_4&6ORQhfFm&5j zG#Vg2A`VXc-Uj201f?TEU*`cFoM*FZxI*g7J+>0Gz#~M^#66e#U=xK_5b_2=VRop@ z?eXJJQ)JUq&}$9s1nFVywW?R(9^m5e^9*n<1_)o1Bu6G&b(qe<1MxD+KcBe-b^I-9vv=gm7yl0KJ4>p9*21VX+S}+?I3?NYT*c zzB!ew>^k}JwV@G|As68d0*d9PKsaQ8HvGOr@d2)Gx*EztOof2rbwF}1-+%K81Pl4J z4Gau`aK|%{{syASbK50urbnb%@xa8s1w{4tgQPSdBfUNbeeo__X6)f$6J6xA>0bKY1M(h# zF(~GM$m*O|r0&52v6#!(@Bmz41N?PguS*&`^b1 z^^S;$*a!vg%sr}5{S|l5B7lVmVZ%>t@NI+v$aWA;aJo_MRq%`7)W>(PwAT+Z{ z!BYX5k3cmC{CFv%D`M976jT!=xt~3H^r)YoUp6eD?n!7k9ByZ4M;TvRd&hzcDhLbW zh>F=+i-DHmVT1qhaB|Xg;DIvT&#Eb$mq&AenUdy#QYC0RT^|;kDRMJH#BI$&F#fV{ zQc_Y6Y*wQ1amZ=g6lgB@p;i$f-8>|v{S?eWR1M7G;|YB>(CfGU{<4*ylaqCdpv)0J ztu`R3#io!S^f#qSAk8vl!Yam|Sx3;TPF*jz2q;r5aCMZy0hezkb77!CvA~l^d6-pH zqzN?LK`=%OI9h`;nhF3I!6Ymed*J^#Mj&MGz-qysBM>4E z)2eAoAYgG7dbZa^kX>i3>!h0NOo{W7VHzx{QU+sCR8B252O^nT*LK5n#V_qcP(MFs zpSvr|dA|G?I3&Kphhm2Vb$LVD2IZ25giZLWfHWt{6%V5{bUzH~;?x#Vgl7eB)BNV^&lbPWWKg?klb(qGO(_X3Ra7=Vho#;gd&NJ3r1Hq*N z!>r$eFB$&9$|5lS%V*Vf%(W`P2iCovrGh=~k`rzsRu0|$Y912uh1-qf1Kvqd*Ad&N zA94I*(LgRgve8Y8(9AZJeJcSX%z@pjV`lYDtrSbtThj7`*J`T%+|-oMad=7|q;|Tx zxy`I@>N*W}_B?(&ORhbNxNX!!<;|<%ne(9YcSs{gc)ONafyoB3(%!t?K|@cIpofS_ z;NU;(jReYL1)vHRnDM3<7G4D=miFpnmwtPH0s8l_SC=u2Pu~i+I)Ffcf?1F!f1uD9 z=ke7k+s$8Xs~??(%YmYsh22$!dMEq+1E@fcEHSbB5eA^m0u&Ta49sb1IfIki!H;4j zlY{m?*>N3buCZ^7lfr}MvjE=dWGK#OIB(~f{jJQL;)}BO1V9EUl>v^EUH{{B%68B# zN)O);SlfDEycgPo4%r9B0EWU%Ew&THCH3iNGmX;$pW6Z>p=00v9D&-Ux9J%Uy>TVH>;E+aYr`Ti$l zmk*MjHRYT_daLZ*IBb)=v47M%eSZ@N%WM_Np&X`bP}vGf+#+3+e`Hy|vVKepi}_do zp^QRD>9rX*a^6UGiO~%h8KdEm8q_-U4e6U5$3WIE@HLoRfPt*&RST?>#bxLb1V(Ue zS>>9@%OFj{8>3d1p3SX1&(02jp6`8;IlDW4xo~!AOG(SoilKRgV8prBb)2auyivYJ z3?@>r*#ptXTAz=98OKiUUtiNDjauXi(CTmY40`HX54hl&U?LU&<`~pL?+ji?-&6YK zOTkCkO2yPCsQqf*#+|8zDGh8QL2UeJOs>`*FyMa$8BU-D1AencB5I7nG2hPr^~jqA zSb9KDzc9ff$!tkutVhW#Hm9)rv#ihdG_(I1A+eMX8aRz>6Pb9sDV*nkbEg*#4|`qB za;j*Yb{KG~;V)@o7B(9C6qsqdBffUy3VQ<|1cDc2-NvE0FQym0UY{i=KrQZp-~I8x zjH~&; zh%a`ttAbM9uQ=d3P7{AmXNs0E%CE`?ZFU>I+%Je}d_O#r5fXy4DSe zSqU}g=WMrmz0u{)+{%Nmc(>DJ#|z5GsJH&KTj>s0Hc zA>k31d7B$EFuhwTzm>7QR3A`g`E3JVUT9&}sUsdgtLT^OB%b1ynqhizT}Neir7onK z+}GySR2a8VY{Boi9m|f~(&a5)XfwT-sZR8BWrJ|TySkbRF}><~dn}G)eNd<|_LK=L zL{=Si7t7^*j>P3Jj5G_~9ZS-dd{TW;zhpFfi`iVudEuhDm!0kSNnWgIBZj2Gn<+J( zCQL|TPM@`(@7IxhGIVxAVqFI!ZPcc3A8>39QXyIaj%N{a2oOEw?M|Xy7uK$GP+fKt z)AR-jNaucNaOCfdf8(n#*7bnBtQN7Lne%5h#j-}?F7 z9u=Sn|F)6(=JLB>n(J2Y#p)2h$256toom{ep7kFC=PJT%L?N+sjg5(?D zFF{nsJ9i$NwouPrBjz^zm0o$oLxXJpG^!J(h7>kYkvDfqo<0L*doK?bL5gZ%s)H?e zvdw$QQl_i=W1f@E_tdD|!U@Roytj~sa|pt+J~4V%uXpwOny~4Eezewm;WNZxF@CRR z|G=R$7l-neJ(XXAZt!T6T8g@>H-(=zZ1mK^)R97!U97sU;F|o^cgttK80IQlD$W%f z;Xg2EZU$QXkkpS5o*L~70I^ z*z#tL`d3;4jvM`@!zmg$U|q+wY*pSEav-bVj9P|-tz4IREz+Q>_n5_+PAcnDLbSO* zMr}9FMN-}KO4s{tQkMdm*_<@C${E&J6dOeyxy>w#QD9%jc z^ouS)I?G>{8o!0AM6~pXAf(Im0^e-gjg^;t?o}CiTM1C$Q^wJu?#s$kxsgg&oNA2L zp#{1;FTzPqP|jE&vKN$kf`xl@q3lzux~I(Un|ti@*1@>U(6X1?t^OTr7}DlFy|GJ> zNb%RwMR=bC$N5s0uEzD5=~3pH@q5Az=5{+^dAJ!3j=kmKYx`D$e1y9Qp&&rjGkX%s zD*=GTz33;R)hWicYP)}+1J!ndQnlDhp5W9VN??IWfeAB^11b2Px~=%KlLk|-G*Rz% zR$Xe$Y^W|3NNJMxeHZDqhcQV0!UKdIoiqk9~z38=ue%k zRhAe?{whGx?+IP^z+d%RYR3b$)q8X6n~VCKmL|prwo^lEObIVYNhsU&(TA2@oi)6r z>+eGk+7j;a=vTC4M89?>L^X0h-p?0KJ5D=idWHdBh&g~ez@nV_C>Z2#^*bsV@j0x% z=~$Usb@k2z02F}uOz*9E=r8DB4uIo6gm2GZ3d-M7uTmrhcyfK=U+9N|I`E%=Oa4k> z7Vy)*g^g1%7=HRswEzrE^fT;;ths{zYA%gI_D+c5A%>sTBz{#-mAwbDDgtMhPrrRI z47s=9V+P9zHZw%i$m^EcdB4C!*51LPic46MPD$!CKq2Vk;)97#K~^bcYIt6NZsMcn z>FJ^htJM|97y@-qDFDMx0FX$b%0IqlV@}I;x3+&aZlNzi?X>o?SP&0_dNtGpksVZ3~`F0=9SP|of@XHiMg-+IX`fGAE*SZv2 zt`|G$WMvNh(ux4wcj@GHwe89r=l(xLW(rKF=jLMgjpQVxs1S7gKqmm{PBC^9Y#uAE z*>^p^2PGXgGAc|rIsv!FRD@@CcB%sAGfC?G@W8@B%=ucsH954f^kSFIsLZ=#ljMgjgN;OE1anvrd`SJX~Q3gIe z_aT=F2Qi9yDPBDlBw4WpplnZ8YNpjSs)gyV_nBs26JFh7!RwC@v*la!OKBkF-Wf=* zyQ}*V=+b;WtK>sJXXXH60|a1a9VX8}Jm~+bdh*|-_54p(3vrTTuo_O`*70ET^*Wpo z2Ivnx0Kf0OhRjnEcryD#SnCIQjv>;dnPu>;yL>Hwsy*4dpx3yBmIIV}^La2X4q=d* zUf}xUsDAiC-R3Cah53?&fR9uNn?PB_IVr8$KqdxWZ8{lvSykjb!6~|^-v$ehJJ@lt;nCM|*V%I^nLgs%|Rh0(poc4+3LnYeyNW zKvM1N^}P{^dCjgslpvpAb_||YoeW@`p>00Ku*Z+;EE&x6Bmb;|u#oY!yi+wUMKu=Y zR_`xVfn^RXaxkAueZKb)a8%$E06&8`D)bNH`UeoV_k*Y4_icrq{@DbD!~PF; zj@bh0Uj3}yTm1lVV}XfXKzN_0?l}h*2IczqyjiZQ7LvXz_@r{Q`J$LAk3fa@ltSz3 zns+K1=Gy`Mus8`J4!HElPT9|3+7F-wuF_P_>sO&0ip&7`ky9^lvH%yQ{D1*$VV*RF zEg*Z=0f>%+>n)x?AetGweP=*LKi7TnM!V7L^u)3-g$C|zjMCYmO=`bP&)+;9@(Wl8 zzbUX_R}0+vQ$zT8*!2&RR^0Plz6#;dlHr+_;ZR+BmJ`f3v59`$rRZ8Jm4MW)P+HIR z7~4iZVt?PUWHd-fZn%m`Oh^i`%YHVOwHjZbuCXoHw53=|&No;5Mtn&aC3SAcMkhL) z_p&cfbayT9EA5EP6ksnUeX3pU8Ba`rH4ci>AWaH?`Yp^TQ`hJOu^&wmq*?yVppz;= zNJV)HVL2yE(+f-qr?c&_%LCRD-A3f?-qkfv2y7HEc`u0G!0Hw8BG)%s{RGi&Z zxNNicbwbjBbIf+DDR<_;$R^1%6}C@NCW%#42tC*F&?;PSb$#hsoZR&-FZlxU#9a*) z^27)JmRT}AA89fUhf%wSCv|U6n+7r-MQ2P7$wsP4v2aL}K}AuhQ#Sul(*%TrTme zR<9f1Ucd2 z>SU#W{IXQelpNBRjqi_?$McRRHZ(Kbj`-?UEqzcS;2M6XuvSYmLL!D+iJSuWg;K*} z{f)#Vb1VNft0ImrpdR?+`MLOQQF`h2CZUDmJRkJyRZ4c}3caR^@V6!3-&irFS(y&I z9f7mIN+C97IHdc zB5$i>r@Q(F)Yg&sM2sk-x6uk z>(7b`brs69>0{T!+-+oO;NI`q*a(Ri*<1x*!ReDkDEVy7t^BS{pxDT3{lBXFwDSe5 zPOohxG;Ev|4$u*V*ts_)3-w0Nk}d8A2dN<|IqvHQgFl>25HSH8D;INoShgFojyYcH z3MMoB-M0BJzoDKs(Oy%~V~`>WLz zfuzj2tT1`Eg=rtZiR~nDveSS{;H+<4wRHCYGcOoh0qfbh)w4_?FsY=FLIxhILX*C% z@tD)RW#s(E#De-l6mLxFWoj@@mjxV}O*y;-z^rk>GA(8CMSI!?y9@@Kj^1b|qkB5} zq)zn~4l!U5ELfx9$&HoFcI4Y@`d;^fNl{DLxPsQU?JE8j_Duh4?2#wGHd=qa3w3?Z z$ich*onBb}o@ldc@AtN{4k!GXD+C)ZPLvi~Scnp4{RdO&&ZVm3I`R?nY=NVmDz1VW zyWjH(ox7`ct!**1-_;7!NJGotLWw=;N@v-42@4nS##K=Dd+Svxj`azHyQu3Lo3l*i z_6#dJWIjo9vAve6E3#gxqW)};ZEjy9#?wJ$uWx&D$& zBbI|di#Xwb4AQEhilYSyr&4bpVEJ6SdoFJXO`zru)0{bv@B2<0Twc%|J;3zbJ%*r9 zgul1IygKrir15m*;48_Add_*f`&%;;t?Dv8Xtl+@wibOI(iMGD+IBlEQxu?P4(y3e zfMKJ>x_iUa9H!O$M)U7pQn@Jeg-cJTDLpdzrJB%0eb_s`&tuiW1t?GwSQwA|^b2M_QU!SPo=}K8Q$AtiS2N*VQ z?FosHSd?yUz7g>OH-4AoyhX3E)s7`%TwYrEA02O-5zUOi2XUki=n}r9uKqp~mYlC+ zn{ORwM6BoKi^BT56U^TZ5rr~!^}ge!C_ST~SOJO`k|dvMC;-%adC0N)4FzAiB9KBDKMF; zs8SkaQ~(Lc-%`vE(vUN~2l1U>f*3rhR$0y~9E@`9z^yxxVtlXx9yD_8QWB1HPn2$) zfNj8tcx#e1WFS!pzxr!Eg`u)<4<9T6>0GBeX=5yetV{=vK{6BMHJ4c1eBE3Z$P_ABw*9qQp!HX{C+lhrV=buwNBgf~Qj zomi8G@RQ9d|6w1QqYpT^Cx*;77S8RY4pRTz<-DRz@|qj`)nZwWwfcuftF6U@Ln;xk#Qq$_D}b?Fx4f-N6n{qL*LuiuM(eOe~Yb6v07VOgSE0SAst z5av1nd@~M|uZY7)f0d?EP+?WP9q^|sz*R(dP*9=r>KG;J$%exO2V6pcYo>O_%h~m< zMq`fYP1wH{QJle2V_Voi*uWYFl$|>uglp!Y$c_m-%!XwYUJ=OJz_&;}I5fo!L{FL|4qL7#G-evmddi~h|cp*(ukpyCOlMcaIg`I z3UWa5uBoZHz{kf&qHOUG&&~1Hi3DJj5fxlg`wi5I%yqv%`eQ>YqdNE2!*HylXTwyMHUr5RYqi zH~?eht4DXh*`aZiEoMZ;51ZPmCFism*u&_mf(ml8Tq;J<0S|X~F>l1Nq_N7i3<<9` zjdI-%2VLa#sKzDd=n2d`#ef;Dn7reOU-v*(+oFbLkHRIFB?3po`M^S6fa^hk!%72B z6L&oIaUjG3gWBsGzRJ3O|B=@&*6A{rls;@Jcu1&jJtryz3$SRq=m&QP?;IH@%B6IA4`A9d`UZ P^yhD~;QZ}d2G9Q&$}Mj` literal 151402 zcmeFZhg(xyw>^vnMNm-*(gdVRQJT^P1eD%;N18~N8X<(J2uPPM9i;c7fYcm8z<`9_ zA*g_%M`~yx--_ql?>XIA0UWvTOvTij zj7)%o^#9cJ0y#hMax&G2@&?bR)@EUkEqpVH#Br=QS|h%Y{I*fB-juE3S*8a%e!LO4 zPc7D3w^95QtmqZ6mR}s=^RrB@txrs1ucUC3H+Vej;KslE%1}VPgo_reEGeB zSGg~T)VWdLGPVznPu{5~h^49ysorwSj-3@oW!%LEq8+$zEfS-n_l=e-A$VdiMVwWdDDi=c>r5 z|MScj6kucj_wB)JjsJZJZ0Ub5^FJ2lzpMEl%kf{^{Ey}MuM7Rha*+KuApOUB{5QP+ z$8!8P3;oA(ko`BO|Hpd#7kd21a*(Oo)SdtP$crDOi`oA{G7m<-c-~g^Li5JhNn#gT1!XCRTk+D^ zO|2T}Ry;dhFN)6kmTIa-;XdQP-}_nDw)OPi?^m5dd!pI{tKx}(gyv>=$EVnH+C`Pm zE}rnn(y4{F>R&mxh32m|s=-rM+z}Y2*AGGGQQsU z6tMH>8Y|S^VucMbVOySjgFz`I(=u zo&GoazNlrg{`ZNtC>zLx;P-C{E=Cq?iyz$Ie`I&(Mu@`>G?2e0rrj%ID-7mAyJGCjbZAl=;piEwMc2{L_A-VKar^wU+Uv1I zs~g){yIQ|9vpy0XxAoG1hROH5UNoolo23xEmRIJASWVkWyL{6THE-YHgVvKd z6JDVjS4|@|F34CISIWvl(xz!hs)?8AiblTg0afJA_BfFWVxnug(y<===Ng`PDIVkJ08>*(Ul0o|a0XlbD#xT(5MXLGzdI z9AV&%^Y>=h&R`e0S{-K0eO6zYiyqA4k|XWNZQiNh-}%5FnSDvN;f^(NYJ7)qv@u+L z92}D(qH9E#foQAD+%B+%zWvOCZGShs{L$Ijd1Q9BVrt4vwGqt~{!n4r$4u^UFm@+8 zBr*|gpSZH5qpYlEL%(BY^uvNbgF^;$f>E3I9HwRV>4ttBZdtJ9a#rF^4^O1X58wQ8Xg7S? z-#C@*%lFV>X?xo!UG9Xz10t4K?5pVFX=ZGk(k^tn`8KX~Wo5;_eAKg>r3@G3QPR>< zUeoFSQ)28_U%Kz?+T`JSRZs;8A-oi?f|^Aj$u1R!>~T7fN2KM(ie={3r&t>qL-AHpie3s#Pe+ylEca6T zm+odCM7cgLV6j{CV3i>rZy#b^PE56l8&Jwu4?J%ew;YAyttMTK?7Cw{<-=~g&z3ug zwAHZ}TIGw9Oz-21Q{joRQ*HGAW>$8vja|(RV;N%dXvwW)W)|s!bUZpEgAQ3#mF}>h z;no;1$824{L%`q{G~92HW}d4N$G~LE0dCz_Fc*ibKY4R4A`k5>bkkP2|v{{ z;kE?S&HsNpU)pN!c7}A9rx*If;hIvaZ^gThH93!{$5qPznQV(n&ZmDfJ;hT2%f<|skXW70SQ&IK8PNV5z^tl<5nhP zG6&O2IQ&>Dkt&jhIQmXr?&pLmiqSz+scOvL z`(+B>^>F-c9R&CUJ8MmjqrjUsHrxw_okDCT%J>x#)GiewsZpn0b{7(~S9Zs(rtf^C zIs1|YaqLO3KhRD@*@M{IBVerOIq7-BY9DXM6 zu9nBpj??hS*2u7$8%{?gF449~h=TTAHT%IP!>Zrbh|DJdx*tT@iV*s-XosmZ?l zPE7NNAMNRTUWduz4hr)45ku?ARg7qpg|hvd#3bf=l?c_YTQ3n z+-SU@1peS{hkyyrt=z<3-RE5F9Og9q zF-;B)>u-@O)06_l`fEx(XZ6^{yy7!Hn%58n&cx#z{af(ycrPonTGT3xDJpT6ZFIbh zyJrO$m07xh)YqQ;1U^%?>^UR5COEbhyGr3P%z6h` zFAcNxxhdc1?nF~spKPVTLO3aB8P#Ze>Dt7*cv3a^GPU>MMYqatu+pjZA1bNcl`#B z&k)6{2dFg0PS5)}!W$^bLGJ@gOUsD&Dpjp}Y00;(ZZqiD(!5Qik}E%%8}-7_N=IHy zaTP1OIk)^v4oB#>g~oYJH?G!Sf5j03-^dsaliQb{h2dJgCRIGe%Iw>`HEm85!dUGz zWD&n$5Albl!(Z$Gq&5h}AwcUn@KD_-9L+6FEo2&NDQMFyX_pG|k z#fww6#G!s!Gf9Qi#4XrQHIy775hV)p7i7wHRn46uwlP(wvMep+ch2x*7c6k{D+{xL+#dkpdd`VezSuA`t zsa*9s)$fWrhch&2NdUi0U1-m~e9yz@=gs4Dx@PQG*Lnu<+mX>xE|&_Hpd}lb<_*(m zhPz6`atErJh#%yg&(y4^g(rS1T{$~d>!4m)7UEqib6Pm$g%;vSqbKAn<+ieJeqZ|Z zkwt%5Roj%yx5i<_^I-0fU2v|+o8yg(|JXhu;r?zu}2pSlgLFpcs*YN>f)z#)v9@noi~gB!d3XPy7iEYTNQ})kp9%HQ&(Nw1ioK8+eqL-K~D3? z?CBt|$@sQUuGkDK1i=@6WIo5Y;mwObQ7IY*`>8ZE<~AL`oZjyB?Xg_s-~RjO=Y;kE z>JJDgeX4u|<;dlbS>G5n0xTAJlJW{&UOUE%&Uff|5K-{Z)j{(n14@d+g_DLp^(Ni- zYDx#13#k%D>oHMlm*z%4yI31=$Jk5V-8!?JoTC!)LCrr8{k)6?E;*Df5~dahnSNlp zx)`nNI(*oVRd!l*5oKgf67&1(9an4hk}9ckE4wMA zk|IQajrg0In6sf_rq`CP7=BYRmtV2})xJV^h=u&gMpd{71AGNXl+SZ^0l@j(y)K1@ zP}>~N>e?RWTar}|lw{GqAv_Qwos{ku&vH59LBF$UvypY%k8_#uvB|^EegvCclpZs4 zk5Z!+Uq}q!nG30FjOCIiaNIB~R#FM|P+`)w-kvT&;btyYBuW@8=F7VH!^;;f{5z8( zYE8*|`aD9}tbf+Qu#9$5uO9NyNprR9ELT?6z6@>O8{u@h7cjzu@<&~=zQTT$+uk8@ zWg_=(zl6T1sAyxQ=wiJ%YY^}2`+*ru^ATZ0a}cv*>OZ;(gyvA@<^oR#+4PZazC?_n zv3XgHfm-J5tQ6_OzV*Yki1%UjZ9&s+P0qhG;KwxC1N#?f64eSKjtZ~5bf;KihF1gc?|61zr)vS7s^cdDd2<=2vLiMhKiHtqIlTfL3~F&u zPb@uvnqMJ%T80qH(GQd50GUD_#R;_T=-p|+x{z)Wy_$Jd zHX&WUVw$zH*6@KGJMEg28>mL`6{-L<(~oFNN}R20@+d#E!vgzw**uz5fH*tbM-P?@2I=C6s|g0i z=0%5x0nscnX0m>2oC$~DON#iI9Fo)u5;s=H?jrVsPY7ACo$0v~qq;mL-kv9h=H_KS zQkFM7th4btIHi>;NmI(d2CQF zFV4sLC}4+cS(k2|>NAyT^ucIvfZHZwHAlVQaH!1wYHJFl*l3npPo#2CiEin@=e8-* zn+&5a`_|QnTcy-NJwMvgH^4lTmvFvNxbd}m&{|>l-kPTkBKE;czHA!$c!j5I6sJj% zan7>oAyMQ=s=};J4J1?OmG{*Q@$G@*kvAy<$oVL3651%g2R|$>F4Mn-_zfW(LEG|3 zi9X<9F{SsczE`hWf!^VEHnAL=1=A8pH>@ozG^V4#wSwKQ$y4jEq{d+5H3ecwEJBYm z>*&}W^PTKSWZBfzl+`N38_Qt2ZWctw_1h*nt5rxVkei#yy<6~G=;iOhmxlm8@}3pj zvb>`vEJE3#lcy9tWC;MGX*RJXh&ZC(xn9DFYkhSrTRp}X@&4z&8aeY}yl)&RQFE#= zTcUkUhg4=C0_topDe|z(72>m>zyCFNOv@awl-r}EJGo?(%daJpdRvz6?8~XSMDR(GbF{em`2ISr#xyLOLY|YP~6fIOyT)3pDq9S4Nzv zY3Q%+h2eYSxzyFPvc=rY>cS}g&Kd@2M6D=s`}MU zWR$=;GyA9ouSeTxha@4r$K~kMccVk|B=;4>s1&}967CG?^}l6j>)Z4IUr*35zTcoC z@;Qrk4-Ip0$B4^nH zdYRK7HQX7})aykY+YuI%j19y~wZ=>wwpUTDK91d2QgBALQE{S1 z${MnI`h^;UAl2_$m~>A46yD%B(KSI=PV=iWGc!9Msi(i^nVS4uRK0#cywLH0l{i68 z0uxow)Y)E(%zNMUUHq2XiN213J@U-|>m1m)spFM0wE`(B_42iYo4i_%J2kOz4RoVz zSbA1B?$dnCFm(!1LfktX|75IF#HzMyX%Uo~-7(AsR<&VKO0kv3ii*L29!PaH6Ae#` zKgEKzs8Lt{alDU4B9yI<8W8$TW$HFpN}J2f!R6P?5N}c*-5M^Oqq<9Y+N-a~F;sp?@3Mn&3ZF zmf_E6U3w;m7TqzEQNiabxx#w4O-)lJj4!g9Nq^eHThP#OL3rGnY2A0X%7#~*8x^QL-?8S+Z+wHFYKxyZFk17oEhX_ zyV@O*sh=1<^4v8~c9RHK0J&CIT|JTou_i3j24~qpcnDhdxF7QN>pNk)djUI3w&x>dt>SPI2~@NY zh0BX)<#})!AT9cQdChUpLiZ9jqe;4%LN&Y^_-POphZgeWWs1e_m5o8{?)m zDU*m<}*vt2gI?4HpBU@ z=wT%0p0zSF{9{{C@10U6OTm=r2xj{Lzt8_lD`bR!(u!dM?yL=mDft%i=!0uTpNt?s zuHdhC7HkKPJwlhc`15XltW8y!N{jd3{=8`Qo{&=>564 z1Pc-e#!m)vr?so&oei^nS1wmLFF1siJV)fOlr15zKp2*oHP3q&Q?0HtaMG`2>POd6 z0y{ceT2VGSQDaB@C@$vymI{0!k9CxmNqhy#`dnx3WUs+@;GJ-1wF0CYJkJo?WDW?M zNgpL$?lQS@%Q7n2J>gkTtoTkAzRfsXXl=AEUkKBlhg|1>?bfsLL4n66=jaY=#BaZMVeRoJ;3!C8?FPw!&kRYusn0+-95V`kiiN2X49dkB*PK z%zW}3#rTjJUV9WL<~DUN$6xs;_7M!$tXDGf;#a1Gr)^yrRTNJ}MTG;FLEJrKWp%Yo z#^9fFVZ!n6&cKUO;fQDhyVIQ!_EN)oZtLh0naGm!`b_Ses9sd>*Iuc-N;+$!*@X^6 zf%fmCCDEDZms8Tad%{d7T@}!4O>6BmjS6laEy=BVc~#7gqEqH5zn(PRj?o*o*&keN z5Y{0lty!yseRe#n^saAn_N7vP3VR>CCp=`&tqEh{bE#ltWc2y6&jF$z!U76Enl@_- zYy{;UEn^-)HMbY=7=DV=zP`RF$s+#BPYTuqK)xCyc8x{4E*9rKvqZVP z4gE$v%dpFAp(|ZdRxhixU%Bk|WdBl0a?#F6RS<_AiDGIOqLcXi+XP%yp?0=a-7bi7 z>hWk9yoF|}$Rp60;0!7FE69DgP&4hG)6k1wZmzB)!`gC|>umU;k&*o5GNhI(#CBC)VB$H7k)N(x z?+RZ!>U!jG!Er>=>YKMNQE#d8^S?dq3#ix6lvgO6=3kx_;1`!UZye|c%NQs?JhwD2 zH->ORx|~wad}66|47>b6z2>BH_}n!GhPA_UhfA$j7Gs=Zoj}}o0pwPBomAlQ52?LR zcDtP}C#rHSL}jV@JV#Klel_FAW|Y?faANp}MM%|967-nK7X-Cyz|ZhoYJO%6-%h3u zCg2QbrmW9con*-cgi3uAz}Z)wx*n6Ja4X@YyUcRWGWU#z&4Elabgcbr|L#oSYGhCI5{!s zW|Ob4ub;X6j%;ZiEseV|5P0X#oii)X|3{~_#Pqikt2jBZx&v@coCSfKANTHM{Me49 z=&-P9gqAXk8(C>>9sGU}#BKdt9%EPKxch;w#hxSeq2A={X$F<$6kYl+0c#~pz3*p|6+%&ae~mr z-63^BClYJBvRt&7!5@0#a-y_1{$k(`CBne#2zFMDlUDK8n3>G(&al~sCw?cAa8$&dFINhfwOt$!;>_RivXX91fW3q)bO=gR zfBg9IX;&13GqBJaz@;0O8PPVclS%xZK@bU}EDD2g{H*ah8`)7lPsF(!B60bEdTN+b zB#8pS?FHQEpDx>9r+VopeT-z^UJHLc=cL%XKZ{uHM#nao%M6 zKJ+3?6;m+kPbPLVqiB^{RQJ7+eJfaECcR9`~LK$Up z_v`iB^s1EduN4}?vt~6Z`(s(57@JeG5LL4FH6eHZxI`-Ik+Ctp^uC@)akhePfy-Qk`Et`kbStrB(5`ET zG7Zw?zUBeiTmYGsmJNd%U$ijjBj~iKIo<_i%z5U(-)JE%a*W`Z8DLl40ynw(kWOt= zR{jO_uAb=S9{$P!MQXX*x2hhB@M0|=wLk8n4+(!A^gEapLWj-J2aG3og04vF$mjE{ z0& zC8kh^#t)ADV<0BMWX5M^EOzJ2>C=D*8GB>Vv+Mqqnt$-qUv2ipGR)up^g0DXE;g=u z(~B})JE69*iw)MJQo4JgQCv?g`%u6)x{!7&M}*T#}ck2wY}D zvK>|>bhU>*Pww~!b(3>fl!bUK%c<-7;WUWX!d=Ccm6a2w9Dlk`{;GApzEhaN+-4(B8#lK{~$4GA!?_Kf1&q9r16o1K<)YTdC8&}@gS*>i{n{uXR zK1vOzxs@DvakTOj&DwO(eg~@&?4RNm7B#&~TJ{HZ^t^8hzA}zV^B-+AxJ(OsjI#B& zw%lD{TUSd5emy)zL|`O0Ups-6wi|Ijz!q1?A7n=*-Q&JjYqLfn(oc5 z{T0E_dNGC+8E55l=3}I_#NoSThq&{s1DVhueNydTR+b>F1Q_~1sBamMJj!g_jP_V6 zEvuZWl2)g;1LROe0|wmvqyWm52$4V3HM3=A)Bev$-^1l1?30a6F&4^fm@%q{kD}aa zZma1s<6Wic1~=dhiJ)~Xp{gsEPDRGRfz5bzb7J1j7wxpokI)5Gao5N=KN`v(rz`x} z`!hM+S9r8)gH_WPu7I`&xLuYc)~KEPCF=F=&TF3Y+1*LvoaKG57cy zql7t0Q|ou4>S0lEeFx)r2pl7BbadA8q9>%OhqGOXbzj6wAi3hfU-{L?$m2yp5?xed zBmi_cM(9OMtUUe7K8@DWs8jyHkNj(FDYDQI;fTy(;qDt1bHqJyc&NtVR7|^zu4MNO z@2En}bTQXn4>z~bCg0Va^todt5TKZUul_=3mZ1`EQLj!29rG-7JifpAg+}UV?L%4Z z1}(pl0c`svTo3Yy3xS;T>b;XD3lBgJ<67}n3I+6oS%{MZXX;b5ATkt!-+%Tghkb93 z?=tDniSzU>5JrxKYBd$L<7^t*7U(MogD+RK0nJyKAlCaOjpQw^Yt7`mKmSt6jr*x0 z7N_G{zP5>bOE^O6UO5YB%Kn8n;_)qzW)ndluHEf*)l}DvY{$2qqg^UpJRD^bVpCVS zcfMFh`90^LQJAjE#~=@!S03_0MJ=WqmS z_+pv(YIOs1p+wBKv`_z-UDWbm2@l$GInI}Qg*idObPo*SF8rO3bL#mXxq6|!UEw<)n0 z8RKG0_$!C>0PyTQ-OB!1&P z$@N!M0u!tAr}nrC+HEv7H355^Vin+oau`sh;9wXRIZ7d6i2un-wDNz?bd-K6R))T0 z`9T3~mrgwH;hNe6Tt;lEVV7EAJvW}+#oH#qQi__MflJCxGJ7DV5U+x_;Dxqxa=9wh zKq+f`3Zw%@)}&R_r89$OuB$Bv-b&1MSE=;6Py7&P?~7A6s_LqFrIEuUbl{tAX=R*y z<)v_ZU()!I+8r8)^{J5eSGak7LiPv3Wb=W>gumxW5|BDPip%h>?cxEdgu4v0_lVpT z=J@iT5*UwHTr!=W)0-0ysTk3N>!59v2WeM810a!RO6aOpSqjK+A&3TsR-(P}|!7*@v z&7Q-31f3s`s@S3tDfMVtiGjNM`qF}eg1Kd5Yj_=}Q%@o<7XoYiA@ZsY8o;bFnX?90 zPJ!7WaH~fCGkU}Eu&pNC)-Gwk49f308{$PJ%LP-*8`4!06N`_l&1;{r_8wD_-{_Yj znuUG4>Y;n=LC3#8?nEiKZzZ`Hd621F6b`M-sTT3rF>80}uGbY2&6JXeFBfeL`{+o` z;TFDPfQz!CR^*zO$mZP?QHog1e|XcSyj&wT%XkOX zc#7Zx%bG5;mQ6LpB+2>3J5w_h@OV*1liDA}NxD@`yGIsR>;s?f9@yDctf+kTQ>9F# zc3d;ftrM=n;0sOcUcDBnH}4wl@vkbsWPr8Jl-iK6{6y#o;A%DXys_ByiJqT9@KRyJ ztA1aB3sG?lnbRS|jOfH|E!wrg7pM5nss}KNIwzhSG_Cra_+v}BFLL3Mw2HX0)8&Me zwB>dagO19qS3x%Y>Wlo{xN+@Bk)p%QeC@a1gt83soV?J2Lo82MF<3kRTLF)B@b>LO zg?;NNYc|{{!cv(2)?!oC#c^SQ*QtP2vHf`#zE{e>8!g?I8>}2_bmi>I#>Nb&{0lax_W2U!6tyqcL(zE!b;e`r6;c%S_rVf+^luv4EW=qL}S zrl&z8P@>K7*`z~?6R72zW#&MIQs*+hQTMF7)UfPOMq3bhyj8l9r$?Es4d`5bI2>LV z_Mu;DIX@wEr>PwmdPXuoUajCBbYliE_8_H5i3>I^#LLcYljAY4s$bty_1F8_g?NrD z|K<-xp018nlYiy$W%#9tJ;ZyrvxYg>Va z(Zl)YA<9TiPvw+vOqsPM0>0}@dh}*aYfn4vl=&r}0BPLfJV4iD3oPW}R&E-8l~uA@ z%iFm7D%gVZCb&Se*blb63R>B5icsj5tAaB zzfWi)nPvBiVy<<)i7 zukd7Qtqy0OfLhgwuyAq&Ho|Adv-?j)+B`>a_irF(xGYVBJZvClzx6Xx@Ur<=&ItAj z(+^5=N0a?K03Z!Z?80uDbxxTiHuLvHR+N-y0{UT?y9@B~ zxy=@^=<03m+LfB>@HUkW8WWs{bXYCg3xP;9GvZ4c0`1yb^WW7qHM%L5eyNpBE2T1+ zvCk)c^$nHSKS;Qk?@x@RXUN#bG#=9#2j*L@-PK*VE3o>(bFABQ;jX0ortMo7VndY`BGVI1t{mf5qz*>Sa|bL+Kj(~sKj#soTM?9O^FG)G#W-&=~{n7gXn zCLIG8Q#*1KSd@Mr1;zN&HM6n2alUbw*}ar~vKe{8Ov8N$)p)lQd*4=J^C*uSIV`ui zPczE0@}i+r5(|hg*^~WlxkDh?YuURdGBK+msN=E zhjK?eOp9{fd>`5*V&Fh>$!aOi2i53i)xF=A(8c=WmUhMh?vvZgetVIQw)GH)ZqGF! zGSMy?25y4fEJ!)#pe8mDm$$O_=Z+7@W$WO|$ZqoB56?Gkt1K#u`<1=Dz3al3fETI7 zc!Fq0YmH6NmNoTjJp=!iAvx?ZQJrgRH(hO`Xc#l8Gj8hMq6oij)$%+x*3;X2nFwAFgsok_3_#F-~N@vj8oBB$yo9iND81f3P9is^78WLcE#`AySQX> zDJ(8%W3Q;7ptC<+ydNA}8~l`>o=za0I8Hd}C~yVm&7IzN*cnMj?Qafb%?;ywu)2F< zV#zb-K`qeS`U`}M+XrdqSp%P$bX%;zN5^rEu41d84}_|nZYmll3)#K6*pwfS+s?H@ zKrn)fd-^4-#ck-6T>2H9J zL6{bQ#i_6k-}~y8>B&c}mMA1GWsfD@(`tTA|>$aE8N? zOHh!XpJTWT8jh;cmT6X`NAdAieQeoPd!F|?<(d^G{(IbSD^)@AuAVQdT=P1z&myAZ z!lUh@ZCxC=$hXwK^0VgPPj3skt!c)WLTius&Dvhb6J zFivJ*Q!IxUyD% z>FCh&0TJ{VTH=S*XLF&|Mj*1;#mX2JWq7F}q57=lAyjnEL;0#{Kz@Oerl%fJY34s@ zD+F|wV}@rapotS}p@%GQKtZvR;f)^L-<+@WTc0X*8(tdBgElMfv~3)&R^gyiX`(Kn za6*BUutm_pA`FhWh;3|k9xb(D!YfkC**XjDW5=yY^9$};*jcjABY z5H+(<W-zq_z53f-e0n-j-SnzjFWJe_yw8-p^llEXUj4-(S|c2P0g_hT zy{fAj@*bW|4Qau>rr9|G-3*DC$RDrT@7vI?Y&7GHu7pAkad}{@!Ko;-Py>u~aA8}@ z`v}7ccq@Rw^rx*);?pN_fql_qiHJxlT%$Ky(lIueix3S1R72W*|1B$i zfwmu^O!wf2I}y>uM18GE!C-Fa92|;THn#G201j$X3}WQ&Q4=UmKvic1+vZdS%`C=b zyq!G28d?%RUdvG4-35(5rQpiVt2GWIpqLMVTl(P6>CVnb4}s=S4Le(^(1hVaTgD^r(5 zVeUEK&R$-;#n{5RC$DC{SCp5>olak^w$&7{h@Y;V=>W9~Kafm##nEu&m1}>6l||ic zyb>wi7DX~9B-x;&ArKPNX&S*K#PvuWhoUvqsU*`k&5xW0j8eX1P*5KU~E8!|jjB5m(pS#x2LUP&$1rG#v=s}58m9(Cfn!1D*H z+is=YHWhItA0e^+d-%viD*L{7!g)V?XRU)x&kO=^2TEHTDn&f$vPlhuj@nDWfRsAh z1K`m>!|Bw)_*ULY7gADF<2jMsinQwgQ@#q_`1`vt9?*6g>8&M2MFp;LF?3>joUk2W zn7|1Ai}eXsv8xBmiZ+oX_v+$%lX;p|o#9qC+V}dT;byEtLa+0Fp#CYx{0VjWHOM1V zRHw+KiP%;TJ%4tzy@k6h14og?UytHjETAt4E9NRD$=v zOI?JV=7w#1`-15i+E$}Gt{u;aTINkYC1{X%2*2+7T6=GH(oy&Nn^m~5E2xtK{tGxm zgDXk+{DO}+*^r5YNgZL(%wkS7_Z{zqL6W|Xy1))5)X>W^d6>#!Oknx7nxqYrZPd_QJ$n;m8WN|$9`fh>@f}@s!26p3ZGSj2D zw6wHy78Ia-%_pf!JrGCJqMkp$%qG`?Rvk$uAU+qk{bEBzhSXtu{xh6J>*LWex5g?hr#;3a3JbX{y--~6AePqSt=_}Q{vffO znufZ%Wzgd&Bo$^6(amO0`qB)&4j*9T#x1-xQFB+pRL{gJQkoUECal^qt?H07>qV-Z z`$Wf|w!gj*a5Oz<6&N(zobG>6yox?uQ@&jaBV#RzwTv zZ%U9TXE|-?+C=UV4vF}SEvG#YG|(pV2;%SFe*2bs*B8{KyHeVI;0XYyIrpWBn$^3S zPA-;PH0u4?0{G6LY!Tk~enBhLtqDm|8r2JMzyf6EFc_S);PU-oTJ;9%X7vRv0S>Q(ScLGa4rW#&8H zKka?RvdfzWcfDR3wlBWot5w2m3{`xA?KXQ_sqq^Pb#7t!+{&lweOF%1-TL^*h?P>m z2^+ji8Fg4`sa2C`#w;QdCbBaWPMh`N@Zr`J&f7xfoB2m z#G2(kXv#_;sqG2?z|TnV))J$zZ-0O|9M1lGDDWKQ^gFL_u+daC)dPYdg(&F7{G-lQ z^{UjD5Izro9l5PTaw{W4JEEB8w%ri*(R z0e+iSWE0a1tJ1a(YCKt#tLNRr)E9d02A3TL10V$TO`s0ANgyz#A38d#@1ooAJ0GZ>|z*Vu*tmRY3Op$ZfN zV8^K$avaIxeTd_mAM$-;0TgE_chFY`zE*%-7=up6+mF3OniQmn~pxS?6qs z%vRT%!)3RD$AC&TAU5T$3DDH>`)2^TQ&%kOoTH5wo6f+8ug5?IJw_V6CkYeQ8b#i^ z!~@Tt^&Pi7Lm5&IPHt@B+4-VUajeQ(F2~#dCN8C|-8I-B`A|0>yz2P_TuMw#jJ##K zYEtVSPlFtvuZ+<~%k8Hi-htG0-X{n=&!IQ@k_0^g43;{tjFc!cA|Q_lZ5{z;EzdV! zVEA<*PAA6)XDE9v?lHPbRB84ycdMP}*8se`yfdsVcy6BZ zbM6Hi?nIe}9zv_xz`#HbY@^ZfFSai)t&AaE$RZnlQa&Twt0xq(|M}jBJyEOLF%)B- zEB)%NDuNzjBgj&)&|2RGdNjbg?AQ7Z+opeqYaQ$#-2C zVJJ!pw|f+4-0qM>I52alYE%E58Ovj_N0mC-&wJdVuGY4bwia2%8(3m_s95$YNt<^c z)9-*Jyooo)a2%z}@jlbSsAO`p`h{mKwAf-faf@mjmj!vtzM7y^a#NnjFsl$h4O{w-sJ@WGUd2)dxwXS|5iL=@$x|_L79JzQWo)g;=*zzI0GX~7w zb~|S0MWSTEcSs0bU123I16!PAvx^3kdgsFPXAY_tn&(Exk%t~25|nY$7VTzK{g%Ni zf6gMYdgjMsiOuIynuh(fsb%+bzzm1b5_=b5&sQ3dgo-EV3{$VR`g$>-JwVX!-OwvZ zl-(`SPRgtToZsqr6|2F%E!a!5TKn)U5^1uH2B>60^SvG=bPHpsub&|1I*|kX6O4lP zj{)2g84GIE=r=D=I)OiFvX`J!nNW=B=B_13X9TV0wc6fLI4qBcaiDP;MDo6Laq8*D z=4U_Jf6n60uOwt2+oP5N9tNx`gU?_2LVIDXK_1NHzkz zk@+_+G2#bMFGDBx{y$&_SXYb`Kj*O3|91|vohV*Le?$ZOnHMt)6 z6pV`e?2H7eKy6YOX_bW*X=Rpzi%ya;1_{x8FD?HW=F-QTf#6dgu6rQN_XtB{V@5Uo zbwFO`+2B%7I`@w-R+isKTo)BdL&soMA5Z!tw=;1D_A?xlpqX$EB4qmUXxjPLhG{Vc3&4fVl!jIU zB1Ckd#&}3qnb~li?P6JldBaL&^TyQr0f%6(`38+^RJu>-1l`n}= z=db){GIH+(jP;AOMgh!~`o4Oga0~Lcx6uCmWg zt7R<;!|0W-j0lyQn68gJ=O7i*Tg*xlujZxN*|t?UT}s?OJMzs=6rm!aA(eHGHJh)$ z!+3CJNlO2(v2&aJl(kXrZeMpSL5D>ncc*@jzi6?t9*y)P`YuLp`j-A7(Im!JeU{`+ z;n@fR+43ou-G1Dn1dsA?=f#{bbGomu?g6xZeEbS;pQmk3Ff+wZChpP6Z|hjJh*dG0 zJ1bWkBlz7nCw4ZI&gMB*by|)Rzve3rtVcxfH6iHnbqSwQGvU8^Al*{+%DB9^xQhD1tp!cQ{clZapqC zsCfj?4D0Cx6ekduJFDV!V3Fo<4=Y;W+L2{gR;>9mTYUkIf{J>8Y*=Ta#C(lh8(4Bn z^yKJAD}0-}Y!Ldo{77?6VO!A`nhK0q z1YEi{RzZkONUO(kBv>zCv2W?)GZc>yfWQO-So-D@Q9n6 zn{)jU9$dAve(e7dp6^m>%uWI^-rv1PbLD@U;X9dzOJ526R1XQ-qKEsj?WxnABzi&I zK%k!tVJ(`mcyu}^YNi!3!wr*hREJzdlK*hmeUjBgMIW}_$93>jJ?)=nu`Z^jV5*ks zl^Z@h?p6%G7&y|^^;EIuN6O-T=PN9oj0)dy@5@9v6!#ae3RyJ8Tr(qKXl?a<6O(g; zacR%xl$HO)@l>6Q3T*2_BNvovhL~Wd1>qbegf?h zLp|p-C>aS&A2-BL0R3k-=rD>f8$HphGqYmSId<=6t6AHs2T5uHe9^J(wXvy$wCnDt zQy>;16f%)50N->ydT|^C6##067Uya{&Cbuajyiwq!cFNI&>k5$r$MI^n$mEa;SpJ1 zolsxHr^M9}7Z?NZ>n?lgK;_YZHEH?bkLdd>L`2vSOg=DJ{cO?cb5{b3w~_3+VwYP2 z@!A#&N=c`S3qVuez9xID9~^9K?mEB7$Te`N%eKfX%FmZaovc{}Hy%q`MLPrGnjgAR zC>?fZ8PVHiS|Xq-U2aWfy?%<% z(}Cz*$oeY_?uKFd1|tjI1*XXOUG3i1Rz0j`*2uT6e~mk@flzu^MvGHq602Tp8ABX^F>*`8#g`#0?vo{I80Hk>8w zEt*V7zyWR_{9uZ`go2aLaU>|^kGfe(pLW}pb|0oK%FRc9#Pt3QoVFzQ-j1HOth=Pk z@YX1*pKDV@26eid8y561Xn9!Qa}#1x8V?}7g6C)|Ham&Ws^qk6A0Lct1pi8uC(Bbc zR;)G;i$~#I*9E)|p|wX3OB%PkBsj3m*bNqeru6i5>Q)7uy}dn4ye}-15i{a7$Y9k2 z=;Hy@oCJ}!uY|Oq$DPP*SlVP!m|Q*sbhM;H5W0jz<24paRd!u2-3xUr*ib?iX0MIY zpO?fK1<>MnuHA&*DCkxR#}ox%y6bU3^YHQ6Le=wqG=3XOjir$7)o%zS@!Fgg&PioL za_p2djBRgIjM+Ik<1vWf)Mnfug#9j59lN|WF7YV#Gm%6(N+%{CB-D0^yrDzy9%zH|DRF8Du>QKM^H6||e zXhFw6wqZUO_kPJA*<3!qnxO;c4m6vLwe9=>)8vVyB>P(>0;cfBxnk(>vNyrRK<+$TSYz`Sq^@2isUn!2o@f;hJO^yc0 zMC#3gimF;Yk8s1t_`UB)m0NViR!G;Xm(=<(dN{J{T=s_kT&qYo|AV0uH_o#JH-MKD zQ<|UlXM_^8?78+!6D2fax1QmIG-D?>uXj7kCPA@>5koW=QHfHMU+bFWX)gVsn7x_d zzgk@LHbvBBK?&?P*%_-T$kUFV2)KhPHK-|>+kJUmFfU_PbhB}1a9{v|2pB<$?p+G4 z-BUOj3Gt1!D)1ER&V64QDr6DdZ!#S!(6S8c3?3-{UZe&0fdKv>Ra4nBWu>OTuv0=a}HPkJC9PiL))!j8XU5 z@brYRvF=;^IKxXZIs^JObWFGBOo+VYwb`Sc!wUM>(Ijp{G(`NP+g!xq4`jd%_k+s3 zz3ZYjcPvjeG40aI$^a_O-%nSP-kF`qHJYG(i_%g3eOrVoI@veQ~U*Bzq(sM;$*V|C>NAess3CPuXbP8C-+_}|0{nn8wyOH$oB)Z*fP;5 zq``5M`KlCh_Ra}kV0%&My7=lu8O|a=^A&pU8@AVKetu?PkPLERmipd>g@w>d*JUac zIhrb`trM1>K5HlU*cGxz2wskbNiA=0@6n83{)dVFByZjPXGy1_r5Bfah7hWq%O-!m z5HSlbKnspox{w2C-&~_a*NgL!=;2)KkHXPZ^Smy?F#M`_jfMsLua*Xw|lUs;W4Wn7=A_q3hymz{`dNSMND^*Xycthl?T_TJcR)*4Qc z3UG{?VdD*5E^Y2~y9V_svL1@_6(5B9$V}b!v?U-idE!EdE&s8}%dnT(qo?d`px=hc zZ_nWRLP9c18OBhgUoN`7LGX6dr0wSj)=1Hd>s0rWqz4BAGGxm50KeUMQ zH+BR9)^%ijI)^WUybzXLGvFF+p;<6wyn%u-kdiUYYD5fh1d+W#4Fm_wL3Hevcp+Xk z4i5JQQdhbO6+rl;wYD+dAb7I-gXgal>I@LcK{(_uR!;Y|$Wr)LLO&|pMr7m~1DN5E zqv<>Xd={3}7nrR!Y3uGTF-x(Um)zm)o)tj7KT zXft^5ni(bTq|yJ<|S?@n58%6O*8&dS5-f*eP@F3>%(Pw-=)nlRJ8}4`c91Nw=o5%y; z_b9<&xOv}?B+q%~J-{Q5Bf}#8r^kN&6n7+p=lv++S6?8m3#|ua&k>yqAiuF$fJ_kh zQ;-9M`}LmWLq~)-k$$Vu(=ys+gq{WpkFY82FDUW2_ID{YvIn1ub8{PW4>Q+qE^a$- zm&YkZqw073yYEaV-*X|QnQbD_rMqWX_&6X@O9kH3Fq=#EHty`o}Qih#Q>L2 zyGO)cp`pvrw^X8i|8R>ZHqI%4+wD<}FzND_nu`VZWiDyAyzw;f*!-k891?-E~J_Met}i_b%h}@NCDfKqkc7ea!Cg>x)K5%iZxkPh5<& zwy6j;+wY@=GZB2x0zn%vU`Nw2+;}WWCjxTUCFmsX4%l{2Qu*`nizKeVoR@!T1nEZA6Bcb(5zp(o{rN&168I=lCI6hgru%$ZDDcu|`jp(vr=yXAL z_S*1SEwoI2x$D+3$Kodod@W1@Cl%f7q{Dkid%STVavElGoUyiwFLwO9Vh7v_r~#OD z4)QamVS4v1E!jlufBW?K3U$2~F<{EL$9DGpKAN@R6h^ttDwh=+ibFZ+w>#f%tHh^F z_4TQ4onL`2=Q`GEv~DrYpnpDL{L*~A*m|Kt&^@~4+o(U^%8I>zeG8$>)uFafU*4g; z`jsjOt)`a%5iNi`)8%fe{HGN>cQw&>(PZXtRU@3ETg>haHykHbXkMmda#yGBaKjt< zT1_dVUfZM?O8uTQ`aBH{ja6e2t+@|7(J%8(F9EB0q#*$j%c?XT_enVaj4PVgQ|s=gSer%82r1m|_DssvP(7xIsb0Ten<+Oc<;MKhF3 zd-e49rAg0rzB#i*e+LyQdi5f?s1n_D)YNmEt21idLUQS@jqfh2j8V83pm zit(|B*MXYsav|TeA?vGa5uHK)jT{#xD&B|FKT3*UmAv(;brH`rP8#nHblEH(k>8xy z0~b<2OL%nPz0r?sXE)0q^*@iJ@&UJ<^2Ry5E+|6y)|>KPW>Y>$ZNYU`y3dI)C(yfa z&wc4e=mBUwrg<83k!gH9DE$Ml4t7o^Rb(#Txv&pAvL?7hkCrln-A<4eqea>}f%TrF zjm=mt?jB2aOLRy)Ug*`Tj$Ke&Z+MKQ-RZ>FtfQ384s-U6xIIs^|ItBb{(NA9c1c64+%0Lf(dbU3^Oao%^asJGzXai7Q>LH{BZ78XVXo+3 zO9z0-dpF+8_sI=y>KC!*ClJhfymWCO)v~r;pYQ<)OtEz>ekVtA27a)}@1UyG^ketiXJ zs*^4-l;>ZkZSHinF@Aydd`j0AN?`yAC%ePEC$?i~ek{tb{$UZW!B{S7v z$V(?@^ZCeuWR);^!i7Yjt|;*!!}jxKBIy|Le!8UR+%uxbon)?1({39xBf?!YY#p{Q z?gwRo4t=r~7^rq088;I<6L)3)p1Se{Nm3KjJH0($ar=_P^K>hZTQnM1aeaSg;V)6N z{E4dHE?{x{97MznTKd*52KYis45_XV<<}J1^w;VIt{=_E7lI_B@o?v- zcT8`9;=ZYT{+chg*U{#)ea&(J>iA*X+%QFZd5TNxxvSTOK|hJ0iO!}*1k#pLw_u$4 zT7NA!)m^`H8N?y*;NvF-5Io$tc0r)+tI<0>1-h{I;D%a!%Lzko0@lZ4`w}7!rOqm)Se6VKD=$1xQ ze{0_g0!u6t#iDz4u*tquc}=^8f%R6T8d=}Yy6{_ zf9u0`szSArVl!Qhe-|3l8U~r9f!7cisb4py;{i^Pv zLOM;z$A)VRGucJg2%cvql*$~yw?d4;EXnxU z+G;WO3q~RMwcpkphs8_r-h=C$R|iXGh|Qf-AHeQN=zOxb=7R3JC^59ZC3kb~AfP-) zCpZhDG)i}yZ$Ii|DQyJf@T$?+#Bh!nB!jNl*z)-O`nPFOWV3&K>a^O7C_b&djX0AA zNSJO8$Ji=upm){Re*N;aEY{-f>T(k}c{X~mH*RvGZ&2efBxbmM=A5dw?Xk}BZ_@QS z%D#Xna7asSsH&F1#9FbV+3@Z;EVq`?nQBD*uRj4~vkC;ln;{Brg`+xn(JV7L$qoYo zizy$+cfjS2kbt|`KU3bD>mK?V8b6E=4WGgjD5O#)4+ljwVfaQ2o$yo7*8OYu!T z&xCVI&==tDyrV@&lYJSkgXSW`+Sx9a(xMJ8Aa~R&6no(S3f`TfVC@Z#L1t*JGoPX? zA`_qTxm_E7?YFC(<$&%~bo1X3Dks0pJe2-~a%Rs4CFMQq@z)A=&O6jU09oA^7h)1= zY2uVR+GA2aHsO9cc%>%Fa7$W&IIcUExU-{sF}It9#F3DZW%Gi_N19BE%AmV)k)Jx` z+Pc3zdjBxO!5B3h^{7aTH!>kwhhB{sM=0#nfrW%7(XB$FBuptCt4y{S z$l!mvgL1=uk#_D~-8?-tgTS|k)DoZO&h-PjiWt}v4V^oUuUx$9L3CSQ@L)$_et zCjjYK38;038A|cuRiNFGu&B`DP3R?lfFSQERdnRwR8@1uhgdGJNWFE;TjQ^Iw#J64@yGxth!Q3I`D}PSEn<&lhNaHwYKYHST#`f2d*{ zQy$xB;dN&|*=U>Ec=VGTcW6YSle|bpokq*_6P|2QZ8BmUQJu$WVU>?*LE?G&0=ShJ zLqpLAtbaC1*zcPtQ{8>SwKq+ecQ5gWu_}V{Q{Js=@j|kJA9NVAf9o%%u-E>UtU8(J(1*o4>M8Xv z2D6v^B??#7((C*|E)ZAJwADtc|9srO!t?_oXG7vEimFatn_fn(je}NW7ir#eQGQ<1 zVH$MSK*ZAJqTI)Ix#AU@RuQ@&=YAr(j%7 z85)};0hb&QTGozNe!i1b3h0%^=QX(%Vhz{|A5z~Uo*%&S)j|E)_2KO_fFV%hds2mT zVnfs8{!i9XsQ%p(v<&NeZVDGx?`qg*3!al704i0de-F`8SW3}@r~TgWvw>#f<4?`G z6MHLA01Brh98~HnB3`YoUud1WPOGzW;9A$>25m%vpR#8Dswc9<=U(6b4<+ZnF~6ES z`*OvCzEOH1yEwE-hcn*t@Ltqot6Cb-Up=8ORnuv2EA~F*#+_Fxxh+5JMQ2vn!0UDL zCtH6IlOnyt)!8di2!SbeL6S|08NSLC3f=mFcCfis|>Dc^uOZNfr^2 z!p^a$M|1gJ?Lt%iwgxd8OWf+0W8@(Bqe^>9$g|YU>iw7IZsnb(<}O7YL$`$CQ`2J6 zX9Mz}2N7Gvv>0Yu4U1$xe8+fE4xn`c>55?+S=nHRrukJQrED+C3=X1I&Q3J$ zGBOSLhyVEZ*Fuq31;A1kAiAbCNoR;7z-KJGBdyknMsx+WW654%mm@S1D!MYkf@O-%FHw_ z5M-)0pce*5bs9i9NC1J2HJ?S5TKB+*) z^}loSjWU#OgS&m}TdfV3!t(NRvsFONPs-N+yTa`{Z9?(D-_=F>k62C11BD`dEF2NO68tObp2$T(KBKY0qQ&MT|Os(n!mZAvL>-Zu1T#>&&){+F5b z>ayPP z#nEy+m*J{-?~4O@iuT49l=A7$myuK>^;7iONeiS>>a0$*oEW&dxkJ|Q+Erc>jjLJ5 zXap7WIm5=%Zo0d3E|Ua)>CiMWDFtOp?i`Yb0%b$HDj4@Mg=)c%4){Y?^C{e%u!PZtzk*L;93O$>y-fM(6l>59A02pU>SC^r6um9dIg$;|I!;ykZvW| ze)Kjofdd2W8+B%qwhPSJ6N|$TQ=qX<^>>56F#25@jeM7?Y|Vefx+WW123mVWYveX} ztr_j0ax|LJo#=oJy>`$G?VWK<66U|9Vx~qqT5V$x*wZEM4 z*dMhj1a%6~+3Ox@U~X7}0c$9pNuxl-a4i@LQepk60wI%B5(EPvBOL4VmeZrvy`{{k zee4)GClKek&nbGch+?k`4L-Z$SQ@~XkpGFt(_@ZS|Uo(Ir8=M@VEv}eD9NYa=>)_y_bp>H`~_8#YLu4k$#Km~Dc!f*I!1l^9>x~M z>=*|eYzMUx&kM%=(cN&2(&;IRlHU|m3aAO4r(+44Vsnxz(-|l?Xe59n0yJAUG zs1%VPFJxUdo`!B=tcXqUYvM@{=F8qK|JvTMR#BXn#vkd8Bh$EZ1m>_jzd=S4a{?jA z2C*&9U>s1}^o*K1e(N-Jk9YrOtLl56infkR0oN(~YfG>Li3IduPsBg`pPKjZ@Ci9RZ)fzNo{hQoYpkS(aQLVpUOlAFB|I#5XSn&2;y4weFI2bgB6g4H0FGkLg3@BXi^G6*&x{Y9(q zp98;^pMiJ};N`)$omX(Op7b{y=f%w9LJ?%O&hbAc>1>US%i@n!lI&EXC1J@-7sD+r zl^4S4Qb^b0i>?xoi%Ga){MEPSE_&+0(ZkKny)9G0-IXNXD`dYGy7$bxBvaaB3EmSw zH9W+E0RPz3OupQQxNB6-Io-j#S);Chn_*M#W_vkO`4)u~H;=H0k@B~W}=Uzs0Txx@NV+}k0BxwmW+A~Frjz_QbbS;xE6CB$Lt{13x< zdTb;BX$bO7w`dKgGhfSLPiRR^tOupo4X1Xu@Q2xgkv?FeUG^A*$eppxN`y}uOLh~7 z7#JyAP&5KVP4=4`n%=>YkvzuGf+hiMHV6m7Z-2r0WDf&bMV91lgK9(f zzWABbzCIuP1HpvXsp20X9MBJBhuGk6y(ou&0^WPw-+cew{dqyE^%}A$ni}lB>HN{R z=v8HltOdu|+uiUxe|Yoew-0Q1u@N6o^=& zFP{fJfOO2G!=IPJb}r1v;|7sAeY<&dCc1S6IGsBFslA}FYWrkkd)scehrejdQ7#DC z%SM*QW&Rqb&V#Xc`)%Z{m{OA#Om%MTenQ~7)OCR@$bB-_hT{lG4ah8jdBj%~rH~EL zLS3S{NR}GN#Jqil3d(z9;IwuEX?Ni+qJslD5=fu!_N~IIJOJXu2H(HM6{u!diwhNy zO9aLs9dBYf?sTA~TQS9s=zUOuzhoSMzd+c=AAL4RMPr<%aIYWxqOnqsAmw6v|g+G=(- zk!{P1DwD!$eVi8img(x1Qs(_99MyzHW6%@g>BD5stX-~+$GG=e;-7!$CLY`q01uOaOJdtM0d_7GgTdNyX<` znCeio^hZs#@}y= zs&#ft8=G_fk&5VPEql{3w?HIKyHnniic4F$wZR9cWOaYpU?^=EV`YcB!jP$ z>#vzwo$M~-vDbbWF|tFB?9j=e6f$U~^^i>MkwwuxA4d-`qt}q$Dl8~acXQiwKoy(< zTIn$|e2s5HHJ)pC6~nPA3g~*%FSjCMnQ-EC0hfg(P@W7A=4*W1@CTY?xsBA3)xG9` zIgE&-x1QezxaGUT&!0u@F3O4>skNQ%?%Prtl-Z3}+qZ5|ht3UZsPqu~Y^?voERU$% z?niz;IB9IGk$vL*rD`C}FtEn(zf2yBc9ULY%c(w;NjFPpQAu+UUTJw?HR-QOab;+I zuSc6Xf>aMPbkp~>wdQ0x z-}9H!!_8?~1Y&wm-rLXxX|McP$}3?lkQm0ilDgE@wQQ_<$#YS#w^i20^vTOCpa z^~MKctJ4bfzb%bq=`Rlnn#OLtn7AX$EmL8f@!{b&xwgCcwAA-!o(jyUZO6Wk_*AuG z6_;=>{wci{41!ixXMvFRoON(?dvq>yLd}-Vpu>l4T-i zvkHf^nBNo6cF=3sM>=`2elrbMBYwrLeKatiXbmk#Xr&%4@xK9}eadM|6&lJ_q0kFa zp!fcO+>Zw?KGn9?FNo+AEJe|YK@Ueo^*mw7$1y64w=c&8T)OwJD#DQY-rP9Ym!@Xh z*KpB0nve^=^<$lgRrgayWmEW~CsO5Ie<<^6VnTCS znKqnUNV{gzJsGgCSf>^dw`Rody2ieilb%jxPN^B|(0sUXZ(Sqj+57m*cR^aD3XWy; zIM>gHCoN4TiW= zv2w~iqbL5K0nw$=oyi2$t=7$v+LrWIjPaZQSabBinDK`43?eDqEafF>d&G9@-W9VeA z)ULkV8bmhR!5?{@oJ-P=IM1GltX&Pp-Q80xPl)|nOr%K6qNf*x(tO?D}}^(Mn;M;A?2FL}uMfCXJBsT}u;m=nNDIlt{XW8Ge;c$GpcUP~&-3s^mY@ zqZc9fSuRp)DJ>`{*xqi=&3^s*Vo#cg0g}N9CK@fcQ0o){E%seq<*P9PB5Le2F_1|@ z)R0Vqv}GhUXK+hb2bPP7!#Jh6*}!;QguHsG0}6oG?sGukm-}Zeai4p%zPCzy?}P=K zXCQO-uWj_P%KvU}4P~qQAVB_|GY4z3Ox#)G9$~G~L)+wUQ)=X^R_G{`GoQ-VkY>|l z`H^kh;eOk&ea&=xuV2;reJ_05;-ab$T%r;d7Hc>{wuMV4ZEhmTeEX#%DCtx0GHFNF zfu@$zs+?(`kH~+1&a1^jJxd?xn@Cv9aF*y=)1` z%J5_*9XY|7Uxb=4*3!yu*lcbXZ|~ag>_Wm(KDX69{u~%S?qcNQ4p%2xPNWsrJrSa*LJ)&rFC;+*_L2~EA$wAe@8)i-=q64rg4WLvtu z!Za=GB9B*1&bqK%a0x?cZt3P*%zj4?-emS0Km~=9q)8=h@W>P(m4zW+Q;Xj$l9cfy+=yZslcgyLb81Y8CC0f&%7|z(G6I8$?BxGS+EH z#RqcycyIG6wT&Z=`dMu=24ER`xVME)+9#Q``gz9_@Ad9C`7u%7&d1h zI2(SyV&fx&*8TkAVz#C8XUK>%A~nGP`bDu-hCvg+{iT=3`_iTEvs)y39c-4_p$`El z;45wK)-Gnl98fVf+TpDoyy`QRZHdeNhFu3I+v2)z^QP6chf#39K;DiM$c&#%q@fQX zP`20GGA8Zq`iT#m=f;bF@qrgjH~+((m*&sQ54X)>wbOlqBtB435q$7Esw{=MUJ;m@Lsw%+>pcl@=aHgv@55L^i_pK-t**p?L}IwR|!W{JDH*r zlq)j_Q*_VMOAm094OXa!Tq~Z^E0?_Q*wQqV;V%#8S=yrYrw;)~bGc#({3wZN2Ym0> zl$R?XpPoO#1`!cN$PoT%CX_ zxCE8jjeSFCQxK4B_yh>;iQ?JkX}N%hSx)5Mz*7g@eecr+e2a-iXhnQ_*DdiV=WMCG zARft~emSQREnCvQ5t=R){3I2HDARD3KW<|0iu%-o+nIF|5||1~N;aGgMn$*oHgppR zK8J|c`>(?)v>q;9fj89?YdVGCP#cNJ)OvRWSwQ|ps($S#ATlc}Hb@P`7<(5ZuSH`1 zz;1+7OI!Pn9n~%vp6~|P^|A9D{_mZ#ciq6$cm2^m1siRb8(kLz-VU|yV)nRt zJX`eqmK4)bMRx}BpWIdp=j=P~3ERUYCGI6&JL}IR-Px;B-SH@jj|i^N4rP#{U;Z6j zRlys7t@xNS+EEI}l#!G^knVHAHQWUbjpO&sK`M>Z*gq_|XQvdcXLY)t18YEu0^@(V zsuL+hakB{!+`sAXCQVtC4a8Wu{-< z$KlRFl1$Kj?wXfbB@25x54S%2U;I^r8=~hDp50G&sAnn-6U<)woB%pJSDUSIAa~N7 zysM=@*VV6Ak8ca&r}n3|z6bxdOWQiW@b4GMnRy_32AX$hkRy=HR;Um*a~(0r{((Sb zeSpkcFzl{V2JwlB9)Ip`!wxj`2c6s4q_&=(-fn9y6ND+cwXH+XjZ^0iHc~3Ejpr2< zC_sCr1-l}gtA2m%@1>eg8r`RT4~(Eb|GoDHh(~?jBzTM?5KCy__aXQQhSBcjic(Ti z!!In-?;I|yfO)RBwh2D7j?THR{gjr?X6&|eiXk&;_+6d?gZAg3-QE@w@UFE>;NfQC z;6UFEJ#FJ_R*OC$L^K3h-@LQodM*Q4&IfmxI9 zH|-LXkl@J1;}bPF=l9&aRko^1ec5LB5wMeTNXemLopHSvZ?3h%$>Te53qODLlS}$1G61P4_UgJBDUwMW|wxx3jtI zp_fZUMwJ_`$6)s>ZS}l?^a}*n*EkMbW(gwivM(;Fjp?bCaNEx7GHs9u1SGf>hx4rT z4_t}Pnk zP@ko#t^LICcRe%{?EZqM(2-T7&Ej!1s@h^o5*FtdQKL}*#zh$5gi8XH2a&lJ8`g0< zwo74={@a~sA4-u9DW8Mg0avRr?eqX79l6xI!(6_7Cmgu}3n1{ZNnQx^K*S5cbCVl4 zKx&(2+kPqNQ;^Zkvt=LASXfQ?L1s0a_ac^{U}@cu)Mx)E*i5J8x3CH*>Ck_Kwm|pR zJHEN=18-*7w*J2Xq_5b9t9f%3QffMD(GXYEu$LyGK76BliazlWI>x2#Mz~#J9)5M1 z;BlA`cOx8qq(B$tJ=L}gL|wJ_J@`#Ep}T^v$BlUn*jHaR^N}apbDfiZ4!v-O&I-#9 zfMzZ>@ldbE!6*?GRwujxtGTK@Br|<*5Xwx?G%EQ@otj{8rLc5=33~{J{yW|_2m)}f zrY*ZN{4y(hsaq-E$5k1r!b!HK{YPJ4w414ww6yfFbdEiEVx9C3mV0wi;6yY@NJtD+*JgK@HJw>INlrcH|xL#fmrOGyo-_vBWT% z!*lQy*3YxS9TCiiW4|Zyu*_DidZxknI5@KpjaTZkFIPOV-@KT%?j{r~e1Z_1gqqpC zEW5=_2H!L6G`iLo@!z-&x%0NKuFHOyq7`=QhGM=jdk zJZ+{;{9xiy(ok;R{-pRf9}>6&PB~8!G|Vn;r-zGH6S*G)-XbFvAt52T16%;%P;+Dg zH~qnb#yKkrpM4V7x~dW=YX=e0@x$Z(D8Iq^>2=uG@X04_3*O1qHHm6#Y3=>NdY+#} zw$uv|92Q>WhYyKiLb0pCW7L^qT0#m00IM1m)@?R;p`+xuW7mC3z8v`GfA6q;8oT)% zw>Vd|bJOV5nebH!SzX02ql1)m;6tK__zerQtr`nb^U#)B!+r0ljQ61he`Ml~9$2okwZWymm(K$Y z6V<*4S+&+~ZdEYWK-2XsWR@R9R={-)gB2vF@AYzfZXmsPLi&QUl*}>d(X_T z0(Raeri-JDN@=#U`~~C2H3luXp2u(7D`M|7oq9E3`D6E|Tc~}N%{HIG#codwqv`4H zWV>{y%bmN>ely2ErF$Km^cLl=woj`(EM&-A$7OC`4lOl;*TsXEo)w?bto4UNR$AN zGhEyn2=H<*mKaHh3s1ks`hF8$jNceUUG887hrQV9W+@^LADN7g*9}M6n?9pradE>y3Tgb7 zhn<#I0^Az-`_WkmRJK0oU6S_%(>P5fr|!&TR)K>%!{DEEWR%jI_MZfB1v&Z~syajy zF+MJFolZCyM_^B;8@`}GTbOuKeGma@EqXOm_n#CRzQa{=-6sa{ zR1lI8J@8DPkfPH*k{& zXqI4y`MNJQ|I$`pVkuL9dQuc}+nl!j8f}Ywc10|UUVGPFmep5Ar??Tym9t*XglZw? z1oi5S@&Q_pi^Hq7B|8shx9|DN&+z#b{@%i9nUU$;W@L@AL*)_tiFG4<9cwNuO%THq zJ6nsJ8E`a&t-zca?{DPJmpnJ&vci;gz9-Q3+VZOql=mJ-oncybiyi&$8+B4&KHqA_ z1vfxbUWNf-uNZvvvSd6mC9~B9f;06S#%evZN*BokDWCfK6Xz`U>L(|D5n5IaviCLV zMn!Nf_pGPZ_$a*My|p+Q)n4_xm5A`wObM6O<*##b*NOw58#=P;SC0DtT%#*oBJuK~ zyp2%^jyErQ2Vpa;CLLi)p46}PK#Lq$OfDkYPSAvm=a;?Q#3qS&SHqnn!>04E;t?7i zrgftg|LP!{{8JPpU_@!wgHFq$4Hh$ z$^qEAJTN9e7u%qLffk?&9*8^0RK9v1iR*~+OckwV*rvjmEoXPXdj`g z$l8Ew3fYYspkwRyS{H?#A`tYfEs{K$hgd^HBNKKn;_dPRFSbzA2mZagJeFPYMOYYl z#MU&&MD)h zo_JCF=A)+`CW(raoEqYc2C8KM+^tqo(J?2H`TYKzBRP(>emyN>Gh)zs2g z;|L!K*&hGd(vv#RH|ZLOq|K%LEv7(aFA{LRe_$O82_q;MlaE19)zM!gdkw00-gkRX zLrm5JSr_8dg3Q|S)G+xt`eoqgdpy^g^dREH1i~N$j1XEvw>t^o^17a`MNzfkyccgdtaLrp`{rR?j&T$X-@{A zeo;DS0X-&eu7kPmMzeu!voiI}46kBIZl2^}WQ=)4I0fVHly8zA=34cSgOZw0NfX-1 z53{woBdMLUDTglUR0L2*($EooBjuoOEjDbAOVE07S8W!3TGUa%gX`xM6nN?j7}5x5 zOqPU1b|CI@SxC$mO3fist@^{9WUXIbxCXD700@S`#>a#LOx`>*vx|&Zzq;mGI2z1R zjHpI(=^Hialk(d2<&5dqr4>Tj$;0+=5gCbhc}LXdgOf3v1)&35?&eAv1Mv+>2BP;5a^JUJ{f#grefv4lBJMrtWKYkH+N!Y!jOk>WgD##0QSp= zMh))8)%N2#Nd6{-PAzlZxDOF$fvmKmAiQ-M#6EZ;#Xh*z|$xQs3^cJ_v!b1)b*+9MkbU;_(BilsD_2 zz(Xq_!pF?a?6qD8(-7t>zF5j$+{ESd8RbG2G(7UUH25VIl zCr$6;llklwbn^;achDg?4GsQXUb}Z$M(ObgB7Tzec75}mCS=b=#vP@`c-bpAVQdbu zFec!@J*Z*LkdkHP+w`cD=h;Y1WZ(@pC?U&GiWGJF6mYmNUMI_gi=3B1I^)RWII5|s zIY+?gxC|-Uz1C^6kz`EPn8PB-8x!-mpNiJ3szN5`RW4>07A-x!d^pG?UtYo={uFS* z4a7*cK<^{(cn@mNbrTMC^UX(=QBxL6ed!2b^N8w)WD^P`7=nZ-DIH$31gFt@uGkn0 z+V<*N4o4%Es)RodUsShl>0~<<)|$`TIclyQiRDE(W>IR6U}BOC_Dg&4*{} zv56hR+Z58he_k9ba{GUw+h!oV%Gs9nl|F!C33LYoJ$zGn_Q`zR#InOj&f#&!tT+D+ zxGwnTvG0NRbOO+92Vb6r#CLcR%aiii^+DX5LDTQ!9j}ui9W8zR92GyCjApN%A;FE2 z*;t|RM&UDcs#`xkS5scj;?#UvER0q}#Yy(GR5dUsHbRs;Zn0L#B9oH#1MAUX$;W@cAX-zagK{Q_tBpx{;fuCKKR#(VUjxbzs=&dtzrXSL1QDVbfH}b)6>VZ{oW_&l1sZ@=K=PNjxp12v zdxLx)k=?s^-CLYJ6a{g0V9=9&!qG3v_HKK=gC_^mrCjE1bGv?8U7NP6kfl{m*c*GR zg#us?YdDUcOx8f&6vv4_7-4?|{5C`eQh^{%je2L%(w0*%!*$){(#9_E@>ihJvp%FdbD z6_Es2&bQL2=e?OzYztYDb$qaFB2-j#ZH}3miFN;({(X8i0cn}^qF-%Y!uu6#13b8j zWUYi9VTWviOsVhgw|DXKc3x%FI1Y~LvJGWm=HX{0;CNLXaIW2H;GZ~M)*LI8r_6NS z%tfu1of0$U9`&-qfenJz^wpp$bQPpA2+Kw8=On)M5(l5j+N7c#JHn;y z)1}&)nomIzIeGnE7I2Z(?S7~p@UJV*TtV;P-V@&wR#6cNyMO8<03}X3FDV|RRUDZ1j?zG`cFD!1t^ zN}M6PEA#Il(_RN9V-Hq3FC!!4!|Z#IJ3^-rhmr0>%EGX~N|Db+Q*IJ5Kc6VJcVuFI zjSx$v^}7|Bx{%V7Shz|F$_4VIEl)K7N`J2knLtli3JF0AC!SMC^o?6X#b;ne5ZJ~B zURi|aZ=f>r9tS_A()}4Kt>B~+@%#Q3JQ?ryZts^iAFX8Um(w5|vsbTk{=h&C=oAQj zt^z6me-q~#dsd)DM-(vR#j?gIAX0|ld?h@tLg;LyvSBwnw`SYnurGLgQd(5B=FYhQ zRxH*(hpd`E=_$0Vyc!0125)aJ!r$0GI{eQ*H~D`Iml<7W8(~}m#RJ>igblqJ#kM$$ z1l?|w?!V;BHx;gk(6qlU7&F`5f26}3UO1Yk6T}+MRe@_6`0yW20pnh!O&PgjsSA;6C3Z z^B%zHAJSBqW+`+3sy=>PSR3W&v<=wG2vjn5Nc`bNv)6A z&2ydysUF+ztmaDpkG=PdYBJsaKxf8+qXKq1SU?0s1O=q4NbkLa2udeIuL&qBB0Wfv zj`UtbAV5$N5D-Ey2_Y(-P^1JT5OSZOXO7285E$lxx_(R$6mBJoD;%eh4p0CY|B$^ePt+gh^Qw#X=t z3BOqfz^ys-w~RX2HWeF|F1ULItLtV2rkB6G{OrhkTbfAB=EwYCwf+|;FKqx2kUh}K zKV0oWTNrO)sj@u7lHNiy7!WQ zdcIRxy&|{>|J-^2XlPS}W4voKW%Ehnqci{sJVXqD(8N*f#w~Sp`iiY4s|+sGf%44M z4y>}_wT_=(J?+blLTwqq|5MC$e01qNi|M+w77!b-3MhFp0Fn_j(fB6^x52g&NEBTK zZescO?|cGjrgJ$|K;ZqPc3YB!M)lr_)6cC6ly2t*87|klJaNO+&QS2B&5t|VwC@HK z&}O4QJdgb>)bW(4T>ZfK{uJNw!A0g$+)2m1nSv?fj$1ETjIzw1DFVf-)gzaPw_c7F zxEe1jyH>LkH&HPPuVdc~e|!pWc8(|CdOfqjdAV`Nm9#>z zx?Dd>@Up0PH6o5~zzTaqCb^61>&gUpC1&9E`l2h%8OQ||!D8PCFdJF;4H-x}jH^gK z*s!OSGi(F|NI;6rKt&~tJ^x$zi9+HBFT6#(^LySd&_n8(Ay~Y z5?|?bh9nTBmzveu_e^TpFWi09^qy6D>swBpke*9-DwF3r$rA2zJtZe_4ee+V_Yk zT=l*4od-nO zX<5rUjDeAb!J_LU&-vWMe?x_H4Ji^Tf^9*7oP#>cod$qgG;;%>1)Z09Hr2lJJ=8TbgfIrCnWH5M(5*H404YEQ%>nG2Q6;66!l22f7(a_(%HrW zPU=M2&RX={65IGW%&3iQ=5wnXPZD1*F4lXr4ix|l|+GWVn(|5IS$T5X*l1?)j} zFmX1g3>03adl%DONu#AVM+WuI+ZB5Bt$|v8{sE~wCvpyOuFrNSMtB0zkPhsDGQmVe$pEe$|}2EnHshLP3Rq2}PP8Py%4$bK!ia!oZ(}IXU-) zt|paVkbhpo+B|vdpk|B@7)$;jFHQo8Oq#?Y+*Ig88c1aNpBw>6+ajH8#rcREJy(Dv z4uAyi>pz3sRTk|tY1j-bq3~D6F^Oc)Jpd8C4MOuFphY<}`3~+3rNMyeaJ97K2k00E zfmC-^qfn|@qi-dsc+)I9ionQ#)6AQIS*@b(gD;cPnCu_b4CG>fT=Q#M$ueRm-?G|&l6bZ^E|4$+)D&nT zwhV~e;gT>pcTmon1F%t^rv}^rY39GX+CH$trU!NSynDDT0%UY1o5XEvskvHAT;1S$83>&RoGIv(D{oX>{>+AJdsM z?~JKri(^DRi^UILm#?#k2&Z2HwFi?^I`w?9ek;WaN>@<3MU3av|Gj$Ql4P|tBB5g3B z@6a5fE|v+5xIL6lDHFiGj!_AqxI$zfR3^RYvzJsqdGHR(U8(COs2L(nj|_S*rqO@3 zJ@z{13ICn(#7R_DR39Vk+W`*m4__p|d^r8kOrL3f(N9@MOZQG35H!?FW_jol9Upr>HC< zQnl9dqJ)){h?Fjjj(>8s7!!GB^o8n0^hIm^t+KJK70yYA3Sws^TsX_NN&iWF-IShjU|CSy=qi1=yZ9$jrRx%l4vj?VTU-nD({& znj{g`eR)eGt#9KycC%dXM!egp^&#D^lV|QpM)c)j3h%4z1BKIPJGLmE_7@Gr3m$&X z8Io`~d7=~XQstViOP%J|x+q~9JBj=%(P{HQwHE*v=7-$5%p&HnGn!D1tyL-v9*W|S z+W35caSo8s3^MFhB<~LZ)`c?nMW@pD*Y#=e#1JlgGRzs*dF>C{3-#lCw=W_>dzEX! zRQG)VK$D{Tyyu+LvZ4}^T}#BR1J$`Xo8p$6^tV0)`pmk1uMVNVdS3rTbO-kGwsk@8 z;WUP8Q{l1kca73TUp74c6fAp`r}gZWe>e_RRn@MmtwnN=NWM(@5R%;%Yc+HB{MDES zebHyvS?ZK2sYf5@Y^pr9(Y3>W9JQ_BHt4%>#KUx)3qZY$SAC`X9<3R3K%a@}pLkxS zsvq(<{Md@wrqIw9(8>iqJ_a;)g%=gN<$xU;xiUO@WkmJzk+WCSp9ZokWg*-nvwIn* z{L-Utttmsdb_j_~t6))?;y-!qA9f|pJSRyBIXAglM-ayy~*t$Rl!K5ox`R`O=7&nS~U97qpzNZH3L(nv(oR zypmC6rj~3LOZgxYl&w>AKMf5N6)kin8dAQ8A{}Wom{A=eHtdEQPc9}}!!rLdeSDEe z+|h`fp2-G~NVUT3>B-eiH!PT$Ce&Rv7q=MVL1Yk7k{<650;K;&pvuMj`<$c*PI-kJr8Ri~&C|eRSrP8N;bXu7=I(Dp5&y^sn8^fFek@w5<2yZOq_S4O|psy#V zHBCZ$N8z=O$``&k)@EiHtt@EHxO;!(F7^5=w{dSSw$;WDZvt&3&!QYy{;CjLtVj-{ zmwz_g=>Z?Q*#8bbC0|0bL3b&_=YZv_)Uw)?hOq&jisteDC*uR9O55AI?BD`(cKNd1#^PSpdWKka^Y-tb+Sn#o*T8QabN= zM2*Ub{70VHipJQArUuGMz$q>!JS|&LiKv0Xh4X?TT!lx4=lL)BEms>{d^*Lmee^v6!xT2y55rA|HYQ>o}X#xNrs%DV;dW6G$E{pZ1y|!f1spk!4cDxqT z?H`%5mvBg0Zkkrr$G~<^HvuT_8XT(0A$9g<{Yr zev4HI{nU17g_qntf2o6&uX5O8U0l`d!A{5MqcK??-ErH$pBr!ID#qT1+t>!qQ!31( zU0=+H)781l^Bl{{NmynI6Ml)iT{fwDc8Bklb6pKIzwwck2t2G#1XgRTaPepiXLu!C z)ScrJZ$*_`@kb*}yshoao8yCDgD~s;XV0@w+Ao2dw|9PJ6Y;e&sZlwn`y=-x^N=ex z=lbz!zmu&8u73Xlm|1%U$Z}v zEj+YW+GZDV7hrnkmmYQvf&~k1ALe|bRx;nv@uchDXGj<4`I%nl{B`8ci8(+v&})ez zf0%wXd+c(JA-KZ)b%hh${Eef%%SCOm@=}HMt57SDCIA?DTE0v*o5ybn;!oyK>VpH& z?^KMZHn)*W@fYQWyJE4*_rSt*)Jr++a~%C&lofGw)*gjCe+=kJ57h zSf@mssy{VmJNyA`Yk8ccx9MJ~G6gED8ve=G=35HCaCpRk`8miV`d2$v!U6#>8eqz% z{46CiV`1td|4gCEK==ld5O<%I7CF^0iKrOV0p%)M$ts~cMRc|>f2z~AWWn0@%({)g zU8^dsnEpbiyRrXNR4GK-S&f}+ZbLC)G96h7vK zbC<;p!C;0H>%h5C>xs>SOW=N=A7^<3ho6dMme8e;w?G>^Mzz-Dp-f3q-ZbU*HEE%~ z=iblC8f`^0K}yCiJs)I;_b59~pOP+-QV0~yEUqgxhOQ#g@;@4XfAs$mZ1FSSbW*f~ z|I}fTEZ*$fTH*&ytwxMq9zJ@hOqvk8!lzb$fLG^iD{}|-!=9qQ+_|9)@ef`K3ilpI z3KS_GNFh}-|&x%D=^0@8Fj-zbDrrUR73S8q# zxKBRM!Zw@$I|YCiTt=;5>)xB>0_jJ0!g07uvaS6GHNyk3Ie@z6`7lPG6gIdTd1^@F z)X=R{?R+Z)tpi(ZB?8T416on7jT@_;rr17Z*q!t6);rT;5Z4*g(A=^1`qn47?@9^Y zy<8|!j6=(C_*PaOZMjE%ay}*=Tl)TFbSvUv*CWanPhx>FD%+6MO968Xzt8;cI(scGBw!5fS_M$ zK|OUh|2ZR9x~MH&GN{lAV+yvgXAhzyCJVIu>hlQh;dvTqMMK3#0;j?X3Jdu-7(}vS zCsAuHx53)N8d(Gs=zvck$ePQm%KX3n(+^m}f zAuCLf?V!6kugt(f^&c(2|EGOvQdchme zbq!O?K71$ia;43AfoF=Vb$vdTgfdaHF1=h`+hfQmS%K_x8J?ddUM4E)Z&nKxdYTpZ zHWyqJONM54tZ_$0sImt7p{I7xsqj+{%C9dH$R&qOd7GRnjd{+Eft&#?UZ8C(NyiJl z3LcDvct5+!-Epgd-@C3X<#f7|@F|6hpqMxScnaCP>4Ca>*U+~(A{_i!Jxtzba8?V06eMxDY{190QOA<| z&G{pzcAi={cqA+|s~DEMSr~zMx!C?YtOB>Hs;ahuH$xY5;D~?$X$~95aDJNa^yl!!sm!qJINROlp98r&8%aNyg1mg zqI>Zbn9?4s*0pi^l+ZF?K+ss-Ff2y->Nz0ARNY9M{CV?RYy8WY&34Hq@?yHJ?B0b# zp^Q2?T5_Ue#+$ONDvx#MRABe2qT;Q-7Ww(gDY&LyZ639$5u=>lnuO;7HIB;|8%I|4 z;+4|;0?MB`MK5bC<{%NVL=+iF36{z}d=~UGf_qLK+SVIFgG^@THnD#>bbL3qJ@BL=$i&|?{O@AT@2?z;@=i|boPla}i+_S|&ze;gJK0KW8H)9( zH4ue|FO!{|3myr?cj_@4D=@HKn~f^A)ndLNR{^&>6Knf2rby+SX>7cP&>+`M`xx)R zAw*H#1-|^u+eHfs{1GQ26-~K>STYNWi}gU5M=vkhJ~_{SDs9NUuZaea*G8{60Vn}& zWc3(V)0me~Qn3|HAB2bJuj_@ux1~8D1`ZeVC7g630n|z&DjNpf;bV=wJX2+G`-5#7 z^7`?CFDd7bi`ssKxkM$}=Yt~eN|`wypvYa(;b}XE+S6EI)imdJv@aL|$bpQ}oKF%= zz*E^T{Vorf1Ke#>7uWl?WmR>P3d}DF2(iX9bu48>lQ)-&&mXak(7DNKaN>K_F#oBr zx!?l~F)9pe0M0bfoE~He@C?N>(xOUjj0l$L@&2rV(zCDz$A66N6tSpeCWXA@oL|r`E z^x_kyJZ7s@tLr$i_`bFkNW9;vBd!jsX2t(qde?|Q{8i`iDNs#_I_EM!qAsfVyt;mB-7<9xJNLeQJKt4SX$B1+XmKB09UeM18;Ar)Lql*COzonBz9N0o*c_gwWsLz*fVp z>_LJV?tMs7RZZ=5ynJIBG(my?W{m$X&B0A8@atcG9i7aATOFJ63yDNO$;FD6jd={r z8wmqU3rOH38$X|*&Q(sWgJqI#mMC&ON+jg`E3WU@AS#818rz_}zLj1KWUo{JG9feCzQGeLLP%(Z6If?$%iAmn}DTO`2=dSxFHO%epxu)kT< z3pS3Il3`t*H0mdHs~h4-wcc_1*n5HX=0Eqz+i?4A%B;phvKPA&1)v^cF38{f=kskE zHi6u-I7aReg5|*|J8Fh&P&tl95r(0CAHttw_Tz`q#-J%4+TYGIW!>ew{LE5agoivg zS-epj6!RB`XsLKnr|8b*nyU0{W$ki0Iny_ciS;7xr+75qYd;po&OnA%spN!(E}xI1 z1-2CZOL+D)gVvrq$?KJ7UblO#9y9ST+yeZ3w@+n%@d(adI{q-lrij{Vb%wHD{Bn4R zFXG;mSnKKfvm^X3Zmk{Ykbu>E$^`;Ysi)6Eob^HFq^+jluytg~{C0s#7syVBf3_F_ z@Idt;53q^o?Ck81=j2{849jwn0ySHp=@9z@y#{<|)&!a_3JCDlf0i@I0=peKnGIg( zN&`VprRJWdlmRD}XhXKMIWwwV)&C;)(oOdd%Fz3Z#%caoUk>1R1BVaY01>}eP80tr zmtqaihkLr#@JKeXxi`mz^zoaL_36B9&ySXN`)eNHc_Pk}o9n;Pr-T3;Zm>Y-v>X}+ zv#q!QYb4EriUAptnd^8JfO5y4RR@MY1e^RH~F$7Ss_3Q;@qI;PiynyW;=9tN|tf4z}oCR@O z5(+fCT|3zw7O>`iSnu%|7>YmzSp1UMs1W*zepPr-YQUVRK6(|{)Oz3FAd{2ClCL-2 zLWR?Jv39ftl2$uCwYiLD7ll~ZKHe&eu(6d-xsue+Z7}B8ZPuX7FR1h3vfNU$)PWme zsat!Kg%McRBzG$MF8 zqr1X=$)oL;?Z5v?_YteDDKZ!9*Z@3Kz>){o2etQn>MA2hOMH<~zt*5-_&(-2Jx5Up zgS561yI+oKr|JO5i`GeZc3zpNgz$Ba{EBBf@@$>Y!>+$O9kkOR1{s4NImxr8#~~u} zatBSz{{iKjuz$i-Hb!c0aTNklIYnU5*n14qoT>bQ7^@ABpYl%!9JEvhBiob_{pl$E zI=j}FX94OHEp3D1pu<5Kcv!MeW-B@XwCB9`E8JHUu_77-0kUUIXx1jw7=UImD* zajxxdsd%tkpH%}9FNl!s^@mNHnq8ZQODu}x1q=Ze>khMH^Scny2ZL8YuckY-^i+(} z=s4Ey{DtG^n5X@!koo~0)8+>K^^k7ZY5oedbbD-kTFCfr`hK z$y+Z2(p5Q93e+za*X3M4*Xaf3fB^$F>3pB7+*+XVjvjn!omBAtM0i)YB5I-{_Py`< zcCS+gj;2@px1e%RoEN@q%fit5#AShe-}x9NM`=OaHQ&}~+g7;mI7l9%1{KG*rv1`O z5bimiAGt+2C|Mi3b=XUj^v9dNKV$#LL2@f-FjnMhv+aY)RhSA%99y})3rGMp#O6@JG8RIwPS17f8qMd%p zgoS02?|8{ym;5e^rnHWD_cem88`R2OU2^n1&qyaP)BD-}C^z+se+>5Q6^fbG64v%= zb$4>l?dC`Gq!hrvN`~EkPV5AE?xm5qa8l{3l9$y2CNZUqV#gn*-5Y)D#Q{_k{K^C* z8bTqahdHr57Vp|#v4;yQ(uxt>tq&?a?YZOh|7ZbS?!EdpfU*E#FpyI^uj$I@IpwP> zeH@Na%PkhkEz6FoVGnnUh;TABfT-xJsw~^&oUiY8!`p6hpHyGySpOjswEr64PP|aP zO#7sLua+;yy!eq8e;A9XVkCJqvw@Ehc#?M(jVZg@^RUIwUcShw*wMP&rfjY5b-73u zWHBRbp&iP3Y(ac^oR0DWK=+3!_H^Qz*b-5e&=~=@MO)3=!q4~-QO;L7G@PS5_#JbV zV~m~422mu-ioC|@uhfJKQMJb=ss)3!WG)~1tG+CSfw=}6*mabt@EM82pvAtNGB~NR z<}ci~c=QlACRZg&32Wex&CCBf2aP;#Fy%h3AKcEblh&$Y*dx4DlL2Q~-{`H=ZC8ur z!+jT_3}|GLQ;T8-CcH+ze1~K9fRAVG-TRG1m(PS=@Qt_TXG{gm6#A!}8g6CgL7{-%sfAzv6OQ}>T=Qeih9 zPSPKX`=D8f%M0+M$8ClVCPnC^JmBY$6N9$o$uk0E3DXpkReL3dm@!)aT-_A5GFRym z{aWutcAB?Tc78F;bHS~YD#S7Bh*Ry_Z168Biz>{WU=^7!C}-h{OZI5knZzCosA($0 zH7w(Lw2F87%dI&u^gn(jctU%vnO zoDTA#3`2m%;|WAY7BWK^;IowxG=YgGx)seo|9ESejY63M3opRXHmGd)B?h~#33$eZ zK*}{X#=yD*HV+J^#8U%6c_XpE}z=7oIhtpmlAZ2RU&v5^| zxIJLb0~_c{AW7r~1X?_b3JYVo0V!Ys5WEKfI`k!80eo|DlD7B-%S-^Ca4ujdslow~ zIOivizIFNB&y&%9vB&`LRuph(?Y9P1TYj1w#wZ@#^;_8p+L}C?O%s>U%Ttf#mH{_J zW39f#?`Ii)p2K|@$bM)+7xaJvXc@qK0(VVQzjUKTSMVb5b1Be@HH(!%bCAaHQ|Sj5 zhc^KP?}5)R`^aF;b*L5aL8|~Yqnj?+n|OdaY+a_ICpL97E2Y5iUIW6;#1^*-pg*1e zwOl`H1Ik1|#@-Zu6Y!UTkkGjXT1sS8X@3O^C;_Ss%5WGEUO(F)@bh+QzdXA}D{Vx< zYgXw8rb&8>%i!35ZZ*~v=1BYJaQv@97HSEw?&7&Y)}~_A0zBAT*_Zn-=aQfm+8o}W z@%5Kxew%)cbRnEd9%+7wKMT&hnEj(I`WJ?Zc~oek`@i=JOCU|53a9m!#j;;+q>o0M zec|E=)9ytP06_}>cu+w1uMVuk1S zYo!gdKYDRsuJajz3}We1Y7k|XY+?{S<9@A2qbKK~7d6bLMhu;_o6)SJ&E}yDTzM@F zta<%#_yZrV-)=DY+I}`G7&<|YOc7ln<(le=sS=UxHRx-3=W9gr^mPk!E>sB%=vgJg zA`oQ}66V;84&k;&ORt2BMQg?fKHlMx)MxYR|I#A5koocf|rYeJ^CD0mb{LVq`&IYE4;JS_cye5F5+|)-)6-x zBNm);?#Ft#cv@`GwZA#BYy@X^powjzyfpH0&Qj@S8_z*d{LqV-JqFPj=fPWgloR}N`9 z1Zc&bD4iF-N9?4ta~7}ZS94k*^|Q`TorTPG zONzY_zQoACx$(M&Eaa~}BsRol>J2FQ$ z+Is_OA~SK+dqEp^O3K5DQpdaY-Dc;h~cj3&vwd2ZEYh1a^(JdBJe2~nqsuL zzk5m}!MYE3!(2knIbYMk-Fo42@6p&VYNZIP3oBtLP$`nBUy`2O2_`$a4kNeS8z9dEH z`ZkAYMXtUfT=+62_Z%|b+AIJmw>zQBFieCA&v{_64Vrh`qsOb%t(D&>poPHB- zGq?MIC;ph!hO>cJrPl9fzb~}EoB1OkLOj8UILw4}vXlN4fXgqp(p~(b0>5aTS$=IV zRI|vW5?9-+>SNftv0DrQvV_0CkEWj!!pQ|T?}dq6Lk)Cy08Yu(qC8|loGIXiL+slT z1Bh%XUzcT!jSu7CuC+m-*x+XR-v6uB8TJzyy+lDXgyu*$K9l4nY~nOv1($40b1>_| zxiZfk>q^J?Q3J<&ya>^yrTv0JG6f+-z+*$__KnbEAlYwz*@A&vJYT+_FUd3tu<=8n z8!B{GmR_jAff7o&I?@Bbb%{vme@t&CHRSCB@p(i5bHD;IoO5I^(yO!<;&Sw+jl(^v zzXy0{Cx3g~`$Bj2;W|yjc>w*C&95B?Ip!S^T|%S`-99WfL?jz=8YqYyALz#$2sbr6 zf>t){Ys3G0j?rWLL+N%o>9dn4cKFPh5{eGa$y2)};Q`|f-UAP$NJ~c4qB|O-(&gw- z!ysQo-YEX}l-1&)pU;)No{{Tsoz3gyLRQo5L3)gB?JkU<25HYjs-&c_ZKNe~4TDEC za|y~umoH}^8%Oi^)dK&$nTpW;U01N>?2ymINK==^c9v~~N{~uDp{EvN)oju}QnsLr z!#Cm6+8G>OdyOUn70aB9m!b{SqR}-aqxt*8;J;_1`+2s90eA*HMbYM6w8!XXGSC_A zVwlh=#sKFt93@)6!4v_LuWa~zh>ptd@8E8iuZ4=U)jZ6%`ZgI+f-_#s^6uI$wi=)l zN8=XImkA3-;VI#G(SI*V`|y@?f9v{(f23b|Q(+Lg+G5z$#EFNG;$a7|!)<*mUGb`4 zy1OMff-`CqHBxdlAvo@=VHIUI-xs&a?o&knJzcO&%+ImSr!};hD6BD$8#ZOJL3v6I zh_yeLbPmu+#9gx`NP09}ec@y}6i1#Zw9=NZ@f?wM<;)3dm3@uZ2Am||<7nSCBUn`E zX9bF0AP#r|i00=bnT6ks;^i3~3vgKmR6mng5}T*8w0_+~fF2a#;Sr&9l2pU`thpq0 z=ptC~lTcivSIW7omRTf?^skiXPV!K5Ma7U#bCQ4?g4*MlrYoT+Pe&5ky!qQOlK9yI z)?-Cprd5@d21#$U6$f4PxxeLd-ZIQ0t=dRZnt1#jKdjF0hz+)j&LVs~msdm2HUvln z0Cv*Npb6=wZ{kTbcCG-EJNMJvg|(+nyy=gHX?NQ ziVY+`Z1JeLEpgTr)fmo&biD})OJrU9JSlm9^71y^)PdRQs($a;NS?H05lZudvfEyJ_-hI5X zV8d&0?jbEy{P!o=oY~0*Q#u1i@y9se2J1vqY87=#pt&|KE@!69?AjGB`{Cv*C!y_uvt8+<sE|vaqE)=}3D~Dy5X|bTf(BODU=*Yc? z>J?^Z!4e^MCm_dts#W_ZW9Ipe_H5NO-d=Xv*l|FtQeBL)qWJ zOt8l2&paF(ohdJyP2+t7ZQ>5gP`M(#G{O%-khCG@AuFGTfy-^1OU z9&AAnG9SYk=D$^Hba(rILFAHsC?}fgt@9&OF zSp)ymIvWO~#hLQr#WlX7TT?NqSQh9)$HI*zcbDX~LPJdb{Z@Wa>Rh6utK)($l`|E2 zPe^}7nZPN0rN~TfTx+05PMGC-M@dZ%AX2)gq63ESB)i+krJj4HmX1Hsm%(&(sc-x6 zzXJt)sQM8Gz45oUsZoj+f8%PCzv&ar%mev!GEGi9LnI!$dNH2xPid;PyuYn;{$OM2 z1+ZQ(2UNNS1GsfGyIfo%b)CyX#P8)o?TA-%<#EHSR%L2=>NjF%vaj#>5{MFuLWAZwzV!q z!)Hi}s`o&`hwZqUrAxfTm}2zcQZ1vje}re3xIw^fANP>FR*gnS=F48sr@T zfiuV6ZvbOw9buB-%0MX^1XE98lGZO|rE^RspC3fcj87hu#QfS+x9$A!5ZdB1mrO0e zUbH!!2QdRqOdVachpe)xju4hWOmq6jG-gN5!3b|o##^pQNE{#+ZkKCKd!@QSGHO;i zD24TwW~x30?!NW@#j@V+Zau3&k0*bHux6ps=`az!{Z<(D9j@j%JZ9(g`R!w%5`=~} z>}`$`XpU$0^YGjT88Oz#g^3+lF=LviuG``8RE6c&rJwOb;1OGEspO{&+uxryA_$P% zL8O$;vw{uVN|Kpm8I}G$NLlY2-t_*zGoQbR{Km&p$oTMap7ik4Z$+&k?k! z9zAqx5^29Z^n`W?O%_0*dYBEU>a(LgoO*Wr+d1P#Y!U+(fN4C2aF-m#4q}pG99yT- z+1(_L`q^cx=^Cr%J<3Kiftkonpn3Z;YBYlq_of&kk= zU}dL|S)IRMMQ7Ypp!yCzJ&%jk)BNQ0HYa!Om|Wk&W~@P%2W&CGt8xRwwc+URoAB!m z27ld8j|IQ+v-8l4=7ebLHC?ohS>Kxw&R(Ag?Z-gxP9$AAD%o?X7GZg!**l30+rSa1niMiGe{F=M^Q$}x1|cJ> z=$UTu-IQ!MkgvWM1g*N?F8Td{l7M?>*gWptO9OxE(peKOBy93g>t88o=qGDBCWqSJ zZZ-W!^r2AsIr3pq^s}nryk_p{CGP+nLmAX6}_0+QiSBA zF03I^UO>jo0G~bU15ozl9rQt7hPEv(JxSeOzfn`k<#ZAD(DgB=;%3 z6hMtgbIg5yQnfAvnF?wHv(1}>rw1W#gP(8?P|L&mVIln^R?T!=dd$yRxYqab?zLv? z%P~#_HJ7yix|IL1dDwD4e;W)P_?mYIUfaPOhsKzuAaP4BY}mR>lbZ=h{DIIeU&}k> z8U5pW83Naad#rXPS6tNkd(&`UZ+l$)n*+7|cTy@To;r-_1RQMbw99y%4qS54NkQQm zY^@rnudCZXJxK$KlY2D8XL2!s%i<4M;x)c~Y^IHMsvut-yq9hE;UoI&@B+ ztABJdYKUf3hKBBV7eNVIqzUpC+~eYy#WRsXq?Hvtr*s{@9cXd_xta0eSt==Y0y=A< zqU+#L*ao!scq64utk7!$thfHTKRnsI(XW;)2T4B%K!}DV#<84cKqCR@;-BCE$$M5a zzYHZkBO1vEUD{gi!U5L z5sjy#=^j}%ACT{EAUU-OxsI$X@00?C4YMTzAV?~d3-!MlVVbWJxQ6i^r)?%N zF!F%s?cAkGB9Vyj?9dgosM3#?-F@+B?<*5|&A@2kt5D#D*~;mKU&0fmZ57dZV3l6Z`x`JI82UtSKksm#P~GGj zI_w%v`tC+|bLEqtm0j~4i4~kdZpO~jsWUTz+exKFGkjF2p}>gimG59$`yxj*shs&V zyH!$+>3>>%c|$o!#BWY3s9#A_&H@Re(qStuY;A{$wr}77)|z&Z@l!H>33gLd41sF0 zZaEAk$DJk-8&-O5B?4_1ETox&#n%F|o&~iOLR=6iSEW;Tuk>4ggeOzD=2HJY4dRGK z*J#09GD+MP>8eGrlzn77f$eEqmu~VI*8$UmSr?)@E31VP%CJzrHdi(~(?#^&Ft+-2 ztOY;VuR{iNZeiDks)kin^$nDv)9YY*I4r*Ov0e~7^r4j$7O{JM9)OPM$J|7cVPUJq z?qQ283?z@Xnih`*rN&o6fOH*d8JIRc+2V-00xK8c-|k_Eoo$M9UHv7W#Jpqbz{j&qOurBEY1atlHAt-5c7;UD-i>CR~()y^YTy z7OaT~LmG!6DCo;6%2zu%3?`>}O%Vkp362P#?pX}eOB4J2X%#LU=63k;uKjQj!K>~Xm(1)Q#;``6L=~RTN7rgP$?dXltsnd2{ zzOEC|LnDykcO)}YmmoQj#?Q0fV^t6RArx{1bZ5{`Hk)Sn^%*+<5mfxVCM0I(Ugu|Y z;2Pz&FhL8aXVdb5X@`%mxsw!H775YP|2_)b#L(9rsuBb(k_RfIcRsH+aLh6S%`OOR zk`1ea%*IUu6W*C6B!GQRj4b&PR+bFrH!rnE8`R|FC}9FxFNA(%5#yGr4I!8$x=|;| zVmVv%C4H2YZ?iXkeZWmv3C$z-c66~o@s&-C0HJ_HAhxZ6NLicM%)@G+Y&*}CmMsUihI4eNUZ$>~ zhzNhLnX){(_Y6xc{WX_n zp&C@Q%&?G;t#y(Aal)9SZU5|Kaz;$(YdIFVBrbe!%zgx78ELW$W98}j88*=Rz zwQ5pb^_`vZ2hPM~+N~B!c(}vVYq*QDqh$G^0l-+5+*}?cf9HfPbWul%D|cPa?Xj%K z7dtQPe7=C`sqVU<69-XyW(4@kjs=kOS4%{opr3VYP=lI2E^HMA!nJb7^w?HDJ!f)0OOT9hhda0U}9<b>SN@fdD zT!aWJ(ij=)ZBab8C~ep8L(Qu4Rv~XbM-Xpbl>hv2{3M;dBi<|-k*5wSBP9q^M6QYW zC&;i0L})-MG*t4-0h_5?fw14gv(29wOpu*k0$D*|XMhM>;oEKmGTDA5g?cU>>;5H> zXf zNiNVYaG{(QZjNm{WMv?LID*8X5r&~0u%zV-Q8h4^FUg{TG6;~lsqK;7afVv2ooTAO zf2U#HlK_Dg(|9xo4tp-MN>2Ek(TYR{SphWm`}A)N-w*5{lea)SRLjnQ8d2ZhHr@+6 z>tgdu8r@+Mu^YOj+0RnU4N6S2Z-k01#PLSxs;H>wv>p1j*G(PcLV~C%nA3o8MxfJ; z<5?P(u)#;HM8CfC>~H9ChZ5Wp`uyCuwCC_lx0#450n&T{D1j;M?e@xJfr)Y(^xF1{ z(DJ$K4j8bY&GE`L2u{j+;fNdUa=TewlqI>$X4(@b!sh!+{yeSX@4YSafKPek8E7lWkTX_*@V#!`Xz2Oi#;rmuxvAJ)2{X z13uyn*A=}JpQ_ja$&!hGOw!q`lOChi2Z8lm3+VItvt zXrho+8Q8ga)=_RS!3^m*Jhgk;ImKO5qnKq-ElURB6LTBB?@Mw0aw%~8#M#`2i}+jK z&1fizH1M35$Ee`>sRAD&LL`1g?cm)lDBn#fe(!XboSm;?Z~Zp8mHk|95e_>HpsZ6G zpR%CQwki+!-(^frAFI750-?9g6D=f;(Db$5ZsciS0 z*q-HG>4GgWvffm_v9g;BoJ=&K_JCPT0F?d~Ke_2aJ+D#gP%nSyNiC_;7Bm{j>ZQ42 zxXW87GMA*ihANe!`YV+#!_v3Nx-yMub*I{uqjAnoM{i<|k2JRSzdh^Z)!J94DY4M| zfbqBf_3;Nb`F8BH;^8wncu=7Xm#MM*5^rSLQ%7mBOTB<02JTI`v8QcUMn96>>?-#x z>Zb1XCj!FF+te+q8vED>-IWZ;41etRYoC&C`ftoJAYI0)>eXB}6(iGA61_EdKI@P> zBnv2S3Aau;vQ*o&cD>iG{iw%7WD;ePeJQoE9}k+O zd7yfuWEn3=Om$n_NbMg@3g9$L+A$J)xI8m4hBa2NH2$>C#t!;4(b?T2BV`{zf% z9X;dndb__GGG5cZ(}W~LTt??j$n>0pE>1M*^TBLJOreU{uxn?tIo0-@IE2wpw3eFy zMM>Kn7Q##kUsA38cieqbozA@m7O9c+JsE+`?PQIIX}iTMwd8AN4SucR4&U*MgOv3k zyLBs=7)iWmg71ER{0swU9GALmZuj211CFSN_{0q`Q{wl$oJKr}t zmdY&}AX<chINy7 zjp$9L^+?{7{=q?gc+-CxBY5~0$Vvr6UA4U~u+@sLtb3(&b?WL|^|p7eL}v}GBTH~G zU&-_iCe_!vF)|r5JYD@&wk9vlYL{14&T=3MtL$JRZidUUzH6HZQ_nvSzuWVx0NHDbzUd2^}n41u=$gKJo0a3{8Tov_g)cnI)$ypO9Ab zg^;Z=>`;^c^o@LmuI6#HNOb8q?9?YXiGG`u+FJkpyZqL+<$vz{wi9j99Gz7pt;8xg zA$e3@mLGw7PLl+7h7Cv^pGy%OD4%t^z2;Zc3o$ywJ@f3Xf@biUnKR-exugBC;M^wc z<_39NHpCtGv9O-_xuZ}>h&#w0;Ir3d*TdkY@M5h9C};P#AJ5j0Ebz?7SYGHw8wme3Jg8=n`dX|^Cfqbl945H*vQNv?E+5B%eU-n9%{)7QbgRuN_sRQ-iT}+ z&qy7+#E4mw4e{PcT$|kH|GN{GI!)8x%1Dv+zE@S|mr>r3`_KK1GZi(M&z~gh16}2ORUM1{ zeaL%gBGY9SY^kVbnxrV$hdQ{r?vR@H#G5{xT3u z$NxXz8vR0Jvr$VyuIDn>>W1Y`tMmdJ=0AV5fBYlXT% zgR&t~88RbVMiLbTAwZA~A&D}DKmrLNWIyj<^?S~_p6mJN`S2gn2O{1_dWG<2f{h%w(YH(rh1_X%<4;SLx&M*FPYCRNVQYHCz)Kr z^y$M~ECVlftWGQ~Kk4UvcvBL78Ah-n=UWCpEZ_ZkA+9~)yMWl!i%@#OyJqEkJbGm0 zi9r9ChhsI^q^aWV@Gif+mAr)2wT9WIDpS##Wf6RL|Dq6dgPDFlnSw-jNrW6!w=r&X zu}-f8WYW3-s!?tR=$XJvYh^At0Xlh?)C|wWR}Ye zNZuUp!LlOnp)tnT?n8%az)0Je#5zW3VgE%zt!app{MlJh+eJHZJNQ9!8|Xn%8qXUX z+ZgXY)oZtnrBC8*hOE3~4z21c70N}o=TDx*uP$Uh3GNANNXy2f`*rAePPavawdgz3 zpaQ&70jt-2T-A)7D|hunUuhP|xow&?fXX+5J)8Uy-P_x8EP5h&Y+IA`Lm0C-?W!1n4$4j9_X#`7w}E6mmB{EH z=p$SrRI>&%ufEfCAnz>s_|71(o8edE`)DV|QuFhwj9Ra0Iz3UKkt!$~)fCNT!PS0z zfX{A}x31otDOy2}5MDCO3*oKx14qMP?6!)Mh;n$et6gc9W`9E@BN=0mo!v+JkWy?E zR=JQFep3hEVstLhJKugc&7iuf)GB+6ZB2#x#n9S^gc49!C8p zQ|stOAM+H=+_d2IeXw{a|6hIGds2gEY;sEQkp6c9r3p8KgHgm6_#~Y}^3dbxP%UwRPzZDN(4h!olh6+n${8{QLf{c#GLW*;7 z@xWfK?|=UC#^%`-Q)jvpwYj9b5nv38u1r&XzyrL{I|dqZiiLH<_0}^FUEv)7jA#nP z`*97C*ig#KO#|1kz2#9nThUDYXpNu=bc|W`vYHsZl{9r9`ln+ewAscWFW#zEJ$J+~ zw63-`;3EmykqiwyWMI1T2g-r`HH@&!!VE}-_`y_IVp@~l=S6ZV?$g!@b#w>fo4fX? zfL7Ujt#Tu|{)n45XgMT=;6ZGgsxY-n+!oSM-`3V9n{J1sp%L+(IP~N_AbDAfEr7SC zajqzvpLWNn#~8ON&_-1tn$34nL03XRv73%j$R>5+DW#<`q2d)b?ht6u%3PEH?#nP1 zcGS8?CZ1*Fl-awvDI`c`OtG}HGe)U1vVHH#yKgykNEuVan8r&!B*@GBoUmAI@ho)? zZ7~hv70f4NUZ(RorUZoU) z@~9r@?0CXrnO`?(e*$1;Fy;y3JAR#Upl9!9E|tn0UdciAbbzjWF-_F-<8sUeIGMLm z_p(S1Y7g!!Wg_KUP4-fv4d@r5oh4XhM9>3yv7qO3zWTH&QF1PwY%EdN%24CsF`b7F z)mxM!h*<`paqOKR(4)Iy)!bWRjc9?b^=f_#lDHL1(`1lm-`#ZJzbTFn=;0fRd6vo0oD>-qJ{A;%CeJo6aK~ZuPmjYhs4LJMQQ!iXs|%) z9nk^EU#-qDjB(LU$r(rdi^=CD<9#`}`I5y-^5u>^;*b0X>evGo>?lD*sKJhJEqOA5 zDd%CTY4rR6Xck}&D4jivtGs*ZPWlQPxhw_W+G2^~xUr zP}tI#S=ighjyf*sUzas3$^&Xk@$}nW$HI7hhe3anv9Lu6boqmua6|@ZT~o=7 zRPF6m4{B!}VB9LB4-TPl%Uk^3&IRW@IG!I$xu>P9zf&FeuCMm+xPo#ZV*KGePjS>6 zvikcu5trO9fZzoS1F{thn16qAy&2L5bQ9nH3ygp!LiW;Glq>B-n8T38RKF-~+R)hM z(Uz3l3_jl$y0x~d>WC7<%d)9$iLhscYz#GxTzPFY3je%6KYoi*e4_!f2mWK%y(_0Y zZ(A#N=3T0KJ~_&0dplhfU0?&3F%mh+@8;q3 zdGVrV?}}-pVl`FFfh(K;#DtTQpcl1JdX)<_WM}#4iV-oiG40 z%waiig{g3xOwd6`IoBsT*(zl}-~$-5d{8zpaTLq<6D&0-jOm84rLBTmAdElkMb#{@ zNg&tBH}#U;Xgp|^MZ2DJ*r4&!_^Jz zt&ITb`C$)4w3`umrOze3)mI{7q|N?5%Zb7KeLPqt=PM~JkI;J>XCBds=u@|R2Zs4mkacB`?exQKAV^=9pa&fYJOxBG4+O<&4N4v+^Igw3`yGhh zS^WTLU^f0>7+3GGDmI2lX2spn!;3-`nIAt<022$5c$LFrR3g~71;3WMRVv3GG`HZ@ z#)$JLL4!4zhK1niiuL7>Mj}HZ^`~rZZt8b}ABvviCVT2UeyE;-8`GX=+Ap4ULemlV zjiGLD>x-b9!hN$aUDtIi>*KM>xxd&<3)YM zd!<1+cvAPgxmP#W-g%5U+u+TWveHv_s3YFlUe!&N zbL#noF~kfOp}f~9Td87Jr+i*T&l)-%5a5lYj(kE0n&iXL8WmYq z;a-)J679*7stKU&`2Hhcew|Fze5H7o@}5`9lnl&m1bDcgK{7Ao~@_Gd{cqG*~9 z6m)uwTgy*UIUk2Js6Ww-z0&|rk=v$fk@WGm&4IE%mqE|Il1#|tUs|AV>)bHOFMYVy zn&X>rgf;_71DqRyD~a79o^|^HOoG<%Fn@+WbaE?Q2C?l!O+3GAy>ELhQ0><@!2b2y zIqt|g(OljOFM#r;!lBv4?!$pEs|QOKp?i!6%mZ9oEAc_Xrw3@gtVbGNKIu0w=F`vi z*rFD`O9HcdiOBm@FnRU;LBO|HEuY;Eunp2T0O8oIw|WhL0|&{_fXW9gG%7&=88KRWC7Pdvytw)9vF8K(7N1>PlpM9# zmAa$9I5=gcY|eY0u)ZCxZ_H5De-xfO5Dnm%C4z;PnK_jj?&>9@_K~j*{h8&G-n&oL zy1h>*U0npZN`B;vzk^g+p6DeZ9at3_SC^Jt(%+R{ys_zF(`R>l!^iK}vB3?#*WUj1 z!7}`PkxP2yub>2pr)3%EQ$qW^5y2|d19==TaML$}o#_LaWsYd?j~~fBz*B{Oa{}q=4#rV8^vL-#sb;aoVPb8;{3%@*f<0v-SI5zFg#j z@j58wx7&8&eU9zl=jTnf{a3r%NZOO4yT;K#H~({Jz5iB)f^Hb&*JnQAkB^DtqEJNb z@HZ1ZFH=`5txaS6{Lq6wshdPyo1K3g+b31~{KXfc*{Ldc59#LNFS zLP2?XSUc(8-*rt~?S$q)4sVo*jD-$g;)E~CuB#?aN>y-ju!Rf@t_v8G)vx;2$g|LEgz(m7K;x2YS&_g4SZ#}x)fQ+2>9}KU(@yBc4eR+YPKP>$XMs zaI+?ZRBEGZS)Sp)4O&0I_~LE72>s-RUa$Nm=Jjvlq}0t*AHO3zAUb_Bk3A2DpnOPL zsI}KF>0j39i_p8Or4c*$qsir872Mjd8bwvbeDaB#<)eK*^8~A~^TbY{Uy3qng6Ky?e;lF0qA{ z(&x7h8l!uE`tr1esv?OOWiEg~*vM+}xzED@|HUF1|G_SP^YnB`*r?8ms%-|?Ye#T? zzM{&*w2&JOQ)>P8GmrP&ARHrqkpS2GR9NSGHxjT&T0{eOf}tkE#${Gx+|N%;k%5TY z7-)2{YPFh5hNjC)_V$yCkR=UY7Wal2RlxN{=t&}LFpid~KVt~X^K7zdfRgva&9=Rr zsAKevJKah>va!^JlHlY_OgOVYMcZ@!-xU(q&DX~w>uAKvUw1Wae}=jE`4NlrJhR>y z3C3zSS;PIm%5(o$@$&yH?fz8w_~k_ZlTqh?G35L&=7#^tYw>?C z`e_jV@9?gV!~f?(x?gZ+9*C}w@eaVWONB!+*>Wzraj~Ak2QAhgeTL#L=z^9T@xG#_ z;pv4Mde6lq?KHq3{!sPj_Zw6ze(6v(Fb7rO3FwdReH!sk)xeqKs(#0+)~Y^n(~n>T zK;d8te2Wy5fVcNu(m{R1Li;CU9x(~%JLsTc-q%2Ms*dZ3anRyk!z$`>B~>9=7q1KL zDpBtHwW+J;Ikrsf#ZU=w07_ZmvmqPEEKP6_3LDmTsX`-HX)fd0=-LfK*u!8 znGAoEgtes|-zw%ef4UIqYhZ49f`TF)&=Fd7P4OTJSLdn(*$0_5bci)FwpH^q;t;S{ zh|4fLpdim95D1o1A>#EZZs^K>3eJf7Y2JuNi>7=|H_K*nfI-3>Tc{f_tS;qbmdS5B<;21E8(y&DE7{fh?{E zU4~~=A1ZMG*I6}HiJ#3+0a^Df=q|`AS#}&f8|topc$HgO?3hWoV@!EI5crSTBrO4Nj{*LW(UQeSP&5#M zz6{lnZ#$D>!++~Mtis4j9R5*st0<6PF$g_5ll9|L#f0B}O zcE0`7r@{a4%~ZzChNe>vZloP$rPfF5%c~&M-WKUi0bf2dvR?h#bc*>dI7m=#5q&v~ z)Xsw`H7UT@{;Nh~9ltH;V$Ai>u8lV3KhZA}e%LVI%wfIVg^vT%UM0 zDXr<;zfTTZhqAxC-|%=vHM0Lc{s-aVhELg;pa1&*L-wC?`Q#Z~>HB5A_vrA}&a@K! zqQX)u#{RBTAWC9rTZX=3Kw^8%yZrkR^;NUfa)|uwQXoX4PGl5^x>tIo&ERgho^3XV z^`YL4FKP?D(IK2=S$`qxZ-fsh+hMU&Wh`(S(En~Uw}%d!`tXuwm!%vL*Li<7|vvS9FV}vk5 z?Fu(NZ;Os&)tO9|Iy384)1!ms-s?YBODg87!Y+2sHx!BN8j8TA>%m-8@=81#^>(T; zVzNN+g@70eDIJ5p(gbCT;vRY>j1ZO`6}CGm1x~Oz%Da`orLj*j(+mrZzSLk}$Er5x z_2EBR9KZ2pOdQHJKHMj@vm)EIFUWrfL;pynQgQPN$dLd6c7v_`7 zml%TIh81H<&5@__FEX4_?%}Lnu2o?a)2SiIZn5a7Nc*8vG1*kpNET~OTp8M7P*#26 zovC;{o%*1t2)K9uY(`a9*}DBgy4Ya5c8U-{>q4a-4|MT;P+^~wr#9v8tZb*XS>H>Z9`AGUk* zy)cv`GZJ|^r4Swfo=|o6YYNZcw5ElKs`&1#1l}%c&%|uneps?i)NvMm)Y|31T3QIa z+>Z)@k`+aV{lu3D0ln81ae~p{fT_Q}D>VAz+g(nAI|6Q~&;ddqT_2W}crP5~D0qCs z72PGCL$OKMy1Q#ooy+ZD;EDzc(T&Cmb_)OXs}t6h$fnuf0ZhA>N1h5VG+MmA0%eO| zI!iP41iNfgjphBp|GA!wta|_~V2ZsrR@-O< z>+7q5OE+$LG-@JW(d(!X*`A-TZXQpo0QK^0cR#=RzHO&KhrIAr^0RA!UvwAnf>kAo zFG7zquiyBzCx&o0`bWy(U^f7bFrBq&n*-PjZTV07`kMC}l0)n92)A4y7y4b?a=~w7 znu;lKgfq?0GGtcL5zxk4Vw1IT;rYb36gZ46;E%P-W z7>bEaumdnWsmvVt_I7JBdwl~8CFeFh!G}^`T8~M}aS)h`Z^IGBe%;jSqP78TY+G`b z)5fH5B7UGi4+f-m!KKM8Jy`xlZ+CUgRJ~?I@Ou=Tds+DoiAxW~O^f?25oS4Qu{M`iBC5wxL!aAp>Z z9AAizCT-QU(tFf>Ps23+T(Zr?Ut4vKJ{y?+a@}W|D!Hq5CJmnZs6xI8eR<(U;TDst zqpqV@xfp93{6*&Nl}2Tob49A&b}q#nNbtAyx9npsC#1|0orNvU)e$RG<(ko#+pm8&(sd8l?^kG+$?!mA`MTxfgepq$1%sMm;d^lnau-l)mdkz}ziBzW=J5pX3`aeZ`>)=(kFGXC|F9_%7>OD<@Q z(7RVN@g99kQtrdx|^pXn1=@B8GdGeiBHu5 z@04TMhRHjD)1KBr@xD2~nAUB+=TOz+pD8Tu=9osk%h~FE73p5-n`)fEE467(IKdL6 zZE0SK`!Z1@>kQLNyQ90l>%Z2TD=KR5(@!mGD>yUCU5lPf?!5gW)r#zlC4S{;J}Df% zy7byn&a@!t_3yuHD4Z008|_^mFxfVC?%cVl$N6@r5zY-IBocirn$r)0w`!UeK_Bn$ znFComW@cvpO<7i~+9qXw*(uv?m zv^i+see4p6gS>L3vo!^hX0L-cDKn4gYwQzb!Xq#oAc|pP^D!3b#ZfGSMP6@ zii}JRvum#*40a&hn9dY2iGiUO0n?>}B_RJKTGLz)6gbS~=DE3P99ek0_32#pOKhnr zXKixT6Kh=Qm21tV=mU<9M};&Gl_;u6);tn+x$Ul2=0X3HGY>uWi_p>04Z}kN0}qL^ z`6e6Tc=gI+zrMaB^ss*JRhe(M_=TPN?1Qi2!HU0ws~2wWtVmYfU~1dFj;VKhQJuHi zgF%FssVFy&yZENlh8!E2W{BTYr{*;Jtje4*&*`rLxPtyYx@9p{wXMEX-h9MC3RPzD z*_+4rkgR9k%J?&*CAc;8sQKK8JKQwH=!cq1oS7Y>OBFYWEv9mJBj>odI9A*TF~&_a zZx+g@u~``yUChtf=EHTC5kL!uJ!L)&G%kOOh2at=D>T4EZqv2czl(@=PTZ<9ZYYhH zBG9vm&0Kmv-6#arRn#3l3e-i}a3$m2YE3qhwq|#78WcTrYv|MG)6Tqnb>a@HyPHbS zY0o?5;6RILH}-2hMDwWZWTJF>)Je@pKv0M7&0a~2U^F)wdh>aHa`(LR&oA3Eu8{-L%`-hTb-bWi%i2HQ=-A|dW7aPe z@4Pw+1!BR*1#>e5r+$Doly^s}cVm7w@Tln7%!-3G41BRujn|6^Nf(heoV()*yp5x^ zkJUf?VTK$$^9n6v-p|M(_cV{Lp=L%zf#=piATmAksuK`ApJ*wslVHA9BG zDgNyt`*MXYmnSOiXQrKsb93(WSQpb)uYLIY4Y1ru;TAsC)^~{BX>aI;G!l|*%fr*Y zMqHb4APfu*%}A-T=peTAg$}){g0iQ91=SZpR{v#WtIWy4%!DB7(H*PTJ7y`edxy`j zbQxjMwl)o}ds35TAz3^>3^uzsZNb^W!GVj3jZnRkp;t~CSt=LqYQ2jt?i#<=j%buL zX;$aQxF)sHaqsu6SKqI1_SIYKS$!KGIs^B$2g^JNBg{886kL*b=1M|A45_X$BxRN~ z)&kkiQ-pNhHq5a1GdFW!F1s;iFAvN_2NLU=bPqFpcA9YkI3? z=)wH`{gY*s-AAX+YYl}``qF2>j-KqOveItE@XrZ_0a!>V4+g4B6)osnwjDyIC)AUlE z#t8%_=KEH#NChGy)x?4siB5+~%`8|1Kc)$WG?SqmcqQX_P#(1v*{V<0PUER)HyxsK zK!@$u5a^(o%Jw- zHsG&P8qrE%wM5(o*2k5QjxFBig^lMIR>n7`*=8P5M-cO}>xr^nY7r8mV4;KNAKF>l z4o?b*om8wan;B1Ntw1xI+eI;GtmYMqX*NaDoiM*wcVR^V`bq9rN~V!9qqlTOwK0g{ zoP}i?d;ES`WpjSFg3sssTx~1C*wR^EtFLY+tm3HzxS!(XT}|sESCP4y*>osWwyZ#>yFBZfQ-=Y)ny?A2lpR@NaFH;}N+c3&lT9^W(B zez#|7&kc~0{ove=>X_C61Snfr(+Bt}=j$a(>@>}Uj7Ihfh)3uHviK_N~m6}445>)bs8Hclwu5SC<@z9o= zj+wt0JvphBbGs;U>+WMeX_^leRhI07A5O3WGVqE>0nBv17>S1}`L|MnfCA9Q^%zj4 ztt!)MTZ%5&Z-+W*rk6&3vz&Pbi<8e4FA9A>8+*UntDL4Y-wTC8&*lhhQoDtPa{0#E z9eC3(F#hXN-srn}U?U;MPWF()+lNEh%O1e8S{@g1KQgR@ueHN%(`*Oxqk&B|$`U29 z{i@@JvK7yI@)s-nIm?)s+Tm@QHU5-zy128xv|BUAhYDQzY)sw7$+j?NlUX)rzWUPi zozd};oSSr`(S5zWeKqKMC&(V}6dO~+K{-J$`rbXy#%Po;4%g9Jtm~L!SQlcna>|v? znyU)*@AUHO^QX0~jMtizhbvCygJjHQRZ{$)b4jzWQ1s51tx3^qX1K<|(4i?jMcT^T zbZkHT$8^(V+e0*64opXFGIe4#HLy)CBwQ7y!m$;-G+JK%c;CDo^p&5TVeq;Zq`G5~6HY*V_T)wT6lqz7kXE1V)lX@e{ab+Q z{HDFmI!Gn$xj@>Z9hF%WOWr{0wV8u8F0QWqGtb}9jXKmC*n`~As%yfm1Ys$0hF7`P zzs+`5gy##Gn;a9>G;+2l=RJTuv7h;?B&k8{`wvjH;W~Fe@Tq=<*~mWni%Cf3<9?A- z%jB+u?okV*Du5N-P`9Hh8npc$H&*p?S_%M~P#_8X@L=_!8SruwZR7kB4`(r|zV=QwjAtONpo&!-=E8wM=vI@VkISwTu}or zdSnVXF+B4N*H&s<1uxMpaSi&JrOFPBExtRjGl_@RHFVC&aBN+JGirZ^N4Boz^N-RX z8~e_g>UH1P<~+Hy9HP@J>G;_jsEt=?PS#&L5(3_uqFhe{d|RX`TJt|cx(mLU6f{!BcM`->j|PqJGv)7FEd>ufRZ~|c z2Rsoy>SHBH*`6o-OanzNv)^XSf z#>eo)0aUkPL&NAWxCw~3n8%3%c1Dr227M~J>w zHcdH|i}CRWf7WVfd{2|DXrf_GvkNcieO=3v$9$9%y9!xeMV z{{(aP=@>Cqf%a#<55ylUDX0o2x}@{7>Kd!|&=~)fq1W*e&dSuwjGn5+#z@{U)$6q< zGJrZYIwo2$^5#69b4Bsb+DFC8vH;c!u&?k{WycAmBbcJ}0rvwt_#YftS)Io@d&);e z;|&gs@tb!TIlPCHK{HP^wDChOA05G+b8%Bu?u;ZLI)S|%Ou8awE-(Zs9`*RX?($6g zz=fv|DpqZ+c+2MSBXO+<^D8=C~r>Yd(`47ATw?e>&Va@yBh&>@&Gg==_E^s;AgR7g0YqUNjAUGC*w z0Aj2gLvs)67xlgzt~FzmCB@>l6#Rp<7=>0Am_fx#bpt2`c>hG;6;9#~8X#G;4O>6Y zK$O19o^KjQ<8k3Q)Fcm-z75P|@NeHXm);)5pQATIZtnVFQU0&Rr(UwFr9VJh=y@Sn zd40=>GZ?;;keE=y)WBp=(7@a8w6hw3mXt|7sE^tb+iXkAfD`55cmCZK_TARvsgWls z^L+A;zzR#wu`0ClCwdOWY?!$_nat&n5dwxD^m~W_(Sf{_r9Yowtt;*Yv7dV zJB8=`bfzjYTEddxM@8RlQDNT!YEKGxef4$%7M|QsDZtpB~QzbxgYAXRHj`zqUmnf-J2BAbw7A^ zKTJ|_{^8(cN@wY^eK73>;MY|cAMSeUoO6k<(#Zm{`ofOBwGRME8nHVW{Pz9J+|tOw z`N4{Mbzs?VR@WU0#4MlQ-k!qgeclA+^`RnBcc?TwjnrdH^6+H>B6oWhjnw@z=ITmas&>dxF1L%SLb7ub|}h9 z@OuL%Ep`=j<7ZFp@i~?H`uM$o=#`_VW4PbsM4DVtg_k6ee~&@(VF~^vYQpS44k;rP0Ybd6I9@Wgs1TE z;u@+CJGRE`tFZAc{n6wr+L#y!3l_swQZ}A8t!N zfYQlLPntFEBFv`qVq~3zq4mTct}1mIS9}x9^=0pQtC!`~GezfYMX{xMm;`%o6aYQu zOn*9ft_V2Y1uZr(7fN9a=6qqH<#e`1L4rU6&HK4Jo%4giw;^2X18-Pz5HSJPp4-7P zb{0Re;vl;PvQyK8_s$9odC{epV*xL*)?>GK-mE<*a&YK=tWB5pnHH5C+39VuPmSSn zwjrPSqRYT-F#K(AunsGd3Dyx_F)_UQl&h!mm!a}*HSruW;_XUDs!6ykLkl(V0Hb{@ zU-0eDorOjh^&fq*J|Z%kCw3P9R5zPu&Fvf}DdGU@i2`+Di zRMZcLGsn1C zfTD@#MY#J6orD5rBmi}$_-M-BB-|+9WBA<)4R-`;g#hKkUhM+ zzNnISKi3-6roStLgN(^}d&v9RurhenKA0PE+dbo>5wxXQT{xlT!^7>Uz9aUJ3b-Fy z6YIt(5h~zgL3~%+tlE1B8{g3fOrmYOpZ5#FPV?4oNSH1K!xuA(-(~FK?VSz4-OF_( zHf=}~^q|c~+0=x^IrI3PtE>tU9Y(PIHfvzzvfO(#INcB_$WuYGH+iz30Dk&6vr#&{ z(%sIM_Bh&xoi1tk!rZ;um@Mya0lgm7_TK|hvpI6(qg1`yZ+2v7IUpv!0;TALv~F*g zad&o!biYkB=1}%LfHZo2;+MbPSB77D{Cf#^uxyZ`>x)7(R9Mg6`nsY%<;R#_&}B7V zbOn{%%)>wSzS2CIhhZ#OPX*>@KiIp?nO-^s|06EoWk1u!+vB-VVX2xD_M9}xF?;Na z6s+UwtM4WdjN$SQHePY3SuI25Pb$}TrEmFfOKYEMX?5J)JphIEA+eld^&OhKPlG$o zKYzF=&>QPzK3F(1Fi?U~kH3i9RPLPyaIl1_zJ@|j&r(3=yDWWtGy^#T6+xCRq?6D9 z77td%1y0A&yU5;0p{d=y!bUy<@Oe`zW=;E z4rr*Xztb~o{y{*4MtD6sK3R{D+_~p;(A>Ja!1hgBQSCqk3l|To8Y#h)S&+Ijg1HU^ zpV+pN%s%J8F8O6baE{s7;qhzUSymc(XTwyKSLZOJWD57`BihtM-<6=I3 zkWD`F>jsd)Vh?)koAwzVG)CbIJv1*g+7a-B zAFQu^*fbz_2Fw|>w2F`tM&I037~$N}!P#DYq*I&&stBIj$x3NMl2tco53tC*7PBF7F57ln1r*nVn)vNSx~!Q5fIE`}GX5%@_VH;U zEp0l9st9LDk8;-BMU}uDGZ%4HXj1wj0{t4z|1aAZhx!~vO zn(CUI_by0TN2TrsNOSY#_WBPhLGL88=?zkHk}azTS1ocPy~wnW~~m4y)HH(GXQbNZ?SIiQAyPpG=X zg(=mH3jhMs&O*UJ*vV(!p3$KS5}CuNP7#pug{%anJ`}9hew}W7t6_~mScYc>DPLFl zUz>;3cr9w0UHey$4K65KWCWs3coES<1G*eAH(Ll)tMJ2YSNTfC-CJG|qI>cxm6>|rni@ga*%UNM~UP6D~o*SEHOg$0~ z1m|6IfvtWXgAJ=5(sroFR*?QM^z^}AlgXunnbOy?t=@{*yxb8<62-ed%;^M?1@rVw zuVk0~ZIiA>>Vo3tI{}eo(D+)UCp7}02)m?|#f-MOAmId%uU+)K0`f*ehQ6DAADA-p zc;^;^o^Gu4O=kSaLl-E^2n269p|x}8Dp~_=o1lHBJ%VfDj?cU&_m&{WI?Oi zp1`9pZ-1DcK8r;*K4!)lHGXu;6imGWiYI?i0fL`X{Y2#@)>>04e{~Bx0|>Zn!y^2! z%xXO>I8zJad1pCA+H9*(ZO*t)G#1-3yc zilS{Kyn^H0i7}4z&XyaOpU)gcv$Koyywk?Iqb-%SsW;DlksjUa=F3!%_4Mm5>?K?x zWi2W#1!AJ+Mn-E7j1$r-7%sldGQpNw|6kosm{)p&AaJIuT`3(T3DlK*cp)pT z;Jl-Qo!xE5?$!AzLb__Uw#BW!)a&r3TcW6n_p+}+KH}F7X*0h!3dXbqE5Ji2QOb@d z=f%V(6V3OTrsO;TX@wv+6X4@Id7{`Lw(?B#2SR#_z-g9iUJKCQ)D$27jI7;4X?!m{ zr>GAYcB)j82%_MWb8cKfvh|gd+j5UxEIy(F@}Diub>)g;b-ZQc5gb*7nI)~igO+Xu zgZNg;x^|JWa-)o)RRdJIOlm<%zvYjlRV6ufesJ9nG{cSl=BD`e471ST>6b~mJvm}{ zFn7BE-K2c*^%emUFB;a~*4yG@|Hpn01lo?UV1D`9ySUk@j^MPZDu7Njb5)_+=X+D$ zZZUA5dH;5Id`byh( zs&GjjE(UheFf;W{Qr_77^GkOAUWX33_zpgy4f)no95k~_ECwm^;8|hy_*2yLrayHg z_Jy6Q%DCk3?^SQ67oM-Xe4ZKCegb(2n0&8x@){2ly~J!!fHO3& z1Gg&hmj8qp420wyf@uK41F4Mt{uBWD0nAszl%|n<9!Yg_QeEL$gCFGB!pd(|>d;3~iJl@-*Xo!Q z4-kbutmNS-<8xkk^e|bKrSs`%+5ZXpJ4M*y47G%r1PuPY!m4fRj(h_+>-u^}0y*Zj zI|LPl-U1K2)WR};=A9+?&q>r9Kg9_J=a!iiw;dQ-n!Ed2N{j%1Yqa-^DZYq|VM7@@ z9}$RLrRbe{Ft9tcDZ$J{HBW%Fm-{wX_J5Vy!=+`|okW*X!i8#{Y*Od0UG0Q7t$oSj>JiJ|+#IASy_O_FHq zTjsHtrPZ=Tx$AQkO_-XcSJH#iY72%vkq%;xQJ0@#IelTLw)8PJ{lE|XE^Ofkf}VzW zymfN`xGCeCn|rJ$qe~7)$$z^GdccSf{cK;j( zAhi&M0zC`XNQ^^x>VC(MggC43k2X$IESqyx*n+s7x>f_SOiE}(;oH{YC~?l`>3Rm8 zm%u|nW}i+x{RFae5^i|foYe7GAxa?IV_#=k|2*2;E6dx3Rd(p00kC6IDzf|h9l}d3 zDqtk1(EhR*C-9?F{zd6GySjHi@`Nlu2OfK711@x?g16SO3z0uE@(^r<+xMJ+#a4() z-wC)KKjdmiCi-F9x~_LPs06-{70#AXXU7GY$?%h|E|vyZC!O)O>Qmbh-~R?7Lq+K|Ek zbkDJfAQcugC*7o`HF8CIP+u!uPjwwyz59Oz+ylKL$(KQpQoPVkdW(!`+6PrKD}Zwv zK_UuAH2V2HcUaGd1yS~={tdEb!9g_m8T&``g~vJA`EnoBq@hOD!n+m5^PlVFiM)?& z7pCz&+fsB>ak+h9CuZdoFWR`ErO?vN`-*E_ojG>+a45Q>dt>5k=3csU)!+Y#-)Hng zzfZ%ykSpB!ecR$@6xv^@R+ROHjr)x)LSC&UaFLKa<(j0yRCG&>F&hRb@U$^>O&{Uz z4Opm%l-XQM{$F!q5eXMcnkfZfDp6dcKGS;(fpR%jZTtGj#jZW#Vq=`4DxamSF-Qwi z$Q1QI{(YmX=YfK%l8|)D2f*$Xaj(w1ex?~JpEknoO{~NEg{q=YT4v$%zEB>c2Wo-D zPd4UKkZ&LV-dt`Swe-T7{yBWKL7KH*v-e2gi@p{?MLMfe>$21gTxu@9@uiQJHF|?9ZyqXjvrFg}Aqd9J6D&E0(ygvZbZmLMAkvcY z1Zi%g=v^|^qZ5SZrarh{>w&e;KGm>ac;`#ES?C?VI@<#%pziiSzYN(zXyBVm7Puz0 z4Ue;BAMK%?f$4~}vdX4I>AvwHCA5RL9E{0FJwWn*GDpgzLII!dp=eLU1c*S+0^0Tp zz)w&RO!CdN!g_&&pa;C}(R0%FtEcj-?*l^k{jfu2r6y5JkI#8{6c_nXx9Zp&xUosy znTnIgc>2Fg43CrYcA=#;JF>l9!onP@@{fpHO{3C*qvd%1s`sXHJOp-4<=WgxZ!rV0 z3#KBc&;@we_Bz?=s+e!u%p!ZN+^gBhwye|z(9Lvudzl3MN_8a0$EN3P?fVYgjmp)_ z0|m`x!$?PmxVS48!@&8(Zc_V5yv^sYES`P)5|~HNkNBJ5#z(MT?CRNcfPV>UR&G8T z9U3RpaV+#;hYSo%9~U7((Ptq%P$lJ3JGScsR_G#EI!>^_sE!&O)9biTA){EMB;FEc z8C`>Dq5gm4<$=GkE?hEh)p zH8wXxs;3<_+tV&KHO<)YPZD~Y&GG$G zi*={CWW6ZqvDs{1oEOMK%4Ltoc*j3oaqMWkb_%b%F4&H znIPiydn(*fGtJsPtY?V)%^y4N08g}FWFY6LS-29btDv)hi%QElAu1@%H-edjy?yVq zT!{|o%uikQ{F45?p~Xs-obiku&)bKjJwLmbFApWrUEw`+G-XxTA|Uge*jbcjazkNZ zMuku~>g7iakba}TbLVu)0n&&9bK*qe>fx#F{o6XJU5F}%__m=T%;87~pw$~TRB=kA zrk?h4tqXT;J4`X&I1FicvKZa2l_^3wDI6Ed}qr=k9yXKD&JOXUmJS$@N6n$snVx z1vVAmvKkFf;VIA$@y_ciE>==mpJJg|ZcViiTX*C{i;+|H0=HyJ-AjoZ!`VRef(%9r z=g&)&QV9nn0T|SP8}aBn0{I^w=)pcIIZhqyi#*2eP&OsAMySy^G8t(-ebdFG`lw)C49k2~X5MXKQ%{YX?wjq$e$$ zRt!vtCgqC33wJoDH+UV>lx>i&-!j#@xYWwp2JL^-(AWR-FgMO;y7GmC_sddoyWPed z@!6bs6a#pvk%NyZ`23LpO+^FYXbZ4m$ey@Aw796frLpt1+|q-O%U8(MAYK8K+qW_g zh561HLTyBU5}Bv{$>MaX$HI21*(uq7zRoKwXIVbDDxl_kU7JplQlM8sx31G>)-Vm? z{R7YiyOPA7K|bUlH(yoHVpsaHaSJP7!$Fy|!#)7UG}$82s#-yysU6e{kria1LnGQiKj8Zm;6y+<0TQiPovE^il~({*}v1iG+-N zImdjbk9OHzi;L$ClWAxRCDo#u0Hesy<3$G14w3%YoH9SeaFCr}Z+xeNcZKvR1(5X> zR0#!aI_mPVW?3m^Wx_=`^?zo{ajw6NdVM?xTI1;IFSQzSYUwCiS0sH@ARrx??$NW= z2S_|zyjA_zwp&Kjgn?#`V=L?60}Ln5Ldpu*efcp{Ve+E*Ka&!?%-Ja6{rsAq z_Xc#f>T=+VUZtQj#TGy;gAi9u=nM@Yb7b9OdVPJo{daJAG4ZDm0;%V9V}CVF7Ea?= z=SWg8^PKLX5`fn(72*Ep&g8wiYNQtki>Xx$ElKTIpX#7Wk z@k6cJ(Df;4$CfL}I;`-;k6CwC0{3S1@W2Pa!?#CkCZeOgSJ$Zqez7LWSu9`najvq5 zQ5Tv3*|^b91X`C9}xm8fFtmZ`Rwf>WHXnv<@*r&dcfnm56n;;~9u;v73X%Jf! zM~Y4Qpk+$ zeW66oP0LF%I7P%wUmkG<0vz66Q=Bqljh&f@rCjQQ z96alLkuC73Z~eqkAn)?+nnTxRB{P3Lt0IkOkx^SuR9jwuUihwX4+Ao|F4wUN+osug zsX$P`yu>8J;hgf|0(QJq)rZoOyzFa_52fuDmy)Z$qrmHkn|*S4Lgd7|`w?r^-9H1- zf$^}F4DNi6Q-aMQc)UZGf@_0^{N=L;pIPfpm$6F+vH>MF5I7ynui$!PufP~w=_n3Z zwNp4h)u`vZhHZl{sQd+1{XG#5F~mdW#A9x4kfajNu%G?;y98eKwSGMc`2c=Wa|bI0 zH|0F2JfEX4*1ClO?O<*dXk5X#o$(zN(sHwPbLlvep~l&#NZ6iOM4ADqTPRwa)N#_t z;d`3o+ohe}eBGAKB@P=(3vKVK!F*W^s)j?dpjypm@$WK2-UfH-_#Y1yym}<&_fjKp z85oX53_(sn<3I3u&QCcD>_3B}GXFFFmy2Of7XKeAkN=nIVo!qqH!mc^@3jtKe@OvS zwat%;gRZ!i2+rC2%95jR0bBHUwu8N3;`e%RP!X=mDF_;GBiA!lF)UD9Zg0yu3e;VJ z@}h2+=;U(4ciS(XV%*rPjQ&#p=Ew22L(s>zw74wjl-GeL>tcdH&F%sVQnR6`@c%) zN2tn)FqaMN)-|?1Dh7czM;?Fw`3pzQ-;+!@Ez_F|SkUbJo7^(ml408gYCC{}*>9@u zM+Nm&RZdP6C|+5BODn0q5wE1I?)wc9Qt8)Ca}9~5xNvK|zh<+lOd&gM{k za@kBW#Qgr6LnpCT4d!SD+f3D{Z`~w*cg$KMIsOZW5rA`+hoSRS z{O)qtBqn^242}N(m%DPrT(TN4*TtbB0cTk+W~Al+xS1+pra6qG=O=tvrhD`HHf6rY zdBAxVXY3JtM6jq!pqUWmC1A?(96uK;m|~bJ;r8MAxgyz^=)Fqx@BbNusXmX6E)ZE8 z#6YYcYN5JYSSmzq-;h^^eW0QCPN|vORGk;+npgkBsB95%fHQZpF5myX3UuSze{$b3 z8%|J*J&4QgwzkAk53n8og}6UHl)ljc!+CAlcYnt!YxeK!QD(@=SjiLW|B=A)9!hOXDaJcK$pUyQIZnR4NLZqyw zSrgTkng*%bgKCtUsq`kZm+9$U2l?!e1J(h<4BaHof%)&@YVPOf_cAT5bC)z%0Ma;w zzew zwcSc4IXvK6#~hZ0ssOhF4O(45n>KR`iB#3aVCT5i2B-&R(dpw(;s`|JP4wb+lahIhxP{*t+GC?F@u;W~ac zvYErO8*J&C^?kkXJ>sg==-8M(m^d>xU(N_Ez3)TbMhs88Svkt*{iB11)_UpxE&IA* z75u!Tx;i0c-*0s7Ae+{H$^0kx9|A>U6=BhKM&rs{I1fszh-mKrBNK8dRS|nMZ&&$Z#!Z& z$P-@46Oat1bG{b&sl}zV;HQ2AJ*D1@kYm zjMvOt42JJ~mM9t_gh%xBkyfC{u9_(~^X6)m$S{Hs^z;V5_~V;zKvN<$XJ@dgg6V0B) zT??X_-u>ji3%@fRJ+$Ju0bpb=#FX(lPwURjCUWEBf>+qub@`@#FhQPxd#D3*Q@T}& zy0L=U!A*XD=d)-fy92fOr`=XM4Kr%1WMkCsimX$jk-p;zCXH-_p4X2qm^~XXLRa+* zlTP$QbvHmmv5H+H3fcrOeAiUH&m6tBO=JXzI9*SeI@CQ(%^EOQc`IEd-Kuctw1HyMo_I5|ck0>drK$v}bO#x0@edtgNV;S&i3*aNkcBG|x(CHJ>Cvb#ie|(Ofm~3Pum&l~xbO;1* zMV1d4-nl@u7lu?uNP!#qKaS*%Z#KXQi8rU8=Ws=VQD;-~Lzhm)0t(eGwdCBBxw~Q^R0Yw91oyk<&UkTkVlj*VjCU3Binei`>o~C&gwzDJQE;g)*P)$cIdRJ`;%_ z3SVpLPLYjn&Vy5_7o5!Vg83tM*p5uNVaB^eYh1YavAlo>_72fIiw_NTRf<)+MEKb9 zH-#@ejY!+7x!XRt$dV?PPsnZ91`KlkN1i>?Rd8!wo`eiz`Bd1UWC^84pKHQ0I!US` zB5c+Q268M@$#sF27GScYEbqGbJd?S-R*?$_rbED(gGc8FN&T)nK6z9A&43Z0W2TRo z^jJjgN}K8yv>F`N?m0zsw&abPEB>^A0P>q!)x*XDHOuXK=8+JuC@)-wGw5t=nDIT@ zF5@h|=RCeL1Up23M)i^~lwN&9&wGnyf&SXf6Y~0{lw-4KUKY!EI_mHKPk_d%Fc#FV zHE;Qluq*hn{y}!Xol8*q&5}1|#h3JTl-2zmqJ46%taTK|-WuerWFI(dYVpghJ1&#B zP^b@mDGi=v$2Toda!ftahM0=M5fzBb`Lkw^EZ-&wIa`JB}P!D69zkf;WCX=)rqWqujakXvTuU9 z8Atg$GeQ?2b52Rr469s>x2>h1&eHB%d&|i$YG=#tyF|J$mWJ8S^cE6kxl5Sm(4p(u z+e(Ww1#qa61ludH#eq&%398#67k8^N=AOKbLMr5`6H1pq_fT5*_MDJYLm~KBU8})ZvA?u)&wiFPOQiVV@r&w8%IVq3-p<2Ysm_j+h=A)oJTg^Z zOSoA|Rh4ZGdRw-nYkI~_K{uz(Lk-?+WkQg$5z1ZKYAR*k<=HL%b|QAD`wmfrQ8~T* zTv~^Y5XlT&oe;P9xpe8$o4PtB*~TxA z_KcgHV`d!MGf;W+xpUAyCk@t%mrLGzKakVeejd27(v3{AJZn{t&etd-#_^r5PvpK} z2KSAWwyi%;P&l!(g@WZRQ~6|UPmRl9sz#YDb*!RY<|906xhX>j9#Mg9tQu8je5)7P zI8Ho>Y~8v0EJsx#y~2y><1snqCcpmGOD1wd9O;;nMw-TuS()Km9j9YoP9e%N-1wqR-SB~j-s zwtvk+s7tqspP7@k7J6n%hPCvW{S@?DS`7QbVR))yf1y=;v{lbdV#8>dInd)nfh6xh zT}-QNW39KYbNM*N8L&2Q2!?zyZ_3$N&nC~;O}q=xwd&eTP=)cZPqW7=wlJ-0>y4GP zhC{^l#j$U_Xlv)OeD}^j@1H!8)fW{`F7j|$JL%#A-tt8}AT1#$Inck>2L!Bln%{a( z%?}f1^|e>ObHAUu^s(-V+UjBlVWFg3#tn6SyviXpZ?OVO>nw4ZPMw>bsVBO-4J@`Q z%Ms3TzT(iszXy2qW*Xov#VT*mF7WXquH!MPZkWLmV#4lfJC9V^%6e5v6%7r?kVh8mxvk5C3s_6 zjd0F=rdCetY~Pq{-&BrPBk6r%?5R6a#a(?qjsv|r5TYL>obaUMcZo10Mq{`%7zii1 zo*k!W#Mha3fbwyd!L7-@T7hqbA)w7g%F~p^X!&#M?jPnyi;!Itl3iUItGK7^z6@7Q zk3^yJyLWiyTFAe@+;GSakfF$+AqaZ0vhwxo)2$mDnYXmhZD=z$mOm9343Fe0%eAqb zpFsodXO2jeuC*XrS{K*fQr}7(Y2MZ4q++hxDFlqiA&yP5NCYF%-aJ$EO-}=Dr}Sp+ z44I@|Qb*jll&S~-LB<33TMFP5QiUU8Kg(k-9p@~s5Ak7REvc!n5@e>Z2QI+fcjDbS zjv$Qs9DBXt$f$2O-^@ioI-vmz8rBkbb?pMjvzwh~&>;~z#B60BXHr?G?RwBBjfCt` zR!qH|>kb2M#Fi;%*7G9UsNT;a!z~;pqz^knm+IZ?;a}U=98o5V75OJmdYBr|?>y&{ zlZDAA!Pb`hr7~Sdf{0of+ut~o+BXIG4FBx(c%{q=I602FApSxh6!L?O^<4A!MOuB5a2^39V}xx?8sm!UCO;_pq^Gm3140B zN>UyrKjBrqK3VBjeP4G=`^t<}(TEHpws=ZHKB+ceLqq!}{N>0hUKlG|VS7d~KP!vv zlk&LwysfUm=E|_O%Ub^4TKC$~%It|!>DG>+&oh)a=_~l|#^&zM73K2Owp0C^f4|{# zX55*ZYYibTY)6ZyolxRzcJ(||w|=2n8T*dPWkT7*V@Naej<}wkP|y&=$k2N9-$(k> zX14_y`GtmyLK2?CJRezGYvC*HB`LB6{j`1`j3N5xsW|KOmJ?zk!u()28=+qwN<4E} zRBkE4vr||8EAE$SkV7eq&3VChy7jn$4lG#O38lHTv@+UcJ>1Swt{=)$a6FwesZ~Es z++SC$z%2saQ$(Y@>^d21Ohm}Ac%4_R^*|EG<|HWGm>4cAlJ~~FwL!ak z4Hx;2|9L>-I`R?YPeEZv(gOy)0&W)h!GwnOfhQD*XsF|Cw@e)ePvlvy*?n*G$%Yg8i&Pr53A8uU|J%mFR>?`R2$_t12%8KZI$?T*)9)2{|s#=VDm%gzWD%I(!8- zKq4)!sMbbuyAPWMZA-85>rBiYwk=1NHoz-bE;$iPS=FGud7+&7VEQjF0*-HUD5l1#07)&9d15=b*G63e|g{$rL{GPe}_ z_#J=52~H@6yVY$gZD2stcSgktm<1vp)_F5)w9t+Q)s`ULmS)CGivz;`nRt)DR4wOA z8hlg}b+lprK1M7zrg>FCgqW3AUa|K_Koc3&wB!IrbhknO3Ye*-7Cd?fDbFe;kytd! z7TGaiaw9{J=-8Sn%*h2`9ecT*bYUYen0Md&j{{<8ak^$ReRm1VZgN0+4m&azzv4T5 z>XG6O`pxfv3AhotQdQXZ+n{6g*60~!h=sI6trFq3Li)|3SsJq{SvVIuzn+ua#`b*H z3h_nQescX<&Na78HRz7tk=hI$sDZhWa$PW~+e4h?U9(a+lTx+sq5TgLO%)=naf0~f zC8%LWwJ!C+Xl#JqD6e70r>c)O@?wM&9}2`Rjb`6Q7}NubA&DYrM%RpZ*pjm6=0tq= ztQ2>YIN^179}*+TS;H2{$^ooe@?)4P@@cK;^&*M!IVp#uZTGfGup@wd~%TA&9vD}N*GDTs#+ zGHIsDyNznycc;ipeK6qwkB($BM!?>=S^B}Z?RIGn(38f|;oj0t&6>Agc!x%7cw=LA z!ml{OmQqV%JuHj>(x&RTS#MP1EM-fq_J$23P!(1jk}*vQq(1=F0r_i z$ycHoa#Nb=>E-AsHj-hI+^98+t{(3+)mUK5jmgQtE_P`vsNn4AjyN1PiSxo5q=pL@ zzIj~XEXIaM79IDQqNZnUDEl|f^}sgP(ROT7m_>K;P%QPN9di*uB8tDw&d-S6q$}ZI zv=p@ZqIAMrM|@3CUbA(_I~G>Qk-XhNKeT>|wDX>)B)Wz*?R&dkWp+xB$C@SfMrCG~ z8cRvuopKa`@P+s^4w|&phIRZo>ql|Al{G1Ns!%jZ=$18md4D3R(&lsk1Ke!dMHk{coK3ALy@#YhmFew?a&99BJ zp}y~JT$w2k3^ZvDTM-uXHux-LR3w^ZlD2f%nk=7W zb}v=g`)%=ZO+`^fi4{yVL`t8)Z>Y-}*b{l!O&7uG#aQ z-eq|x=FfdPumY=^l$&i?5`#6rjd&kt+%;zNp|ErbA{2b-Z04j^9RV=nP`d{4FV|zP z2n4Z8R$*mh`hpsmh-(?ei!Oc8FR}E`Gmo*WCDr3SuX05P7@x`c_~#}Rh8umX^)!2{ zD2^YZqI2Vb#tF>VJ;>oy3%``d^=V;q*v*J$+fRk9)Sd#Jr)jI!`t$c*JXNIU@v}p2 zZs?xL+GRb)CyU6j0<7pQgvW^45)pCQq{G236!Y@v zvqr-6^l>|2_GTMHm1p0?Otw08N57#4Rrh>jg&+&YF09{CRmD$gIB(C%IJx~x9c^m( z9SrsSDG*o(WrONC>=t~(24n8Y8wM|2>r18r`;Fiw1JLzn%ekyonU`4N(ymb=8 z9wDX*3#fhTvV-^@%M4aJ%&m20V}^*kAbsH@R?VYDLu>#M;W#k3HT#CoW&32oTT z!OypwtZDTZ$7!soc(>8!H+Eb|2*<*Cij#uzHJLzeZT!lVTl`kE3LO* zbAEVyFG0hR^!`XgmIX4qA`ueh~wq>7IkgfazV~mUc$Iz zigH~Dq-956&?z9QrJh#V(#A0d8lI_pT4+Y@7E~K#Xay>yKbc}h5|DG-SkvU}?CFYE zn;aRfiMh-%Lx@Z380&6cVLnCE%yaiR$Azs@3%sL-G|3h2dnEf;Vm_5xOZ|f^lSVGJ z3n~1K3$t=@#ftBDPru_!y+6ZZ5d9B((tEjk2BsUV*i|8~@a(admcD7}@@)hF+}@h&`|KOq7N@iEnz4F2-`fXn-dgQU``{9Y`S_H03M zHWQls)Ka;;Mm-(Fn3I!deELeFp~tt#`0^T-oBYV=|li-izkDj^~TxOeemLXYA&y+#3>I+i^~xd z2GTu{?3e}k*wXc$g`amGJiJ;Ja%VhZ`(Ye%BMV=xKRFZDd&6p?wjnU{DvOfb|yaHpie+0rlc zu?Ti+{;*kBhI{ly_Z$VW+ofZJTO)9|dQ$Y}L^zyDk7)Mqrl@QCX9hoJ9|MNe)ziEo ziJ58@gwQ#@>mMVR=GHfhLfCdH?+DyePHN}htP$2l^6yRs@4oi->!{umI}LlcUj4{o zW<}H_MrVK>-0`f4XDb60)mAl$gqiTkJhOSH=}gFu^UoC}6Hf+A{q<3Mnhg$rK8rED zb=&q_Q)1i&okrQ`HClJ_%J4Agk=r~TsysiJ-aRWH9(uk1G#5h7QAmESKaL)&+!ooV zOxI(CnqT*Ogb%6R(RA3P#5MJa=GpOA`@3|swTdQ96|t13^ZLk%jf~DNtg(z=q_$Z^ z%~$&R07}%I8^UPAY&`68QZ<>xT`7?(rQ^-@usU!TihV}|@i0P~@yZ_ujFal+#&sR| z<_3?4mL1#iu~2T>9(w0ts8?4nKdBYkmJ!UqKDEx}pPVs^u)T^lPw)5MISPNJ`9}831Kd{P z-UP+5wl9N+OikdgTD|>dF8y-!pt0!6qoWy^%*i7>8SeLaQ)GNDIo;*!cxy5qeGkUk zM1Q#t6DP73G9X{Jr4Db3W<-4 zi+3|Yz6@Zln&ht*&IsV(3(t%5p&ep8qpJx2FlvGba`>HA!C@ulIhygy0l${wKBo#q zvp#+K4(jh4+EISUVysfAkk5!ovIq3qn<&Jl#a#L5M<++r34=RNlul%;H9w_R+_gjf zWbEQS5_0WjnSPrA;W=zFD|NUjo&_>;wBUxb5u=#akYulZHnSTDLQ|+ zi3jES?kDcG8{bp75A}=g5N?zV?+8O$XC|ucQB2#N!8dCSH7X~S3`>F(xhKi^EtUog zO-8CUnM$6{J0o^e|9tet?Cn$@ou`im4)zP!-Pto~b7m5n!nMS0b?r8XSLHh2HMP%X zWqZ`9V`RJ#K(=*kZF={|`-%k~<9QKhDMC^kaV{HL#go@kOB};5J<(CoOs{ZCL9GTa z%6fExjDXbMNv8H~=e-H4iI!H3{p{-*xsa54_Fq}23bP%Lz6o@jDf?FzZO6w1m33>H z(KIz&XRXN9YM=eyTjBt;t}5Nwf$@7s9`_iVAM<67o0;r16uj^22I{O1%!bW)R&>!M zMnhE8UCsyH|32|&O;cPYX^FKg5^^r3_;ayXl|vnKE~`Z!p|C!>j{NEK^EL+o9ai%J zu_KDRZRJzj-Q`8TceRS5yk-Xf=2n0neV@dsTLr_D!qM0G)}?0PM*2tXevJ*7w98ni zU?brhAYvsi26}sYyyQ)Hs~;3sHk!@T!2{pa^U2<7gl#W}2bmm#ug_dt!wj+l*w-iq zL|G~w-Cd#`b&2IRhPkeuYx{f=DaTgs(o~ZGp|uw%fo_Vh2pc-g)-N$-wQy|NrU$GN zg#Xru=B%BN(Y}ytsV1*uWZ?RmC*({^@`I(fn5&!6JaiyqR6S!D0UuSvyLt&=4l?Q|}U z@yg#vGCiza9k+5Je(Z_m{gqDZi?bMIBv|}^qJhaj9TFaD_47~Ki>NOg@m!64Fj`aY zJhkQp#3RetHq%KA8*}|;jXr&*Y2?F|K#W+buydEJFf1VWrW?h20b{$3D2&y6;%zk! za%hsjWGdYYCwvS4^5rmaU7A*z&9nFo7HXm~z@=cl3}2pPqf9R;*vLO#qvm&Jp<0n;q&YpXmoe7&N1`!J4FnZLlnr*5G*%HB)Pq-qA5|?O z0~3^Ee%D(}{9IG?e|YYjqvXH!__|UwGCIsm8HT|dIqzx9O_@lGOOiq9G8~<5zeBS` z&<7SnR&Y&FhPw^@h|LurYHsFNtK-)gIj2=QRnl{fQo;T2dHc@_zTnhbUxUunuNz_)HS+k~#x zT*$vA920|O#YBDW<8m2(WJp?>vR-vS**lh;q~#okpP|Gqk2F6;{>fR_cYTR@CMYWQ za8u>ER7=fl`hIF$oVAtmjQf!3(Zf#J!_z}IcF^hlCfdBARa_R^m*OsX&C|^!PDwg= zjbtD3_4T@cl0sSDf0QWK^F_nCN-!lt2+LLLt59g&w=o*mWor# zz;H3|i(8+t&I;Z6v1p%}sLTwx%=6ImQ*058&yy9AGIo~mE`#`{J zv~nTuW{HZ<-eE!Yr*Ey~chB1Kb@!Lxa&8Qr&o%Xk9;hMsm_^Bq`P!d+(aV~KL&qWA zZP0ZDMGaEPMQOV151nnO=-0j8Va8&mHu`<=%gWJqIhtFdjO6&(DlOYxMgiLe2Hl8q z{41UWbcMdf`(ahEw1+*An6tD(pFTl zs&cX=q8B#RnX3=siK{FE`bN=|{uNN;de0#6{XxDCuaex;u|lCXr%vs@bumC094hCQ z{_vnPNysorS4>WYC!CP~K3<{eGO+OF4~UxLWNI&8gH{KdEczi%-tej#t4gmeYIC^D znjZJQOKu6uO9*GYT}+PX3$U(C%p|#UEU!Uj7t8Zgv66Y=qIu!7Ph0ZCHs^cf@BjVh z1yE@hd8B3_8~1&y24N4QI#EPc=&)OzTCx_~=A)gKoMbc+JyJ#LFKEl!K5pk4-t+Cs zyKjG0kRt}^l#ZG(1XcObeCJsRhKG|*gH*w4cXHQ%yGfRPdiWUZH(GE%-f5TU5CMr= zs6uvtjJTNSo6Vx$E3DEv)x!>(Upv|)_o}nbdjeRSymLp~GU)F5j9*a#1VVY0m1P)z zD)`~zle7J6qoVzN&P;X0A0Nq>_xF_yMWC~thzKzAPhBCra@>7KP~i$cFWP*8y% zE7^>yAle^>1QI~FBl-)b;GofFrSj|K^b0pV>k)lUzR^RjMj7jNd@5>TNY^gi?%M#J z2G}3s0Qpd%QICMn2ToLUAIHWzs_j2eZGtV?i1Pl(dO%jeU&l|uP+@CtI{7*gVJ-Y@ zHIhz2&=Mm`-11Ud?@Eqa9|O~$47I|Klu@T~WSAB?K`xmV=r5rJNIk#7<9U#Yan$lf zRJd>hj6rw9B*T;8gLf0L8fHFKUeJoyMYwQ!V&?XT!ri`J%=Jq(Y<17&iRD~_?&+{4 zm1ews8(&@5Yu#gs-Obva`y1jaAkTZQ7T;{Juu~4t4lE$!!LfAn1hYf=+ z415tkx2q!}B2uK&dl!=^)C}T%&ZK9Z0exPmd2!Da(~??skI8ocw6eS6)FuFOP`*1+ zDs@be$80h65N|w}N6GEd-AR~E!hNnMdWDM3L_~J2q)wCqYjf6V_OIw;A8#gdRMk%X zxWL`nL=-+wY*Cm8QVEl~{fS0NGoDJ?kXLuly&{En#Mj$07dKmfJNx9Aut2S|)wA%Z z>lHQ_Q7PhxNxehs{g8rj8HBR&it0swjRh4c4$)QJNyJZ*OSxf=989OJN3QsTVbf99 z<27f-beu^m)1$YlrJc7Qu8YX6jMczm-QEpfH#j!rTlp?%<}h6`pa(DJXvGfNmUd0VAU7V;UX!`hw!h)P(W+8OH_t*Clxm~0%6 zvcjaHf;OiP4Rlg>l0t{GO6*@DU@Nx~7kA{SQ39u~!O#8i8JzOiYfKcLHLAZ{uc*7jz7B@CJL2lugOND<0T zVQjv&&v;d$NE@>~XNR3nXLvYT#r0&ohyH4c{__y;sZ$-#-|K?Z-;Awg?WL}MK|Z)G zHRHpzuCi zC*{RxrE;p|9!gIrJh*LdFX)jU9hwt7Y-oP_c1p0960rDJtNKo3P79~;eUr5 zJmPoE$2lg`{1-XVq2V-0wvXN+{DS3YnKu$&d2a-ky6bX0R2?3kgQaoNP(8tVqmB*- zMXp@n+!D-({DqWcXMHdUyPtOZn*mhC85B9m`%gC(mituyJIq<<_um<0-@bJj6Lrtq znhz!pd;;_@RuqI6HsQ3>DZUw)Ie_RiBiC*g)mRhLlkHZnVHy}Z2E(5qDe)P;=h zzhk&kWfKlf<2rt?%c^)-T~zaj2>Vx}h`eV>GCUsbk7c!$71N~&GmHRb%dpWYM&*S3 z>nl1-Ud92Gu4FT)axLu1w)ad#pp26gUULUlGv}M&Jp!^LZ|xRbKQiL9L@J=U%EfhN z4p$D|oqrXuhhW~>9^o%sn7aJ$%satC9pn z?h>#MP76^;gEb`VA^p?R5HvnD)CZRtk5&;<0R~m*Qnj+eFH?2;663`8VG65~PUn)M z2$n-NOKvA_sc+peOqR7xur~NLPsqHwf)siHdfwsU`V?PP1&Rv#nTk7@m;VTKJXJ?; zFE>&jA_|O3WFs_|Mn|o?<%D^?~)d$Q8BqF%#_)1JbJ8u zq#oN7 z_cMA!r^MN9J_!2^21hK$2o)JoQ3%qY*O@qbYs$Sp*WUD2twZ z1InLt$%|5H1(68C-|<{?pf{H9s2Z>dee|3XqA63TCh<@EUFQJVNAyf)Cqy>s-x^J^ z>UBMGq#Z4CIyvu~=dTlPS05|;5t*;*cj_$kQvQM#n2l?z<XxoT z?zqVzK&@}TFp^4C)k0=XqpZ_>&t87|7C|&QmmYP{SS70k+RpJCCfiYPB*%j3uzd^w zaL%^$NSR^%b!{cWks1yQ6&Rit>S;;AmmG*c487)y1vm9O*ALGKAI#;-9)v)=RKO6v&_wxDw`i<*nWQ+B}_Vs8fB#968?S=1$;fxmrqm zB`S9N%n3!aoXO=Q5?H8?r(d++0@Z?QVY=p3Qm*-@U63?*D~Bh+E&mG3==x2~yQnPM9v4NUGr z$nE-2dbtP)v(XqlJiycn*l@%?IRo}^<(U_T$KQDSxxY^L_4ch#FxG5pA*iHve|AVP z5n;)#+3Wo4otNITu9iUG8OG_*s^%_$cWB1-|B`wAy1m+YdQfA}qhA+A5dzI}J|jFj zG=q_7O_;@ura%ABmu~32+^#|pw{&K9x8z{wFfRU=H1B|1orTrsjw9ln`;-VA8S)LJ zV5vf9>p~9xNIt$RG8ZqHUEERa<{!-CsXyzz6*%D3M(;bb``2H)T_pUC$lb~Yju{OI z2nTH08EY^@j-w_SJw7(p#Wb4{;g*43NUyRHSXHe^4o0(LS5$qcj}tt@@#%geFOrU) zT}9qX-AGS5+U(oxZL;3wN35L+_A3+d`H}GyRP_4xwlnkp@C#4wtS0X{nzW6*e=~U zVQ-~-HDXwzBE56^^Yj(>_aGgdO-YgUsO5>)?_fV;<`?!YUv7ZG5A9P=vM6I6iG;N7 zSaCt$$be$7nH4`e#Q|GG2x%;E%BaLA2d*==29rljHDr!yti1z}j8DDib9a0@-oEK- z|G9HU%wN55qeKm4$~jTz{;WZzXja@_M*rzsu6;_Xe+BfWhP+NEyLK9wpe}AW^0`k8 zzbp~$%^1^y1z5UA`>J8EK_IJun%vBmwh<N~VH4^tjH#bCZRSSNlfIgsU9P+$fK~Qo-*2nriHbpja-1`3{XyGxorc zLyN}1wwlgCtC_+Vx8Is9NqTPftG4lzuGZ0C^|YEzpB)_4%mAqrpyi$TNof_7W`MfR zyeqE^qq5`*%8I?WdJmKam*IMkVrNX5_&HNMA*l&(sIK~KuKPANN8s*|%55GDdzz@2 zU7)-=*1@h~;48+$W}79u_J3;AmEe4#M%%gBChoj)k>#G(Ci_$OH@ohRj|*84z6@uc z4RV=x5u0NshwOA}~Jry>{5U`L=XjFKdb~_M6u~!H17H7adX8OzsiV63?A0C?eCo|76 zS<5yKknA+~!eDm(s@;VLBs-7hH=jFl`=D**eQ39+5UGD0!;f!do&^}gK8&_(ns>y} z#QOdYP?tYDY%SN{BN%csBpxrkja{B@3QAZiKF4*5uVV-i+ZC1pQ!Vo@tBEwhMq+!S zCA!}OwnA!aS^~W-tHxH>rxoCocNtpw$=w+`c_^Pq8%q1^r<20{SMJrcQXY?ujXS

    YriowM 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 Cnbh+D diff --git a/docs/understanding_deis/DeisSystemDiagram.png b/docs/understanding_deis/DeisSystemDiagram.png index a286b251bcb45b93b55263659a5522174a1acf9c..d737630c45576d35b8cf89482f7e0ed34ed48bd6 100644 GIT binary patch literal 163582 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 F{{SZQ_1XXc literal 188336 zcmeEu=U0>awzYe!R1pB6Ip^Ln?w9uuIM3k2^JIiUvdUa@&9#1ny;qSZA$me|>((ujcW>XQ-MU4* zf9n=rA;I6cS02*HG2XiM`PREP(i$Gq+jE5Jw5}Ogtjga@a9;O8j3B_me)Unb<}hNn z(djv(6kq)9_ix;oEe9I;9mFWAOJF+|k1jc_e zI=i^jEv#TmF9uvhRDACHv*SZ}@GH|JvbCSp3%x|Fy#(3;fp(|Fy%d|JI8?LGb@=2YlY~ zoc%$==+pTDNws~8o1Ml*;J@RDhviT4#jm&t6uUdamrMLeoNqS9yG534BBezb~HJ ze|@kPA6|&9kRH`C@<2}S5_W>15thVWN>;ZFqfDL83&aPjjyl_wtBC$6Y4a9>GLAwh==P2;-*z9|-5KZ?W#DxC*hxfv17_o%k zXDkFBKmsL6%k_# z&b=b%o<0AX%S*KW6XwepQqE9uY0wgCts;HTDpRJ3Vy>HREB9Lq2c9>lm%(Ve_?0EKH*1~2G83Dwwgv5Mm?SeOb^N_nv)f1~ zNHZx)@LOlG**#1avJ>3m=EvQ;@oieI1-Y~t=XE;N)Rl8z{amg|fnJjb6;MlMGfg}3 z*pjdv=XV;DDXy-vW+sih-NLg}W8$CE+X0krf?ms%Z9WT4zzPTCshWWaq_n8;YVmU3 z|K#c}_6iwZ)`ptSw4dHKcZO`Sxx2#)9e+&lD3-2^n`iJM-V+GcTn9aDN zH`V!>#*@r(=r<$x>YdkNixWIDaZR@Y<_<8MUDo5xOe2XSlY;TC{5Q!c?Xmqfh6B7t zEGQ3=?g~}d$|!YeO!S&O$NKvsw8Xw_SG`w>sa54; zHCQ+m4X)4LNtU1WoUT_Uenx|eoT-00o5Fy6wbFtPoa>k$++I;zY3>EmJEa%ri=gc*Q<> z@d4a2Yc=3#2C-6TiMS5g43kO4WSq)#yV%4xu92msALk!MYk_xkM)L<#MYa@;E=J;k z5>}^~2y?r?*?NNRYWnB{B65Qtv~P1J_Xig}U%$DWNDZ21Og%`+%QRjuXumhpTxoYn zW6a5@`KrUbB{#1opM4su64HaiMx~w^D>Dh_B-YYBKpSp&JQKzhX8eR8+6bh6| zNjPS=PX+KRr!rD(DB;G9_M=_O<{$B0fzzgmEy1?G`t6{k{R)t*gxM8X7XFzEjX7-JI_7`!!tzL>6V$V6N_OeAC59Hvx} z#@hw}f`7aF9>X7ZtFg1z?A5CkZ?Cl3NZ#=Kq17~NU+T3qGc}GyawRABua0%vqnGt% zZD3AeFAPu&Gwjh;pTO9k-aE?KH5_>^zM!J45IL25SCek!xp$}QTJyWgMpyPund;1$ zNH@48;zyzCBCo?Tq|>E(TSM$_4iaKodx#Ds%N!v4#d)!r=@0XrQL+=6$QF9bEQ|U2 z&>O$2uHe{XVkWQ(_-aE^V)h_HOg8}HyXH8Gr_vLh7wdlrq30j_w0;A17f@Rr#MykAVh+RJbcj7`lk4_)qO^h z8~IxOr*P!fCP44gzY+ZN((gL=gNoR1uude}k?-TXb7!ygp?qdBJGYCXo~dUs zR6AcGd9zn>e2m#pwpg!rio-#5O;N)tT+b=WX!uz{?KV^gio!}(Wvb-mmgR9fRbn4R z04n>ipe9G4r&L4}x9~yI03m6;d}(h~)A;q8+ciGECdWPF!5<(s?{?=-QbQld zc9{a#NtBMi`RWqHbnx?SK&S&ma(AhU^s-k+-a$O)sx?V|VSbaCSCq1If~A5w*hSQ! z&SE=X2(m$*_(ExQYIZOpAJyez;OyJc1bkKD2(wFDg%+1ZX-=kC1WjmMYi(2q+s$H8)XHP};cd5-u1M*7%!!q*(Q>&DRLYE} z@@iS^S)r9BSEqv#lfbO*sQn|Ov-XN^TCvg!tG#fsbVj72NNMZO^kY?ddb5>}z6N(M zJ(hGst?2cndTb@nSL3CHD?Hluz4!-FhLtPTr$Gq6HJknIs<*(UBII?7qB%^K9S%c4 zBsyrfR#$*2^HZidZ_O(%GhHye!n2M+ocLxo=kNcAh&+`4O++dtwn80`3N%F4`Z@N- zLoW#y291R+%e2&OKR9(( zmF;4quh?=B_6ZnYAV%-*8?+B`>3-X4WLbC*XIVs(y4b?x!G4PjU}<5yXiqEZY5v4 ztUCZi6awh=yneB;nh&HSQ|=QLPYs1dnx!yjQliNjDr8-3OS)}=4z}#|wR2$*2cIKw zuSdJk2X>#8`EU_Sb%PdVt0}4INTVs^+>f6w>vwF;Zfxx>Ba%QVbtO%g5MlRi0p3XK&Z3*zD|pZf9BB#u>>T``#q6^Tz#&|t$G?^`*dDA zuNF^bkErXxj$6qsw>f^wiI2w+(R>-tpTwG8OGvn!>%9_3PE1TpYp_$4+TZV%e0F=r z;4bSE<;na4mDEP(^?_?&-tAa4ug^lAI|@-Zs|EsD$cWEre)Z}~En77Owq+N@#d{91 z{5b54Au8yZ{U$_a&QM*GbF*T^T~U|LId2jqVQ!$R>verRIrAk6L8S`$599pfXkM0% z64}t0Y1QdiI)yd(gp9vOsVxMmje3*3n$M+{rwIS9s8@r0!LL}%ZbvdP*Z=6Up3BIZ zev-LVl+S4H!ZI1@%yrgaa7s5#Kt=;K@W@bmw~hcMM$K}u&X+RTn3~o^%rZZ7FaG4d zm+n~L_kB+8%S8#>vl@OBx&qT$f;BLoH`sy0TL1)E;bEU9$8&^D6|{z;2}`usarP3Zq$0ySF9c- z;-))g2lbY$LHoW0F#8`02B--hxV#*WDJcbh5lJ*Xy>(ayw~$ZUqFEl^^uNML+WYUg zqQkOkFNz+R1U)hA5r0$)?aRziez;Rbpe!+Hif@kf84P2k)Y>52x{H>) zx*_dN({?tHsf3F5WIUHI5sFrRh;)syf9D!%1@~I%5E>d?&pQQRYxNuesGgk7_?pNf z7lUVlYCAsy!`1XGxH41IH~ZM_E-l_6v2>Pt5Vo0$mvHmamX(3c!*BT-JnUe?D#}j% zhci6=cwSI;b{z04M@BlEBm7R^v9_H8_5cTGWGWH|xm_1{Rd4z^;B+4iZTp#!=)UCj zUQhsgbIIIH(dyW{__DSoFYwTJ@&Blz_yoUecUQ_aXS4c+f+g^RdSQ4+1!a;fny0AI zdu}gVtX}yx@eVH?&DyZgPjz!92{%G|0UOO}_MqcOu~%>GQ5O1xs;%%e8H~E5jJ3Q) zby;PfzhX_>MQvKSTx65tn_ab7LH0^r*$L5Du{G7=HLUMMJYPYe>06_RF;Dl&G#;pa zS3g_uKF%hj8Mw!eS>e=0f55XTl8Jq@F z8ot$-TwP%k8hCU?%_X$Ms)2b>< zNkM`9#vE}b9v*MWUvUWZ#cz^#4wrNVIzX1TX^yaSBo&8+I|C)S`J?VB-a2;0 z>`!`hpCrf_#X@#lf)68`F%4*^%=jIyD8*Nd-SS1v++QTh4{>A)XhC zgt5CyY^ds{I_ve|#obT`ao>^rquS={YDwJyT*v?Afza`CKBV&1*jm3s=k_M%nF%4tqO~Zyp5mP1GIhJ(IjDN*dTRo4-DA{tnH!IA z>g(N`_vVex^jUt#O7Fj%u2VHyG~M@2!8yUwQ`Yh8FM8kn?Ktkpc%aEx7a9K(uL)}OTcf$Xf=ZMoPlbGxmAn~_M)2S=6A=bX74Y0#Et-pez-6YMKcS(8{3tt@ zTEH`7dVj9?b@b9X>f^UMx8{cGJVA;`6_OJnvpW<=neXC@`}*wgig~~v`8faq5DD%U z#E?sMo&Ty#L08W3Bj;5*dWO2RMuE2_>gTK4mDem_&WtvzVdh03+~l(n9n| zICry0Z=2zx=+2dK-l|NW?V?HF8u^TD4XTZXY_TDk;Quss_aFQXxOFRncSfl|{jBdH zEID4+f`;o*QBQVFO|`1I*r%dIn_V$*Q|vY&rm&nd876AP@aaU+|1x<0mb6GhYc&0; zuamAN(BHj@vH=-ZLIJR%uljo6zIk9X-91-8+9r6}nt5)lk`+zRBgQ;r(m{4!F3Xk7 zzm;s{cMje2$3pjvTz3Q~4ZRV9llmD(u+|f3F|1{CliTQ`6Gx3}Lx*?ebX)!gREjaj z_nX`07v!|8oDN>!oDKpgVW)=hl|jJiwzFQQ*Cs0|pn5YO%yl`)?SBzZNhj>B(!0u* zXtqXzZp86@AD?bHUZUH8x$Cy}{0|jSXg_z`YhJDhszRO`k;T-VM- zNvNCuhg39mYK-)k{&d@!lUgzRrn!6Do3T`y9&Vro$2n4ZWVH^yC(B?RN%e*G2TGOJ zQ~@xGmj>5=r}?9r^Y@(?giXx(bmJpBcQ`Fj;^e@D#H8yP=H!$amU`>fbG}bzXFo~z zRu-MP+O0*6N1L<6)o$?W&rx8Y&*XtQC|EG^f5u^dL@->gzm3#-eQ7^%RO15iWph6J zTeU(Xp%!N$bl;jvZv(VMGl@iCh)GeeNr9qoinVh12qV)r{Q5*ao7JN|Su`18U5BcT zI;cfVq(PJhtwsDwQ_6K2oG-y-d*kY$8f@>w6Xg>I%?FVlteP7S8L5+0E0lxba$FYq zY~ZaW?S>EN&5f(`BzX%VL7iBu8vWJ>C*pS{%(v6EEFX(0Fl?mX@|4ajZvo^0;4~ z_i(G-G-R96tDcdcFja}=)$v?>48LM+&QT2r%jbP@Z^ok-O9ZeVN>fHsyHz&qrqT*| zM@}0q*u&b>Q>#8|4&(U!J`n(QkmVRd#MOY*%&+1|CK<3Zl`}s{aIMTRke2FBuc6dh zKpORPieXWMZP*R@{``cAkYqtaYCEMoJ4Yy+0cErn77;3WIAs!ztWF}aJzu)l)XJJr zIrCFg>BOV5=|balnluhz)V#U??dwC#Z%2@aj1V0G?s)yX@1~;reNSccv+P9oeB@x9 zEAM)5wir4HQr8O-(!(*fX>jEWrOkVVYf0=@B%_jwrnqWerSH3WnVMy$mWeOiJ@5jF z+MS+fj%w7D-F1KF-us~<0MgX{3}7>MHlEs}E4Zd|khi`HHjil)VDjVGP_7YsiBTcK zOu0&^#`+K8=@U8MJ9#+x$^W?D2$3eyk*|GGGBoPUyshE_yar$Q0V_(^O;-d@DozZV zARbp?Ktm5>Wmi|x#58)LDL#|JNLICqv+8n`!jM9dP)13Zps+yha@dMFqV>F6_^$V% zte=KA<#z9&)QyriU?lwU$IGo5i@_8t(#8cMz)#qre^i2_lc<=e$?#^DIMB}E`h%{0 zuyaLIr{;~qvHK5*Ub|5B^x#&Z6cQ& z@OtuT^)Qe;CW|Gk*q6?GG4YelYCTT0v!>Qjr`jN_v-`Eq^$EV?;4lqKSlCUeYkZay zbYEg_{UC}M^Eib3#IHPNy)hbl2&%Fe=qu2^fDTn%rjdpW04pjh=re%vcSxFXpw$&b zD(+#p6*tnWzUhq@qw*Z5YJo>wYq1)YEavp7^HUmpo_)#O*KrIKfAxW$ZzjU2T$1Fz z?#$E;rtwxa6ri;w$-OjyCGwF1G#g=)zu-K9&lNtt51^mpuYq0;{zVJpnc)9XjC9_; zB*fgAoTS`on${Z>ao3eGF#x{m<&tL0n8vifi>x=@Ohk}GhHa)@aca;2SNW~~PiUJMFHx>>lA}Cf0iSJ!*D2qG>S0u{f$^7hP9#TB$2%|8Q?^`|a_! z!y31y>5dTNCimkg0?fVL!{f)VJg-2}gQ6LGy%5w_=!EWexhh2}++EALq z>?8MBPCgfOUNXzdC+8itiVt>N|0rvJ@?Gwq`z~!N{2_=&U!sn1JQ%xRxZE6&yoxr+ zE)XEN{jN&2=8e`%_b4oD;zNbw)F8sB;?9Te7Nl*UsHRezt83AFyO>lowSQTq zYbSxdn0CioIuZgQV;tgV!4X{{cps`#?d`(Rj(Xj^lcI@?jNO!jjh9J0wc3zJ|GiR{ z3EJ9Ud^70j=~1900F1b3mApEjwGN<1b`YnEz(HHoKQH@i2UCRRy4;EM8d9B$UUC@u z&g`TPZ~>a1su~wDI;X;!7(|Z8D%sSD`(Lg(Sp8-cf3Ar8|6&(-@^AA1vFfebUU`}I zPZu0)h5{g!S_UKE*^~M!JE0$SP7=ZsIn02ld@+E=ke~d!bIVYOV*zD@USykr?5k92&Uo@z-A_kgR)ug}<$C+XO84i)1EOmki1VMcIk3IP^BIVX!@=+n}z~lH0Wm zpGDdG=x~5I7zF|#&kBcfPIA3ByI(~ejj03a{I3qG%m);Hk)b^*8(J9|NO)!J-cF9^ zSz`~>Gbhy6;-zY}`=y_3@CNN!?iCg*Plm=OxV(I5>ZMjAG*rcS4|C7%`3XQ|vch}c zU@vlKX3)UH%~>WVb)0O$^~(Qhi}@!ppN?~-IeqXGFEW@9%6>fBPrRj~NP>D+vF6~5 z2$OROj<@1EIJ??BFI_W|EsjEq42QYn(thr;FfA}Oe`x;#{C~lN;GfFJM}T5XaRcG1tA#=6sro*rFcCySFFvGF3kO11Ue0s_oqi!Aw5Q?D-%qE>Q8(HiW9 zRdL@sZC1i?1ks~<+HElnDPEdixygY&H@i$?#25U=IAqcfZ${QKX&I2MCOztH^r+-b zghh5Dc;XIzb&y`aAqAL{;X$f*`^*DLiX_fJ3_RXKWR_($sWV0rC&ZT@foFZKR)wt3 zd>F;CMmOh2LP3d9tTZF8D5A7}izwGwxDLwfoW-caDou-Oqr#@Dj!w*Nj72?6TU^z^ z#Qu@4{lE2Ep1yzeZVT;sPI+bGlaPa zvhTACF17h0PU_j$y+v0na@F!|nsF8B<)z9#20Fy_toWK~vhd)vx2LpnF44RkibI?L z$go3$U`z!P@?Nd4xU5ywkURr7>`Z|bN3z1F?~Olh z0X!siCO@QWr>uoO0k>NgOz>LBy0FF>u5xp@X|$DP6&Duzsts8(Ti%obvdb>C9ZzI=iA{5t)xW?f?CTMym*=kMZfI;GFtH<J6?g_e^8%k7#VLbxB3Yv=py?)mUzv?%|PbQG&?!*~od11WAd!rLt>VzCiG&!4G~3Vy$lwL5&O zcQnqY#9LnB42u2PGF*SGyU?qgVeD0QRH)k$`#g z+cU58Sn2W-Ilk0+FeM`!vlQ4*-Ss@VOs&}C0iDaeRmwqWez+rg}pHry#NffL{*I|~<-&&xrWBUbvkmbMyBc4|m;Hu)c8bmrMY1?6S$16mLN6(r$xgQNVQ93O( z0DtQ|3ZSpT@kgZ6AjWDG3Wd^k^Om_AoG#inkk4)@^ni@~I%%iVKbWusswzb2NWCIU zuTI<>S6H21FvUW}q?y`N#_G!I4-Kl;f8~syNSR~JeSiI8y1}%Eqx^Wdor8z~(s-6{ zyNM)97A{b0%<%;&it$mbPt>fu$KgJH=Of%i-8Dy6TsA^rI-GG^oc&HQ{NtLcGfTx! zhvL(nwsRTg_hp>pX}`XDcq?lNs#*N(@*};4)1SIGfACMLPPE5FKI$9SH3i7`MyY`O zF>RH@c~ILT$n^L8+OxINN}n)xyYV$e%?C)rBnZ78Zv3dJY>?ZRd|}4PH)W5Dr-HJL zxYoUIus}WzV~@A**k)l-4lT1fzTuL_rDP3?c>SMs?R$A{Jtu8iIcAzf|3d7RWV#YQ z{32IPtWWp4DBR_IB|jeLx+?`dic%7b(p?5L;+$ch+alRm0cG>ZX78mCK9|wnZU9 z{>4^*5)T}5^$sx!;M>~sTla?-xlWc64o;Rti*D~zV$T9alHw{0t|y0pra!4Ierr}% zwme6vI5{?j81ri-I&|TQclu#Kz4OO$!C)(T?*rO% z@138lv$u%{&er27SY;CI?A&SOnNF>eGD$e*&0xGbWid~8JSpbYS~x%X`q#xGS$3}g z|FMQ;B#2-41+ZSh%zfR{#l2dlk5lZr$3U!muBfU1=wA72;9el$nNxu~x+;p=v0$Ue z3bd9x_L_KjH{7NcAmDdR9ZMopI#lI%^Ci;a%>*~W-vIDndbQO#1v}=RL%Q2eFx<^V zU0vPRmz}}^=1{)#{fRm{f4b3yPcWwl+5E%VfEj;SxyS=&CbH@Zu+JqAlaZqNt5nEb z=Ci!EQ%MfQ*cx}WL6n5ga;Bk&>e*|`JLnLf78FjEHdTI^Nnx#&AJm@!^S&r5Z4@K& z$g;QMH!v5|GBCOHA=lU_;!G7kZ)CXoVK|g!7`r!vM1h;$gFurw^tb@-V;lz3MUoBN zkhOL*DM}ySR99EO31NK_nU+zaUD1xWCs)w^&lUy_Vm`}I|1+SE9)TSuPNcduFG~+45r_PZ@>l3L&eR~RLN@Td>)lLLh zu?>bS-SHBFkR$8&zbacOO_y(5H~?gWA;wYsnUXX zce?RSr9^Dn#865^Ct{p%MI7H$f|wup8-?G)XX)>fdj(1XxspeXJHv0QKHJE`*{znG zL+gzk&W_GnrMiM4cVB;Y4_U(ZI_ceZTkA{ItFs44b+G)i-F54hD zgiBS_=WBGM+CV-h6`-qh zjL$+M>cP*SV!{5`{adW|x>OoCpy2Mo+{yF8OGc-bFJXQcMjA?$Sr4yXCQ9*%8!=q$ zI;X!T;McI)jpU&%Ut%Q%0^H)LjlVbM7r|O_WQ!7*X6H=AU!aUVQuMForvGq1-{WsU z?HyI)ZeDL96oxcS3izr$+Gk&;NP9NK>dENw@qwvmszB96lZ78;t7UY!*z&05M1Rst zMDjY?u)x}6cmoQye`1cUbkBvsV7C*f%JZbZ9^dNtv?u}b_;0}Z*&M-1|Gyi_e}(HqH8(SV#$<)v5z!pi-Ofo-`is(w zP3zN4*!a4SOeVJNhWymyR1)Ir*+iq!6+3c_2zPGhp6Z9Ro%ip9+?N1bJGL!o)c3goRufVM26W6c?FoV;;FO_aSn+nGdNUvQY~ z?1Re?mk7{07G-l=U*+<6a^T|FAK|@Q89eB7jf8<}UUUup`1xo9$vWwZ-M>0QL@J{- zb|Ui4^}_Qk-c8_ESOis=^eSRvTBuq0gx$W?o%Wd==aBkTq|I3c1Q*J7IGVPe_GeMFdF7yt`>$Is zL;;eCd-hb%b7NZf8XFcv{m|>P`dtVSzkyLmj;xmFG)VNG;a8q1lZ9e$zm-AkE-Y~K zB?{p1f)fCAJ-^`0<9}_DJ8<9lq39Mzs_OKo#<2mewXO8`Fdmr^h=vGjaWHFTs|#(a zYo2E*vZtO;xSV;04PbQM)Lbh(#a6w{ATa z%S*^fEUvbhXb0)O16qRa7z8J*D=vZY0Sif(2e0q6(H!e!KkuO;$PV@la|!OjGib?m z8Glb9AC~?o$}P_gK@c=A7d7(QEYB&>RQ3Hhb3t_uoJo`w5#qM(^)!4;EU)jKv+lFv zbc5+nHMy?`d!lAZQ+HO(2dtGQ$?wnDg2_buPSWXS7WM&y$0rL#(89j~_!n^u8&c7p zWysz=h#xA2DVm6gC0M$6+M`{`3a6FUip|d_0>@Xo1=ZFqPHp!h4claz8q&4KP)Ivm zQr2RAN3zn4ixpMNoQLz)#|{ANf$ z^LM=jmzHl6|I-0{W?VEf`WrWBJ$aG-{q%~Pj!Vr7$Og1B;>b>9NN7W=HF6Zrl2Md? z3ck1U*f>ER|5K(TWmB>^H9dmRFd-3{6{vEy)e^U)ir0|hez)^8e7Mo&!3^OuhV~=) zZV;1cq9rN4V36yPO*U;6Z+U0$yX;&Cx1zjaGZhX{@pq14=lA$tE*>);QJ18YzR+@^ z=+X(3!R53)qw(Q+7=8>TP8^I2fRyhJoJ`gYrV9a5eR%&*#6$>Qj(VJmwvEi`8GCe*CO`F9DSrBB z#fI*=;g`7SVbL6fdCbnib(V0lqb%@op*PzrjhGE|9N)$eQ+v$&fo;$of6IsF&VhDK zwWOPnf?3{FkXCF|v}%ent1p_}Ck(TdoKJ?~8G zUh(&<=TTudU^_&Hn0rb97`LE#!w(1|dG;ZbJTWCn=GWW1US3EXdp>91z~<;q`Gphz zNvzKSD}Q3gG{wksCb{o;;l0ivnKa zTsoJ|S`WadFDxoiV2z7Ji#iiYTj#=Bg&;4$y3bx;MzTEEphikXDtVOn8g&n8RoFi`BzN`lw1La#(3O>A%t<7{*!;OjQ(sUpid^Rdj>&+l57u z=>>rkx+AJh@R04jNq5G;3*jg=WIBz|NL-)zm^!n(huTG@%(s&J&^xKu#Dk{>gJgax zTd*v`iO+u1q+45Gg53fuC5(TP#yZ2zySdmjLPeUzUvT)-js?)ujPlY%t)$4~S~c^c zNLE|xUv6^>6Te^$o144gQx3dTe*>7PHhL*Lc^T%J?q|Nj^%RDWy&pGKl;n+zFEkVb zG7-yLE&_JQ%Dgg$ZBU6eZ)G>1*!GsTIhB5Rz>J0Hx8L7;NGjUwhP4LUZh)EpQ>cDq z?f))RR3<_Xj*?CQ%%&=vDhuQ6Idc&wmD6Xx)0m8_oaGddi$ zYGCg8uDR!V%2u@b#M$alzGB=Hi;8x_Rix4+4PWHh}=zS$S{ufgBB@Y4#*avtQ8zd0FP-ganW z^>MpA8|9NvUt@5#@BVeyNufC9vU9c!axm|u7yh9-qrvup_I?NCL#=c2=I(IS!|MTlhpDvZ(t_ELWhv{k)UUVq7D+H05T)n`?XCvS z6r`}G1qu|>AeR+Vs5stgGw>-|@}^!y{%=5&!`f}5Y*qr*-mIT{R zE)|_R@4|PS3^J^ttR8>O;Imf?0j%UmiTjrz$i zDHHo;5qJHL?;fU5JWNd%J6NV8m048R%ShHDSN8 zdZ012$8LVfrt#U920Gf!t55UU*Go%Zo?z17!Bq>4FC8MYt%p!wVY>2h<2WjccN3}V zg~}jJ%{h;iNZ8hh6Nlud9Gr?u+ezs+6wV#5(`b1BM_Hi*1)?*SG+y4^oVM=aG{nqk zJ#rPk3dn6}nd6VIr!$pAVm`7ts?L~xt|r@YsOIm+@4TGY5Man>^7e-G~p<)6-qn?TCc5za9@%wPe6of?6`RYxuoW z_$^e*Mg=nOR&^|gl}4Cn$%pRLT?}GUL>OiWdEK)_+`Y?ot8(Ap7z%F z?}AzJLw?j8`L3Ynij4cfOOsa$g7vs0E z(_%^$=%_J4cwy~19Z%^nPBz)oY^ueu431AlslGCIXmC$o9+{;3Aw^y&&cM zURu`pIIGP^A%qD%FHKFwS-<~H)qQ`VD$4fOVIhUB-C5Zzi`?UH+_W2xpYQVnZl7y5 zm5B;4&97PDoZNx_+Z@jsX_mZG$FEuj0Hf(XlxJmnQf2)#RB#T^!hvuhKc9Q-HNd+E zlwCGDdnxbkyk4SL2P?a*m?*#;l4)NLmqLK2 z9bLu>80xcf+}xqhg{`~!AUFb6-?Y`!q_IlRdmtpZYj_+$;?Ra>TT1hXFD7u9EugcW zHF@FN1=Ab6uV?;hE;6q;V_3;qXD%dEV7)A@{TxEj_aoiun{p_oN(NUY7o0fK_Xh@4 zstlVgRb{QLT7{xXP6hI};8c&s1sQINNhQvPWKd?QN?onP`@Rdasi?-O3*4rRoR*Pf zXtd{eq$-V`kvwt_cvGxZ`s8)Whw`6+!}lW_jr%Yc#Q7eK9BWVbnpL> zBOaXn<#y~{>V#oZ%m%>5hGd6HBrpJiBW1?(g(qrJ8UjPJM>15=snv$(IHEs6!a2kr zliUA|oFfFw$@?W5PJp+9=ahy!T6gVJ7`mVFyHl!w>f!y)Mk(HZe3e3+!_%iOG;{?Lt!b#B0yte04X>3rPVg+F{@lQ7$1m7~k8>%kY(XMtcq1jcv@EkOGL}7I z1h@Y_i9U7yifg-Xzz-rdmfu8cWp$_9V%tthPre4VNL`X(w(AZ?v*O6E7Yr^1S+0Xl zE>i(RdD3u!`vq?YaSZt)nj%uS{<*`}L}?I-&tt8xY)XC@LD@^?&~0J#$RshIA9={p zU$jL6<9@(VrLmZ@&iPcxk`G53hvFsYKTzrQ`<&vB6q-&PC(XodA)qaH430k2x=+BM z6b7wI%DON6lY9Espw+JK{iOg(or!79x$i8ThkbB8E_f@}Xl#bAb$#7uP*c?MVC6LR zBLUc#4eimCFu&#zJ2QK5itf>+^OTBeLr7k@;qt!j#kvd}E%xo5)`woLTHmSH(>=aSJw=3x5SbVoPzLV$>Pf_pUZJ=|NfRp@QtY z_qp8@DBe);@6n>2MYUC=vS6YnZsJ$gb|Tt@ua^>?tMCL^y&kNt< znN3#HD*L%cMy&ZPP&TyH@0u=HYOv=@kO@n9X7L9JN|{S2^;mhR=TgY1zC-y!=IyrRL(hzWx`Zc-Jlj>cLQ03K`{fwO zCsQ2G|7BFbn+Elixa}kqTly;f^7p?K`GFmr_x{nX3JJq<%uqRkjI1uLL2-6GoQYR5 zM0i|(1zOcIBk|&-8oAu9k}ua@r@Ivi1nWB`JH6wfnu)8BPN3rHWTbj4-5X3V{q!&5 z8SRl>74Lqm=ej}U}qXt4jXDTqLCL|x@~f+GnHXO9X6upR|87d)-|vo&TU!} zL-X`2omyd;H$4pYUo~{htvP2@4zClO%&@H3?-#h`24p^BgWr5X!M9Fzfr2iI{{pG( zJ)&fMnI|BfU5SQaXx}~ba?uQmuTAJ5Z|+UIUmR0u67V$^8CSlHMY4eS4 zM}ZiSSngRe#k$Md4g*&nK6XpP$vjzk}(2 z-=;dT@UJBmVN9!iBZiZJ=1(T6#yJ{NO~S`rE2dQp>p~_|mR05x^p-0HeSTW&P7+QM z99yWehK6tuF}}&hV;XyO*R=JeruXgLBEEcH=tIqH4EnK%8%@S!v4-8Guim?H3e-%W zkMHBY?Vaa-WyTTZlc}#YsnzcUL*D&OK`2-gt(gq74eQM9yDe+(9=Os4cIY*HSG2Fl zQm-W|yTSW`_uKeK*yE3)%*dyFvbPt;H6MPH<97*qWMFAlGNLXa^3bcxQ>YxiSih7H z#)+}c?P|OOVUE>;6LAq;@v$Yy+v<27_c;mi16jEYKMoMbzm6s^ke?#eXeLRBcs8=i zTe0_|Bx}24=+9`4`ga(Yy9&pm{_t$&Is|^EQ zCarmsh6p%V%r)DFZ|2jEH^-&=1ZZ=^0(WAuef`Bz(&|ff@3Sx6qntP8{u2#%M5d*( z@qfogetK`j5K{zwMIH8ZGI9l!Pa~@BieHRgbSx1JrhgdH%_2USGRmX@(PhL8O>;Fm z9`}r6iN_zwfR^ymsB>6nIMM)oa`&tr6*{iHb8mZPQ-zv|E1Ld(?iE(<+4Y6qC{uJj zS#F(SG$N01l$1DQ@$I)ECb|pC5}9LrkyECxlyjyW^w|e6qd1J@A4T z@~|=AUSXL{c6y3=YE94HV$Z_ydaz!QC4;r0^LW35w641P`Lki>-ieqtwufPzZ~{Q3 z6n}2SUBpbK6@Rr15kPG%Hb@5UC4oB|kl}nHV!66s?2%CGyD%`(LJczCp4APs`=e0;&LN!`c9 z(n$&)1=HgvDyw{yc5e5qQOwK7=#-1Dy{Ead{?7OJZ9T$li{(qQ5XEn7O-hS*3>Dmf z0afyM?YIhSe(JR&^PSr4>5_(i0ksP*f;Q9Ij`suwPWeYQ?K9cd_fBd>iaO*!= zuDbE?+h0uSqYMi<0}TS|3%xdCR<5j7guN^JmddO}yHo}jgj_B}0H%+*v`P(TUgY{F z`e(QBa_|BaGTk#h zv(~>B56J@$oH|vt_pV*%TW>Cclz+fM&~}BpG?%hk?(jajSX@ys%}NT@wiU};sjf}? zr1$*5YsRF%vQ(ezUDZ(CSoS3Je7qi_x12+RplYGm70m$Y2SqhSOxJkc*d}B7>Uw*U z)50`S8kX_#It*$M4b8rso1ni6MYFIP%(*Q5;4mxEHTq}chlzbVzm%}PwTqLRT=5#= zR~ypFZ1`oc^82+4KHQW%#;es^da{Pef40c2WP|v3ddFr5mNi2Z#d~+DoW36a`5pIp zx51Brga&m`NIJ~)BmZ} zjicA+`W%BP5~PQhPI8p+(H;3LM%Y<*2XucURM_6qc*1JBY*%ImVY1PRl_1Za*L zTtCJ`m^!i{`Sp}o=u$b^4hLCSY8a-jm6A?qTDM2j6+Pse`0P{g0m zQIgL^MsX=?l(YdS)AY7qNRU@iTlaO_Hxh*z4zZ1$FqfnvQ#LBDzD9x-M8OfH$r|6& z_WXO8!Y0N!48-7V$XAnWEEQ33k)%o%CDz?h!AlT2!nl%2_n@q9APMN}%K8+CTq&Pg zz=fUng^*EZX1rmiHcd^EVUSjuxXT8l! z%@w{+hxS##?XhiEIvLC}_(o#o*;r6efEC$C=(>D2fj9251W)6tJ?!cyB|uN?nkv~T zpCGpH05`5;eL}`vQfQ#~%^#$o^vX{J3*V0Xt8P@LvU--;@08N;8w1JGf}%67wrn1W zci6e<*Ebi>vziuCf=tlCVaV}nebiub6!5oU4~B)&?6tnJgS#-~^6iP1Y$E3WRK7R7 z{{LhVCU`_uO4RqKN#xRw3$FnlK9Tfh4yMh*viAX6v%v4JEp$M<#uRL&zcpwDM9gFkj_G z;x-1tCocNhy)Sl0B7?dn&}D$aB&AdDS{AWH-hB}t>nMY=6h+LRSj&uZo0eExpR%NA zoKB=tso@q10}78TyVx7^++8%I&m^*>3(V9h>EqM-{v&?Hcm2uE_i&lukWdSAP~&}S zL<0v07ciwk@F}4QOQ4Y(5UOg( zHCmu$d@z*a<_vapSlAgOY{)7oFf%YPaQuwAaO}}CKFb!<8umqmfVrj37?p4tXPX24 zwhBO|S?h{8kbc8vnMI%al6nI+3NuK7263mM(`s6<39e3$w`>v{8x#~R;zbZ*=Yazz zGMzRt#=Qw2l?y_NF>P%_MQry(oKw`B&NJv1DB!PkGS^YxUm5)zr;R)=2*Xp$(9K=zUuOD*|%uW@!;G8me+)j*--zntOm zzhdwSvfC3IqJsmgjlPK?;)DsP19>E~f42esgofEd5GL7VvSvG9t{bD+*jCoo)DCeu zq8BR?nDekIrJUHWC@c5)SybSj=Mq;GKEW;zjrsATE7zC}|8^GDcHd(h|CG;TQK}%r z>!(}$1@WCWFXyk%__?qj&@INut0+U~6pd7@I7ryHSvn=Vazj#6moW!-gT*yoZ|?qZ zQV?Xc`U6WWri6HXsfp*kA01wOK}(BgcQ7)5I`bA7#}M7fe5DtmbjCNMkW;T2cZhnB@Y}8%K9&c z%O6XXX>#MtL@hU=X{@zY5g}?nTbqX{FFyvfah4VoP@jf(IVli#p*P(%J8_3Ux%t&x z??IwnN9pG{K>sO(-zc#EL*07fwb|N-RG6phqo;moRi7zO+4Hg+9lM85h*gJsdkskNoytxn=>B3`o3&(U;FUX zJhX^S$P+Mf@E`@%#D25qE9~PWzANX08UlQYy;2B*q|M~?ml}gjeID$;xdM{W&B^Lu zq9_NEX1aBdCpP8fz#ky>tuj#t6t^Nx)ePypr~x>^?Qh<-=_Dzza?>1l%Vys_T-VpU z?Oz!&Q5^nw>$ufu@g1+{wpYQo-e62eBYkuC%YdfokTx3&YI=95YN-J}gYS)Jrte9U zGavGm2qoJxuJ}GaERv;?1NaClBq|C8zoQ_+N5SJp`uLR?4~P2@V_1OieImmpPhdWc z;7;r+hGY4n=KlFN=%^v3=kT;DPINJY?47dn8J&PvNug;sCZGA#`ntZfuOK%}qJu~G zTi$UCO`x^qdc}65c*mn`#kaN-H6O^8)m#v?A*Zg&SW9oYll=!i3~;>p59DJ9p%%nX za4UD8J~Nc)jasT#-PdIXk!)VhxKzC@ndV*}R*ek%>7;C%LgqrVnD+THW%IK2m{wot z<_ZHAA`#CYTJeeB7V*MnTjs<=n9@4F0G~B$7QxJ!Kzww(~JK3JCu7Sa(q=$EcznC0U;1RfCeXiraYoVLd z2|`tV$FIg1qt?2RM2`I{SsmeL9~$N_hnuf0t_L)~Y1Tep_ETd{x~qt6Pu067+wRLS zU?n0X2}Hl~XJNL-utX8C+GUG7PobjzG_xt`>)TP`b^9-(cDhtoBHGkXmI|s;v1p(? zJ%U+0ro>G{E=B^PVV$@DMWT~=58smFD1X1r(y_J`&U5tSIT1h<+{REZszfvjQfN9u z%Nf24r!3YTI{@6?=;NCnbfUDKiNN8HPStqEw;l+)g2v-}&i^YTEZ`6Xe}{q%D*HK* z1V1;V>M~)zI*8um*iyYE|7*N9ry^g_AI5s)mi!hr1#7j5k5Dl>=Rb>ZzS8jh>ew*Y z&!LrXd5*ufF=#&?nKxs;yu@(u^B66ao0;$TPP=~Euh1z-m3A>@35c`6!`=Cc4mS9O z)UBv?H7N99ac05%ZATUPrPr1b>3Eoc(WW8Q+=lXg4CjxmE1LtG(B4=Fbo~Os7@c%$ z7yS(|jm*-LyiRLw6Qqh02iMPhM1wPq1v>p6ggP!)(3@=KSXtu;nrT&e?HdXK! zz5QE`UojFSO}n1!sIVfy+6|jPH0QPwJA9HrSH&35b_A}z7i-+02896A1#WvkWsz#} zrJ|sRH@aC#H-1YcU+dNIlCKFf3!L;$h4VuNPl8%mb z5kjIj40ajSh`WBE@lBdbca;3k^Whjdl{{~rX_fZRO`Bz(f4W={C9F=>SVeHxO_Gh^ zJx3$_)B1tm`Bx9&FaSsvyS03<)BU*?Ue!Z6**T{=Etcc z4;5TI+|H|Cid{Z`i}>0>j=)(Mql6@epV1OT(xREtqbrT_cOWx?-9qOzXJhh{(NKauJ`4<&UxURC%UTj^`QwDgl;BEMU#pBcTzNF-*wpFZ(8pcM)NF!gG;deI$Fl=FADPjvps9^2=W=5P67x&y zZN|-yEWk9#bbvHvdDxKh9S{tlu2-ZheI6mP3+wywaR)m90Zan$T9gcbztmbD z!Ms!av=X7I;1sgLWK{g9sFgL&USrF&T^rk@tunCAwh{X zoV8p*X%uyw=W+P|F9vKBm&q{#UppmcFC(y9Hy!IBaVg)jyX9q7G-h(}*Z8FEz`fJ*N7L>n+>m z9*ewX4eeM0ELLQ(I991n;V{6tFXxdJ-hxs-U(PxjY2_!Y z;`K0`!AE!m1V0ZB92V@Z|Cre|ELa?4a>c9cK=#WXnMXfBhrZ)kOg(K7UWyzdtf7hBazn_q_!LPF+TEv~Fk zILbB==VF>l5_X3zxD1>3PB9ueRZZ_>#*L^_3m6!I!ZB5v9r1gj)D@WUkn$QIFgV4ma}?3UFl zVQ$dDD0_P@TB7^3b|D*u^yDXFt50tAY51eSkzI?jVZe304^B(n?qrcQDJ;5^5PFP( z94c>4a>xmsm|`$tfz$nz2#APQDh);4+}t$DZ?Mv~i=3%{j9u90yx}!o9U7fgw&>33 z5j1Mi`w^H}6689qI_VSHJ+^ShpeNfT&hD+{xBxF0fVqEqdXpav`2JIMSCMGiu#8=Ik$+EDNgoL2WyTm;1Z7UF+t=it+ z2S=|Yh>ndvK!8lBbVdzaN*$Nkl!Y3z;UqCdjkL@t zszu8wU-gT@W%F70F3#=p$J@uS%G^>H-VT=8JBa)e2$uj>bG8U&Dzy?)N;&Tyo2 zrq7`fpgzV$5G26^&JS?20{SDcGTBP|LCj{aK)DFRB))Zd@FdQ)Ouu8zq@%f|#n5;t zq37o}A#WK>{iEwjLnQ8acspU9Awth?`TcVSJs_#=;du`!5-`EJSrlR-EI zy@}+P?mk{RPl)p@fR?c_CnzXLOyyc1N4SENr8_4!E;En@=Aj&Z{SR`F`a^O5_y4}p zN>~S}XMpRC!cE)h6H6ewS34)>YkjZceH4t(=M_Du#40K*W^!rwuey$A)=tn zUra6Ova)P52x!rLzX=r$60zU4L;z&YeK_0W0$EoA(x3W^LU!Npt!z&Yga647f#=Q8 z_0HDsjqXxelcex(3}FnlAe`!440cI!=BorK?ujg>k~CeZRf7g_{u$T(I^My!gK&bJi*SOl1bla`!@)+MDrLo|r*+H%r#N!r|Cli#D8QFK(CZ`heHPOf zx>yz9Ye~90F>XIjt%ycY>6bg8XkT9R*Pi+fTGH+%!q`PN#_`N7Dca{WJR_qCg zi6ez^w-}YTzeE9}mHpl$eD=*($p#@yiu=4?Dz=*EDLw4gA57A?*M3%%grG3lSfO%o z)QfLdVg&AD+cj-Gq5=%dG}WI?5;emIb=NR*<-YF1uJ7%&J?UT{lhMrm)ght}x1BO! zqo>lHq5zNJHu=p*cInWS08lic;(p2_43F6dx}=HM>>94o199;p%}0TblaFP%W9tr`RW0gNCr|G`VaIOUu&A`MaG&*NsNFgb=X8fN+vajv!1(6E-}>`P?qV(S^nf8;B(i-)n4etDf>KoxDX-3_HvGxsjjN4CPuA!!HS*h!o&?31)kl4Kz`kj z2oi$!ig7%X5Qcpq2lX^o$s-$LPmU4E@ivRUGk@1e*Hr*LXoTM z08T;wYzA2kHU0SE>aP7kbcul(+8(~Q;$42)=~V1<;nzn@s+4TlJI><7;K0t0lhZ}v zPgo-;Yqow$T}5AaFR#}U{J`&VC9PKzHtVX$Q*oP?NZ$Mc}W0!+z=5C+O7ylz@CrHAPAn- z*QV+3CFo>3E1$h(g9k;gX7g18Ko`kMqIg0@IA3H2W&$Gg(m@$L6W!8puN)twUt z(mY@wQsME;wf?j>3f}kEMD^N8hE>PX?rCr>Prmyhrq(hhbbT!||MUz_lveVYXkxV+ zD5AajIzbRf2RbI>qgV>?b>ALgCh+65T&2@n@6F;U2bRolyHL*;t=8enWh!1w#3%9Q z*;5BbWeqt+&k{kWh1BfbBH*eitn;Dhv-liA&NB44whuz^tXSBg1)BW3MhCpFy* zMZ9B^I=^<8=_v66jP331pYE?HVNm=kT5iG=_Z@hdp{tq=gbjlV`Rsu7tUK1?Z>vK) z71}L#+)4!Bs>Zd`Ew3yLp-%cdjo9TWi^AU;#=T&0Q!M)5r9R62jM?~i98xUt^4OkY zI^BcY3Q;re&Sp0=NRdC>#%usvR{@{uR_Bj>H!w+`r=w4@$CZ^%7s^C=-sN{m#80s1 z1<=MHFc_g_;0HQwigo>kywIzD8F^mLkG%HNbt8=P$)sT7b; zs{~iafNTl|Vfo}7>dZEF+IghFo@V>`wB5PZ-Jz6Oq+vXAI%%f*j%K?>G94Sqb&RFE zn%(EOspj=@aDY$_;RH>ys34wFj5&Kthp!@i@PjBZ;HW67G~UHW^sYPpv=|qBNY5`G z3kD9~1Pi>Qp()|fe-ypA;!&Di()CVs-kCBZ1}3^LS8P9DLtx*o`C+VOXK37pPMMd; zwI|%s>L?v1WQ59t8yL*!nV6fyS<)x#j6fckrmIyY_s<`mh_U;4{SgraDeH|L14;O? z^9{!M$AQC_G17U(-#7&oG5%CgGxF#7trF#BW9aB>I|29d)rYTn0uq0f`oF;9fFbg8 zP{eN{sS??QDUWP}_e>UHiZ`uF{;Ghb%l$kEUQI$t)s#iduxEqU^H}-SmuTk;c2nEc z67mBK>`fk;?dDs%a?E_?ax`0(NW3#rQ$=}EC|?fWG%5?(yuIAau;aaO@9LFdmvTCC z2{Ylu>sM_U`QHj#3vc-%+Qu4V$R75;c5x6}PO#Hl#{i=0i^oZZDrf*>+%vJGXOAu6mWYS}Aq@sPLW zTy_ZuDQE_f@bcTg5;5BkhRe+jwda9BN3Tc9yqTn5j!is#rANj6d=?_-Rq1Be*H77; zBGaf68qKV6MfPa`;&J+vGqL@6hJ)k^mE&_j8CSW6ZUPG5JM74Avd8gwI6;(6k1%O; zjlMl|;6AqahPwNNLM8%!U#-7>7KPFs;QqpQ0#1z*`>bDu#qv3yd&hmrFyQ)7ued}- z6YbylSed9h{sBN(1i>F?XDsQbi#20}1rxf78 z^ePQtfv~DPS}IVzT<(0a^_L&tc{*2*I=*X-iqeHkY&8@M`xPP$OJLe?syDOi9O~KU zYC~f}*y32yRpT54QlPXSp!vjd8N+?hLnfd=`*eJI%3Lv_a?fV3m_()jdz`a<^B@Cn zZHl{TaStb$cgy|X;r}{KI>z(nuRk%9_b7-&Bv;kbdptAG=2+c;_cMTZ-~gGnrQZ{j^|fIo;sLL6fRPTN~fi!wXj8AchC z6UhY|*@sKA81M6$rK>SOaY(1Z#yo!GUc2lQUv#DsrLX*h8m?BUW=U&3sF3+7AR3+& zc7m90_ZPNn3LqX#euFmN+!~;IzJ0!AlMYfrU3YQz zMYqKjyRPqN2W61{iy^Z7 z%@8e6`DwN!a~VEXf3M0WcQKA67^BI7p%A~`Z&IYig<5qkNN8F}*0XsweNi?=6Q`jF z#2ljKSH8k79VeX!a9%F!g^9_@&6@{7GakAy=x|b!$+iKu;v+iZ(R#_2_On$z79w@EZe8zHCPPF ztbU{9^wKB(KMfz|?*lqOG119OKYX}hwaiVi%)K_gJ>k9`rihqEnw1R0w{@E?vY?<5 z=$`J7d$BRtne7kx?!m@so`@?L?>E`e-Xr0jsxlNRxfWmLMQn(~Dy~XF;f0%R)oh4I z0KDgu)EAY=HZ|T}D0ET%oYX-(-oaK}qco-_KGmGBME-~xP#oCBtFlR&m>U;KhPa(*Yv47?j`Fm!t=l(xVmr&723(!MmhF{bA`d z7*SLdp9Pk+F>cn~d}GM<9UAJDZ3m&=({kKU@qIrG_&0}EmUc&Xe~vaC(Rh&kmg`$u z_$ySDx8$2jgw|S3(^4hZBKKCnzjopM+Z94+&+2{k!CegeN#+PSI1X4~Xb z4-bi-_KOtV5X!k*s1j&w7AVo2dAm#iKAnE}If?1N6*WhWFMp5j-2!oQ*!yNP%@ggui`uLrLLCg+Oje+p8C* zZZ|>*-Fzw!?_NCo+U4203?!@4pRA?DGO2>>yMU8qqsWj#*Hv)J#CO*_XciaTmeE?4 z7>rfGXC&p+D&HBd*wy8pnAfA881qI@LP~|m=E3AxhzHKGGbZ?T(?AndIXL9vByJT| z>el4aAa%e+E~7+84BGUPveJH!W*ylZcaGx_nLjuq!K^as z7@SM;j>AbCPkmT7($%wlS)y51)mMmlY@1!;fT7qcCoO$lr&Z2*M|Nv?x0smYubpI2 zm4haubccoJ>q_P{ZUs5px#CtqMpk`b3_>**U(T~2rmflTb*K6)B?O3TdqqN)zv&!V zh_N>-)iPJ z2aGoc&g%;kG8H_dgxw@EA?o)T4efwJg#NvW+sI_Yn zLMTEN)!V>;^poI;Q`(dWLM=@^EN>b6X~3nU_`cbG?NR^v5tnUuS}ACCjHc3hu{vyR z$&hyETT5)|=*N=L_HiMY;ZgWlEk#1nIw6dzqxYP!s@4yGe(;d#H2rVdh|)x0CxVwB^Cz?wEiY^#I$xc=!)ylnqA_X)Y!#Y`-oD43y-<1u5^NF%;|#q3ZK8L2=@F`$^nhyl=W4V?U7y(l#`1<2XWJ zE&MRruPitmr5Zfs9>~@5a5{8f&?6=yIyyZKVeV?nCEFq6Ul7fg-uKh23~y4tUt^ag zS4G)IEh#L7uS5J}y9_@LfZI|>ky4o8U%?%}h^C4nfI!G+>ble2U|QbnUOvj(kD0p~ z=dL)SLGmFJ+l$(%!9_^_*z=6<|5J`=%wP)#1m037J)Qq3Wo)&SX)aE>JyG@MuDW?l zaS~({OY-Oc8Nn71M;)SXzTkb=>N%F_dGl5cRhMJ?8BuIe)48bGS8R3+(R9V>fLFoC zZDGJ%6i#GOou%k~Wo@cFJB9c5vFG8Z^X=w^>{+ejJn3!AsoLO~3R9P)s(Tkp7g!sO zeoN*YL?+HuKDN3fJQu4we>Kl-QbV_Aj}Bqgp+e!!kND#IwB!StR6#POzUdY1RbG@qh^xrXBpI2`f7O zYz7K8t1LtUX3~&yh5pmNl=yblmt+E-m#K~yAvq-{&Q!LjGU)jLh1b;DTp}R^RvnH= zWOOw8)JMnEo_{HjWX~Nw!5+LZsN3%4p}F%#=g9x-kK~2 zhO9^tUa8EslZNO^vYLnyffbEnk)X+0wG3#VN*!jXD)7;`J`cqrFc_F~fl! z;yNDnaAdS??@pfx%pR{Vj#5>x5r%*3;Yj~e$OivCXFpLKli)R>^I+^PwjI2^XK$Aq zackLHF2Aj>65~Ey9_Lh>Ru$W}7JbuWm{Xs27(oz$l&fbAz8zY;$>0Z4t33nv{zQMX zPUl?||Crzd>iPg4K~8a3GTdCu9E7%qCD|0sd}7#>{o+$qKK<3bOKWq$tTSj6@B!jP z=_>Y6+tM_AY!6zNFHGj50yu<6vv*zO28;K#%gR} zBHuexUcsDJW)Hwty3WZYWstAea$?+`8@as8^t|THCS(~ik#8~)m-p{P;rkt68=5KrrY1f26A#_#yn83rwm9OhTFLu| zhha~C*w9?8pn-CViRaMoo(uPNH3-rx`7UtkJFOWyiGU&VPj+K_3cH2l#uf)+#eLd5 zO6V^bgbxLo?6MwcU?R5HV0Yagsct^oP3elTqXXSFDlAB`X%Hq)TecR?T}HB;G;F9T z=zl`lP4IV5S`xvh<`_-DZn;svaa^Zbo$vQr=2)MrJ$2=>+HU99!{q;&jt4WkPaYL% z$b9*ANB4CO6a%bo9F!>(1uvMMGMEB56w)1}lMVMTr-h_AovS=DQu^f8r+Z}+`Z?Uw z14*=&JB#O!GCKUPRv?ao`w?kX*PG{ghkTygUHUYlZUp|RGM3|PUK zJP7)^MR$|yALu$v#BK(WFN|8`3j!u6JmqRS)2~lgZysyL1utf%eLW8-@0M$0A*Pko z%&1#<MLHTI8Ti z4C-=GJHUJPgO^w>lzv@Xi>3vJLA$=R(4J?aWu^DP;JUG>Oy>>(vE5Jio)YM-L|YBm z51IHk+4Pi)r2m8FGy?ucbDns!1A1zE>|74(#6|dN$raIKi_)g6d_R}R%vL&=Pkgp{ zXB88WHof8_6@!-Sju9by3Pnk&r0tg1fQZ?8vju3=#hyVEIcOOwY7`Ops+55TvJ}D6 z$UabC;$$~gAzMZpof2lPUfFljPY9M zeYx!Op&z9?*oO%!@e%clHEoV$SJh&FLFpuIypJXzJJSZ{wYmH z8xe@vr<{=TPMWKmn{FLkFObYlTPwUEN_6J%a~E4C-rN4pTnD2ao^T!}Lar0ajfv?& zAZlxcC+pc0M-IDjvOo5kwEoJlzd*@OCCuL*r4u-}FBTn-X$~VcGxJHmRtKZk3&)Rg z)Y7ol)lUv{+O<)<4i~ZV-bk`16i2YNnBym4fxj02jPFhnZjzr0W{M@6t(YxoiMT7# zIOfx8i=Az(_ps#C)Ric{$Iz=$=RH^HQp3Q`o=_3(-cg$7;3+Ofpay)6872Jk*7`)q zfm)!L_Z*y9F;rpJcb?=z2S@yjQfwR%&Qe8&?R)l6TmujN@ghRBzktix9!IBkR>8Lwm9ZXo(?5Q-I(T&U*evzcGMvYLT|sz z{r}Ht-lQ&;?olBm79 zP$aD*47nA=lS6Zf)e)bo{%WtgySr1|mmEhs)jS-=-=aq(SE0NcV~aIxW4or{e2@*}59*`zyQo5it`>f3t04^Gm*C%hq$@52E1xU)T% ze1BRAn=nE)5|KL|4qzrIrs7OeKIuip1{=$B&@3uN_MSE$GVwM!q9!EbAk*APl#Go( zADV6Gu`wvxy4LqKgIVX|HHE=ZAV^5dLi$*XU$f5>_y86O32A_b^q0hKf{aMvWvNzt z3iFY(?7ryk$aI!0P#11Q@F3bx&{;4K?tD4RlJXopVKnXycf?UQRxs?; z=4{b1*#0@_ttOp7cRH+o&pIu=Pm6brwEI?Es$LEyKAz|J*@paKU%*y9R)RO0sh{Yt zJpD_=;br(Yk06UsDrZI43_469lm2upPu$U2xKw@zUTlpFJ4JCk!r{tE8f%OsUPk;r zt(jJeS6QYLbcf(y0P zQSNMs`>IJ_m;95F5Sy%r!M)t9Gdg%dLlV!nnRAgtTQt3s+ShwC2$8v!1wUNmBHPb^ zoX7?~coR+thT!Qq)L7SL^w2XH4iW*U-7CGb)Bfi)IS3VVRI*?yMiDQys*w`k2Bp4l zYr@1lxTAd&RpD{0#+!|aXzXPD!%sVNb1NyyL6|;Qsp{X^OiYaLXGpzBW8jM3cpDLV09{1TE!aF5bBNt7GQ7>kr;`cLI`tstGzG&i(c9?9bkX>{5&UWryuy@ zheHVd|A>*sTj^}_DX?!N8^vS#JgTqGOL%D)RYZppX)j^|W2_-0o~BXrj%jzs-a<%j zQKt>I|B(2;5)eBt7@n`ZCdFqnmow|(P+!g;RVN3P%RL)#ex%;-4 zF{A(`z}%xnK8s*3%aw@4DiLv>X16qPWEYl7re|E5lvv4A-_^O^YCRaM=(M4rfHEMf zy-o9ZQJxTD=4{M?1qWh}opcw#OLQ;+-0MVcYo4Sx1e_At7OD2ZQ=pu?u00`AMEEu; zU@FRC_q=6HAMwRRUDGk4VR0t}K~SCO9eOcrFgKQbkM^2(U&}_dDwSMcDFHp3VwIJK z64q_`2x~4aofpb9Yza33QYTW^Dpcw{T0}6&yUn|DBzO5el#K5wb968_V!0u116H<2 zQ}#TajwT6M2Sh-Yl#r0<6cu9f{AuXhj3KX3^*RcmdW=Qp2AS1(@PIGwgy~sbi3^pv z57W`y@Bmf5{9x-2z3|&a_i7#+gZhfIP#P1d<^LAVf3Ie_em%ouphUuF%wq*lXYDSF zdbO$kygaL`1d-Sbv`2o1SZqhypb|U}o7+%V95|<$ z9)6pW!Y$3d$|$vsRPT_NyDKOK-kSVFN>o@?!AsQlTn#_KI8|=$5(A9X{p}ciN{XuO z^r}t&_Gpj1Q&9jTGRj1*TDp<%Znz5PF zktu+c-{|(dKh>I^^f(Vge7QJWzrBd_-7@Nn&QnXEhpNx@RLf_H8u{h#&g=UUpNQer zv3Z4(hKEiVl@Z~qNnRiNzU)y0sK|y9o+joaT4I=U=o04OP5ODcDjj7D{3q$4{ldrz zqd$$54|q7Bzg|;qrBn2^F>Q}*Y-ByaVJ3Vv?v}%a6h^voKTNaGLc;>K7`ZWjH@aNV zoUX60Zxcy6u#lx!%{L9K<5f{GeW%#N=~BMA-jMZ@1xWa7=2;AVHxK={Oc^9esGR?c zC;v^y`I8sY_VDu$30`c(zgO|b=|cw*0DY?D=i#)OOrA8MlF<5`#W$uojqc@dUHDNXxd7fSx#^!P7wk zB5_GW5Dp{48D8A5>Y8>LQYxU|yC#DmxKbOlvG5eCFyt=aC*F}Raf=Rv76n*zfimfV zpDeL!(hVor^dolv;D9!1O^HnC9kc85MK1yS*hk!b2pFh>fCjI z0)r>_ySO!R@EMl`Aal51M@mDcK&TPCvRi<4)FTa$y}R3r*~efYgari#h=3La*v-Oi zrh2#`t5(w&3yESp7wO;7+o5Q|qmk3wzaaIFi3wJ60P**$^Lxp8_0L!U04cvmL~M+P z@gG^);>+E)zMPtx?k)hE-oU=vg5@n&T(Qj(D|bmlt2`W(?ExhT_CiQ~6kEQD5<}1; zu%D0T_lo8XS-nhMtNnN&(M15Hdrz{s)x72p@t1q!td+do%Dt_GiON~zX+vGmO zj0nV*&+vlL$3C(Mf=ye!q7dqv!?_fjn2x&gl(SWb$lQ2SV4VX!>eP4rf#B&`<6SbG zgf=L~orcH)K?4+hX8rkGlBIStsbkCZ8#ew{@7P=3+&>pdHBTzUG-yHk-dAc#z;bGP zyxnd!NC80kqmrVZ9V$TMJ@qD-DJeMN0x^HRZGHBZa52Sx6IZ@XD z0$>-dsU@7~K4pp=3JMB!dn)`wi^pR}QRT4`8dSKu`wDLFGG{6k#)IT(El#6LINa z>)J>UALJATwR#w*YvMQH>_9U}C(Zx>d@cd+-FHk@F}F0 z*iVV&(fex>_^)99XT^~?f;DLJwPl!!O($cITLIHAo2$iwm8Bt5J8o0!**#lI8Cz1H zC{tBwWxj1$C3yC%>HyDU?5K&?+*4A)1kJ^HK8{IKjp`MeW%I6hE*Y)1$l8smO}Jpo z=7E)jFkepXg%lK>{06W07Yq7@wz6Yb1Mbx7>DVc%0|*;ryH**X+@n8Fm*uKhq>`{lmPt)p} zoHG~LvC~_cBS8#O(5ZI5$RDl7@3Dk&!vGuK;$BFIU%(6c`a-b_>)R;F7|4MHMk%sp zr!}IgV}(#}*u~NTRmmSP1k1)d_R%s-0pq~o9*>=npTgVa&W*sOpaxpix2_dRITHjh zFjIjWrY5i|EqNJh=yV=HHtOPdCLRxO7>+orz(k!%aXDbm-)wPF+U{)Plp} zH$LA=Lm$7i?jW;lQ}u|^O4h*I>e?GK*knf-hB=-x5&rR%u*dQi*h$JfrF{FAciV&W z?Je2~qMO6l?#;|jFZXhMa7F`Y91%k+wxMg#7w=eWE3~W;8UQKSieDZb?5^I$V#L+C zA_d>WX0X$QR9bDf-tJ;G&m>h3K-9AH#QMZHM1T>j7MSoO5WZfTo$>m$h3WsC4-}R| zNQfBnr6Ou~-_Vz3f*uwcB^S9#wOfoq{5OSf2w(y#_v!=-GMpWAdGTxz0G?XC?r2b^ z$gTLcL44MUHLqZj8|7oaAz#)uET(D`;Oylz;pJOgEwXMcA%aT5(DKa;3}z~%gPN>m zyTz5TGL0gzfh~i@c&%tavJ)-T;F$tEX>F%I(RlCU#>~U$=tB&tjU1y@dwOIitxcKm z^*I{LP@>Vqr*dG7a;!TJE;Pi)-{-DmlOILovvZDW3w7eSp1m#6 zc;eHVE}AWK{q7R3=2rYH?|9Tp-aMYpNnz$2D)$)+jXnu&TwEEQOd-%$n1=Q11lfi; zHfTDhh}u=i_16@pHhB!NsVAWPalZ=mjK(e*Es{<${K&H0jTC^_3@IXbq&aMTC~s*I znr&+=^WJ>CJD05e*N84h7(D^@1f}2J=^c6`Akzdq=l8-x9=vV?NSA8NqK{IKa?&_y z)5?t5Cf+o*eLc(}Y}(GUx-ap4>6emGFbC{`qn-Zf;EiPY0+TwR8`XI*OfbojuD!sl z5T78fCSgQ)LL`=y)R`DJ6%+CdgDv3k#i`<|<~~*d?Rl^BonTet$PW_}51Af-(ZVD{ z4?BG2e*R$bA{JNsq^j|q92EVnv-$?}PA`V zsZ&Xwyfhno&-Y^#DuI9miR)dxVm>glyN}}@Uv;*p{AYymMpzp5Z!O1_r4N2o=h1zs zAxQNq&&zG%6>Y=)Lg})`Y<{gBec6({xAubIgDPZ}<-<_$XoPlLqNB`;2(1hs0lp6{A`b_;YzH&Oa>86->A54anF-{B zbC#i6R;ez!=6pcU3&hmUIS1A&-3Qe7H;uHSo%z!NTd_yGvGRM!)ek&OR=5Yf^@m>O z$7TNY^D)ZfaP2L|O@l(lMFNC3Kpw`c-{$iELCrQ61~-lw&TL_0Wo!Oe05wx$FGMAD z;$K1i8lgeKNpVib%k%29J)HOP=?jm`q7*1Uv=0#&XDbBW=UJGd7L6dOf&J>Z`PdM= zQSZ}?o$-NfiPA<+$6C4R0UDW-*>=z|%F$YnQvPAFdG(hU(q~6N&GvqMV+b^u-9H?XcYX*8NiIyY%{}Y67OVe{ZVw z5~&JQ(?$gHpI48WUFLf)-;Myr`4TE?5?II{m-=kK*;h=y2h*R2l%f1n3TU=85AZV* zNPW~&`;(jUfw{aZX=s+_zE8{TO}I35#Grl68OTieE+-0x0(D$UeNR>Rtn&dU{o>=S zXR12kYzFyBbh!hc2Y_(n#2;lB%|yAFzpfJk+~HZ&PpP=?OLxN=Dn`< zg{GUDx6^CJJ^&E{9!5vzmS&v%#5(Z=w3 z^W!N`oS^ZwV;`ACCk^#(0%_}GSVJ4Mj5?$7h|v!0bn@;aFLXy`%8LCNAlIZsBs;gB7|7==U+K&%)(W1}N8h_W1>bA^=c|kFPedadi^JpK<+L>Tx+e+# zRO!B?h2aPv+G?GT`1XoHsy-|P#J#iC2`4Cl=ep?usDJkMXm5Cl)(wUe8M}dN@}GI} z&cMH!>E}S3ZWLDVMmK32$5u;<`YPn!)~t?Dl!;LrVn!ddKDGujvqr}qS+u^j<@QPw z?|6#nTC|5jVc@ht2dkR53!}n41mJ~bvy?MG?bwe}S{uS*DKl@K@W2alHh~nVt+a+s zD`dG{D^-MYQVi{>)fzuz-JZKStU7H3pe{zTQVdT?LYm!7`an6;V+#WiOAEtig62+emHLSFD&UzgFr3goMplW$Fq*i7B z9_FfFJC+4*Qsac@~QxQQB zkX{3#Kt!5!X`&)sdJlxCC}1$4ARsMZLa!n{Kv0n;LI}NwPUr%mB_wML*J?@o_@ZfW?lOfY6*_J+aL z%Ev!Hfccq;42>|sFXlAv37L%6*BpU;g+Gg9*M1MY@*K!L|zZ<0vkfAaqa z3%nlx9rjAR^VW2N8)_Q9Sl1EW9Ke!LN?lSFhEl1l?O_vx&NgH(J;;YQiIp+7?)qGc zZH{Q=W0fCKAC2W_Sm%@lPoC;;ZP^NUoX#_z_6iyKeyo>GVP+t2{sJ(?ui}#IJ|JYF-)XI@0zOx#5VUXDV5AGg|=*B83y*Z}K(Ym3*Z|JnLj zQlruI?aEsnwG+)V4#>a=m2-&3D~vbw?1fx9$G>+I_TsHRfQ|JAe?EIyr5Pam%tKpV z_)dnh-N@2q{*o$=av|7FY*sW~}Yo3gvI z{in4~2KJNdU)*zis=&0`7fv!$#23sTT7Zel@`S*BJsEV%lD!%%Rws*&AxuCp+5xr(g=Sm3X=S3zF>{WgQFwDgN(QU7TsZF&3quZX(wx>WSL zrp)mq`?SR{kk^*5y^n%Tugn7Msy5;T3AOk2AQ1I%9y% zj}3NhqgOf|M)mGx`7j>jbalsT<*;-o^s zJTMt?@Xeh}kKi-Muk!n?eSREv4QP=*nILWxwOjEYa6PW@>F;$(*fkqX6?$K;e$JKD zNp$a~B|=}K)`4t@$uKZ)&85nlaKAl0{M&Dd%0RN1+GP@Y4uOSHTfW8x<7dkHOo<=L zQ=h0gdmqTSyriV0dxw=%<+SE+UXJgHsS1C(ioTLd^U9MHyUFx$d!=f7 zI#ckQPJ82PK4#JSPFuz&%0ji=>_V_xQw>Zi-0f6Ra1 zDLaMp3FC22YU{n)>JJifcVpXLUfysOKwZjY3#OugB|r)CH~x~5PCYC9=?}x#-@P*= zq@^EMR!2<)o;jX-e6hc{GWJioCj)nlP5fk;uwVY?Kz;qY+QDgL{19^;BG13S38M$% z4~|Mnn_^&6&*Qg*p_{?OiK|;wo85MmukS)Ho#0}I@M0F;Q*g=EQ4bGcySV@rg(i-Wy%^aF*o~$TXPrgoA@KJr!Pi+ zIV0BGt>;p#4Ryf`pR%Kc2;Ucg96^Y>2isicQ;jIT-x^gC;rYFDY4!0jjPv#^lu9p-0Y znpIVxzH`NII{E8Zjfl@a6cy(}oqlQ{sr6-2k zLNU_bCGALsNF_z*F03=6^752uXUvwm;rkoU?n<({L{=)7P$VQ?=v*_dx@Xec%ahM0 z81o@(78vqK*=UWB@3FjMHs3`9yMU>)@`Gex&yx7$R}<+L@^AInvj!Ev0<(d|-E&R@ z6HuR@W?+bb0z+%l;H>m=(x_hZ zIMCq!nj7{?*57vlRXkrq+u@Wlwmv%_B4m~>c2QZkFXL|BJm&P1jUPt(^qkbMcU#|H zP7yfAA>#lnr3TDWg>7^;#NXmC{Ih{%%ek;%E9PZ3!+Q3H0Bgd;bAa6f4Rb(eeOau2 z;N1M`&I~R@rPf{5INvGh;t*_SEcBvpmCnoo$#@Gc zsauRlFdIee%#FrTXP=g$E() z7!Ol@%X_tgx_~=>*#^DtCzLFoy-dh}&WU8h);^obvS01? zI#V4oU0Is@>Pp+y2k~dnkv*2vC?=~;W5R{Th?l=R@cr!n}_xHi6(rz9hF#W z4X_w#pN`P8zB_A^Z>CMdLktTN-^RT;J+)d~>opO`mxHYTjq{ksZH+D0FkAWaj3;gZ zOId+jcFi$ab657x<()aZHtkC17R?DOV6_T>9W4)R*B}vWNGL*=2Z=2=g7N z^=OK1^eMXM+4alIHv0?xD>5d$ZgjI(q3svCUjP$L)tCc9CI$!u!szI-_i?e$p100q zpjHKHemt-h~sb94LPhuHUX- zOZd^NZ--qkGxP}*_TKDH6jxPPPj%SIs$c78cR=Tc4zKmRvz6R4kqvG)O2)3k>hJCE z#k;HapPEs^ZL(M+S3|{B6xUC`+=@1IRPHxcS`14-M-Q-8-d@dAQt0HP^E!(&h9WpO>fBp0DRh{FTAMZ<}_TXD%**<~Ow|XGN)7wSl#lgZi!A z&D^TCFnm_91{if*Qy#Wf9EuXwunW()XbXfUW#%v5cuq07zbGDgU~{pD&i{prtb6UI z92017LG`|!?e7Ubx|cPcXWcwyr_8cFUk1OQ`L2y_pSC7gM4`#Zy$}7Z(93a4hCreD z_FGYaZnH1kdgmeOvV#FTo*T361j@=bH{FMK>!FK9`!pE>p~{nAZmRuuc#|6OEnCi| zq4S|()=bP6S@xvQ9-E{QZye~8z=@tq-ZP7NXZ(>+aw3uoQdBoPq?;`3DfMTpmFiSq z-0L5gjqJ?5aFODBnd_B_}!`%-*b4-8Dp zYn}b$fiYS=k1bY}e?3bw@vZUW({!CMAUn?z{{ z1oB;s^Z;|?pSb?GTGZ{o*J#k3tuPp`|BJ^SzP4ZLpZ&#v;E!Dm9M7YCHmO`txy@oS z_i9mDac<0Z_OWE^w=aWJjL-hSe%6B;*%ivnnbk0;p?YWF4}yvP`*edAYA(thJi1 z?&#X|Z^dD4JJ&AGf6th|svondL(MI`MgEE@y`82w(^H$ZCgoUyxGjEB>^gKMEz4hF z`$Qj1k(%RLTa{Dc`P`sC;JQ(_@=P1HE{3TJTXe;!n^cmz+0Y@af-`i@QjA^F(Cag< zWG~K0Gw$yGkurtCMq~|FILZ2qwcaGFtIw-;Q^G zoj7r#Px-T1Zb89Pt%JLDRZPq|xvRhu-ft34Lw*~V)b2p#6&EYrx3n?w&zMm6^=)4R z1iV?E_*m3?t+)3v=YC)n?OW^60$GQ;Hp`WaX>!R|2`npGxn~V+Z^a~G$RwUcPBF|- zm`>KkMAx1)WrJjHc2gT0?>?3riZ>$q&E$HTE&J?Zdi9{6==1XPbKP?aRn5&{Wmio|oSGN|s=I2zUjO&bz3g{BVYgL}r6@j0^OCNVqw8)>2;o@w*q|5ad*QDrxf0S%! zX=7%TtmUV?nT`CKQ!#Hc#}yI$WjJG(zI*Rw+J;27+)Xe2ChGeFP08}|dB*uNFfBVa z-RBQqgUX*8P8K+6(6M%fs1aw!tq}#?v`vBC>q#rkS>err$Pd|TtZm=SOkKT>Wy!f< zfIUde%c}gl`m>_PW~0kUAKud{6wSB3LEkA0nqDyO@Riix zQXtFO^}4V`Dht%_A;V^SaY1AD?!0QUpW^2HK9sE1Cr2$Bw3P0#sZh$C4{@SJZgkkG z)X3?>2(xU%ldfXZ{0a?oRuXOigh!x> zvGI8p7Q3}4pf&f8pFT;-T{zGi!lB+MxpsDYy^f`}%zD#<7}Dg3P8K~@PjvhHe-55N zQoHv^X`AiwC)@i@GKk8aVAxF9)yq|Fem8q_r5!hXKX|3+QgZZkk81#)Z%m+Ctz*9_ zZM47L!A5kot9U#V_o%bmgZx|mgfL}hM<4zyd8lSB00XRQUM z7p~>4uY1XzeWUdK`*%73;55c`EWHR;LpQj`V25wzmArRbfCZg{^l0&(!Y)i;fFUn{MQXe ziC??n0ypA*^lQ&i;FQ9*^n))xJiH?Q`vpgm_^*imZ!Nme518A#ckfOgKa|ze5mVqW zH=h^Zxla83LYlua0OW;7VjPEeVSE?Ae*LO*WvY1Z;B@h6ZuyV9a-ij*@BhDkC}2j~<|@>9mP9bGnlGN$$MojZ3dD&10PFU=l4 z{4o6D+QFrka5%in-3>4-V&AWCzVoj2@yU}XyXv>rZ9c}H0IbF9c3@y2*;Uumv&8b) z(W8r4VCJ2GeZa27db)TR0G88oaXuHtqv+#dbaWe!%(lmp^MjU*W0Q|KfG-je78dTx zo&$W8kIT^&Z|H#s>JpsyG&;IL;i~;mxyxME(b)^Cz!E?Ex=Q8;?`{TQR3KLE=*+qf z0A9exgn*gPW{rP6yt$$e@eJYnc{aA11HT6xEnEk(v?%A4_ef8Ee#)Wq*o~sw^q`rU z8MlMYEr4Ua>GQK=43MgO00c~*{2LS2qt%#>zVdGbcmq2PX?YHqclFm__WpFww(}P2 z!8^134Ik5dp}e0S9DE7zxQDmDu+L6VzrM;`XS7WaSSl1===LXz)dg+^PvYs753C68_zR+;*PeQ<}o^* zNT2|F*9QmEzynLY8XM*kA@X^{*w8`Mx8>bP+f+A5^sGx?3Sv)vQ#p9*q zzigqSA)S8b`@catJJi&p z_i=P$j&SZY3Zmjt70(p$&0KcNCUn{AIp?n#`yYG_>-`!t75yHMa z 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

    r<%zd9 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

    $ALf6&HR9NCaz?_v*pUpfx&~1GZ1Cr%cl(Rt4* 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 From 0535e535df3995a2a2b2983009a6e745e608fda0 Mon Sep 17 00:00:00 2001 From: Paul C Date: Mon, 20 Jun 2016 15:16:44 +0100 Subject: [PATCH 134/178] feat(feature/new-router-options): add server_tokens to nginx config Add the server_tokens directive to the Deis router (nginx) template to allow the setting to be toggled on/off by setting the etcd key '/deis/router/serverTokens' to 'on' or 'off'. --- docs/customizing_deis/router_settings.rst | 1 + router/rootfs/etc/confd/templates/nginx.conf | 3 +++ 2 files changed, 4 insertions(+) diff --git a/docs/customizing_deis/router_settings.rst b/docs/customizing_deis/router_settings.rst index e1e1fd07b0..551771db19 100644 --- a/docs/customizing_deis/router_settings.rst +++ b/docs/customizing_deis/router_settings.rst @@ -70,6 +70,7 @@ setting description /deis/router/maxWorkerConnections maximum number of simultaneous connections that can be opened by a worker process (default: 768) /deis/router/serverNameHashMaxSize nginx server_names_hash_max_size setting (default: 512) /deis/router/serverNameHashBucketSize nginx server_names_hash_bucket_size (default: 64) +/deis/router/serverTokens nginx server_tokens setting (default: not set) /deis/router/sslCert cluster-wide SSL certificate /deis/router/sslCiphers cluster-wide enabled SSL ciphers /deis/router/sslKey cluster-wide SSL private key diff --git a/router/rootfs/etc/confd/templates/nginx.conf b/router/rootfs/etc/confd/templates/nginx.conf index 56f8a9b5ce..638d23b2f5 100644 --- a/router/rootfs/etc/confd/templates/nginx.conf +++ b/router/rootfs/etc/confd/templates/nginx.conf @@ -12,6 +12,9 @@ events { http { + # Server signature toggle (default is on) + server_tokens {{ or (getv "/deis/router/serverTokens") "on" }}; + # basic settings vhost_traffic_status_zone shared:vhost_traffic_status:{{ or (getv "/deis/router/trafficStatusZoneSize") "1m" }}; From e2e076990a31c13dbce7b9b2afb089cabb7bde88 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 21 Jun 2016 13:53:03 -0600 Subject: [PATCH 135/178] chore(buildpacks): update heroku-buildpack-php to v108 See https://github.com/heroku/heroku-buildpack-php/compare/v105...v108 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index dec4513687..067bc42aa6 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v80 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v105 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v70 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v41 From 2234bbbd1c8654aad3d739fe402cfa3708020aed Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 15 Jul 2016 15:12:25 -0600 Subject: [PATCH 136/178] chore(buildpacks): update heroku-buildpack-go to v42 See https://github.com/heroku/heroku-buildpack-go/compare/v41...v42 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 067bc42aa6..b8e2859ebd 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v70 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v41 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v42 From 6fe40619bc1bfdf4297473bbae1f038b0a6db70f Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 15 Jul 2016 15:14:05 -0600 Subject: [PATCH 137/178] chore(buildpacks): update heroku-buildpack-nodejs to v91 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v90...v91 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index b8e2859ebd..fcd065dab5 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -30,7 +30,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v146 -download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v90 +download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v91 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 From c537ad38d3f2388fdcf69881a4dc4f20a7d08f65 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 15 Jul 2016 15:15:26 -0600 Subject: [PATCH 138/178] chore(buildpacks): update heroku-buildpack-python to v81 See https://github.com/heroku/heroku-buildpack-python/compare/v80...v81 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index fcd065dab5..0e85a19bb4 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -35,7 +35,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-java.git download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 -download_buildpack https://github.com/heroku/heroku-buildpack-python.git v80 +download_buildpack https://github.com/heroku/heroku-buildpack-python.git v81 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v70 From 16aa8f1d0c2e1994540ea3894fac1ecbadce7048 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 15 Jul 2016 15:16:04 -0600 Subject: [PATCH 139/178] chore(buildpacks): update heroku-buildpack-scala to v71 See https://github.com/heroku/heroku-buildpack-scala/compare/v70...v71 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 0e85a19bb4..9b0878735e 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -38,5 +38,5 @@ download_buildpack https://github.com/heroku/heroku-buildpack-play.git download_buildpack https://github.com/heroku/heroku-buildpack-python.git v81 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 -download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v70 +download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v71 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v42 From f22e746fbc554955c8d91e5875e66f4726293b16 Mon Sep 17 00:00:00 2001 From: Alexander Hasselbach Date: Mon, 18 Jul 2016 16:18:27 +0600 Subject: [PATCH 140/178] docs(dockerfiles): Make Bash requirement explicit in the documentation closes #5064 --- docs/using_deis/using-docker-images.rst | 7 ++++--- docs/using_deis/using-dockerfiles.rst | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/using_deis/using-docker-images.rst b/docs/using_deis/using-docker-images.rst index f4cbd85241..90d55098a7 100644 --- a/docs/using_deis/using-docker-images.rst +++ b/docs/using_deis/using-docker-images.rst @@ -30,9 +30,10 @@ Docker Image Requirements ^^^^^^^^^^^^^^^^^^^^^^^^^ In order to deploy Docker images, they must conform to the following requirements: - * The Docker image must EXPOSE only one port - * The port must be listening for a HTTP connection - * A default CMD must be specified for running the container +* The Docker image must EXPOSE only one port +* The port must be listening for a HTTP connection +* A default CMD must be specified for running the container +* Bash should be available in the Docker image .. note:: diff --git a/docs/using_deis/using-dockerfiles.rst b/docs/using_deis/using-dockerfiles.rst index 5a4370a529..ac0813360e 100644 --- a/docs/using_deis/using-dockerfiles.rst +++ b/docs/using_deis/using-dockerfiles.rst @@ -21,9 +21,10 @@ Dockerfile Requirements ^^^^^^^^^^^^^^^^^^^^^^^ In order to deploy Dockerfile applications, they must conform to the following requirements: - * The Dockerfile must EXPOSE only one port - * The port must be listening for a HTTP connection - * A default CMD must be specified for running the container +* The Dockerfile must EXPOSE only one port +* The port must be listening for a HTTP connection +* A default CMD must be specified for running the container +* Bash should be available in the Docker image .. note:: From c11e0efd2f29396c5648e97578328327d4ec2e3a Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Tue, 19 Jul 2016 14:41:20 -0700 Subject: [PATCH 141/178] doc(workflow): add information about workflow --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 805ab53a01..88e9388fad 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -# Deis +| This repository (`deis/deis`) is home for the Deis v1 PaaS (based on CoreOS + Fleet). For more information about the latest version, based on Kubernetes, visit [`deis/workflow`](https://github.com/deis/workflow). +|---| + +# Deis v1 PaaS Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. @@ -6,13 +9,9 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy an [![Current Release](http://img.shields.io/badge/release-v1.13.2-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.2) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) -![Deis Graphic](https://s3-us-west-2.amazonaws.com/deis-images/deis-graphic.png) - - New to Deis? Learn more about Deis [Concepts](http://docs.deis.io/en/latest/understanding_deis/concepts/), [Architecture](http://docs.deis.io/en/latest/understanding_deis/architecture/) and how to [Deploy an Application](http://docs.deis.io/en/latest/using_deis/deploy-application/). - -# Installing Deis +# Installing Deis v1 Deis is a set of Docker containers that can be deployed anywhere including public cloud, private cloud, bare metal or your workstation. Decide where you'd like to deploy Deis, then follow the [provider-specific documentation](http://docs.deis.io/en/latest/installing_deis/) for provisioning. From 6f3649b297dbaac6bd9750e7822342000bf1be02 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 19 Jul 2016 14:46:41 -0600 Subject: [PATCH 142/178] chore(*): bump CoreOS to 1068.8.0 See https://coreos.com/releases/#1068.8.0 --- contrib/azure/parameters.json | 2 +- contrib/linode/provision-linode-cluster.py | 2 +- contrib/utils.sh | 2 +- docs/installing_deis/gce.rst | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/azure/parameters.json b/contrib/azure/parameters.json index 53512713d2..5409ab219d 100644 --- a/contrib/azure/parameters.json +++ b/contrib/azure/parameters.json @@ -27,7 +27,7 @@ "value": 100 }, "coreosVersion": { - "value": "899.17.0" + "value": "1068.8.0" }, "storageAccountType": { "value": "Premium_LRS" diff --git a/contrib/linode/provision-linode-cluster.py b/contrib/linode/provision-linode-cluster.py index 2989588269..732e809cbb 100755 --- a/contrib/linode/provision-linode-cluster.py +++ b/contrib/linode/provision-linode-cluster.py @@ -357,7 +357,7 @@ def main(): help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') - provision_parser.add_argument('--coreos-version', required=False, default='899.17.0', dest='coreos_version', + provision_parser.add_argument('--coreos-version', required=False, default='1068.8.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') diff --git a/contrib/utils.sh b/contrib/utils.sh index 2ededad9fd..1c4fbbc4d8 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -13,5 +13,5 @@ function echo_green { } export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} -export COREOS_VERSION=${COREOS_VERSION:-899.17.0} +export COREOS_VERSION=${COREOS_VERSION:-1068.8.0} export DEIS_RELEASE=1.13.2 diff --git a/docs/installing_deis/gce.rst b/docs/installing_deis/gce.rst index 10f5e6d169..1d48c5a875 100644 --- a/docs/installing_deis/gce.rst +++ b/docs/installing_deis/gce.rst @@ -118,7 +118,7 @@ Launch 3 instances. You can choose another starting CoreOS image from the listin --metadata-from-file user-data=gce-user-data,sshKeys=$HOME/.ssh/deis.pub \ --disk name=cored${num},device-name=coredocker \ --tags deis \ - --image coreos-stable-899-17-0-v20160504 \ + --image coreos-stable-1068-8-0-v20160718 \ --image-project coreos-cloud; done From a219a2709ff8df9c498e08577806e74965114ec5 Mon Sep 17 00:00:00 2001 From: Nathan Samson Date: Wed, 20 Jul 2016 22:23:37 +0200 Subject: [PATCH 143/178] Use official docker/dind image --- builder/rootfs/Dockerfile | 9 +- builder/rootfs/bin/entry | 119 +-------------------- builder/rootfs/etc/confd/templates/builder | 2 +- 3 files changed, 3 insertions(+), 127 deletions(-) diff --git a/builder/rootfs/Dockerfile b/builder/rootfs/Dockerfile index 71b105cdb6..b646439634 100644 --- a/builder/rootfs/Dockerfile +++ b/builder/rootfs/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM docker:1.8-dind # install common packages RUN apk add --no-cache curl bash sudo @@ -24,13 +24,6 @@ RUN apk add --no-cache \ util-linux \ xz -# the docker package in alpine disables aufs and devicemapper -ENV DOCKER_BUCKET get.docker.com -ENV DOCKER_VERSION 1.8.3 -ENV DOCKER_SHA256 f024bc65c45a3778cf07213d26016075e8172de8f6e4b5702bedde06c241650f -RUN curl -sSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-$DOCKER_VERSION" -o /usr/bin/docker \ - && echo "${DOCKER_SHA256} /usr/bin/docker" | sha256sum -c - \ - && chmod +x /usr/bin/docker # configure ssh server RUN mkdir -p /var/run/sshd && rm -rf /etc/ssh/ssh_host* diff --git a/builder/rootfs/bin/entry b/builder/rootfs/bin/entry index c3400cfe80..8ed73cfd60 100755 --- a/builder/rootfs/bin/entry +++ b/builder/rootfs/bin/entry @@ -7,121 +7,4 @@ if [[ -f /etc/environment_proxy ]]; then export http_proxy https_proxy all_proxy no_proxy fi -# START jpetazzo/dind wrapper - -# DinD: a wrapper script which allows docker to be run inside a docker container. -# Original version by Jerome Petazzoni -# See the blog post: https://blog.docker.com/2013/09/docker-can-now-run-within-docker/ -# -# This script should be executed inside a docker container in privilieged mode -# ('docker run --privileged', introduced in docker 0.6). - -# Usage: dind CMD [ARG...] - -# apparmor sucks and Docker needs to know that it's in a container (c) @tianon -export container=docker - -# as of docker 1.8, cgroups will be mounted in the container -if ! mountpoint -q /sys/fs/cgroup; then - - # First, make sure that cgroups are mounted correctly. - CGROUP=/cgroup - - mkdir -p "$CGROUP" - - if ! mountpoint -q "$CGROUP"; then - mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP || { - echo >&2 'Could not make a tmpfs mount. Did you use --privileged?' - exit 1 - } - fi - - # Mount the cgroup hierarchies exactly as they are in the parent system. - for HIER in $(cut -d: -f2 /proc/1/cgroup); do - - # The following sections address a bug which manifests itself - # by a cryptic "lxc-start: no ns_cgroup option specified" when - # trying to start containers within a container. - # The bug seems to appear when the cgroup hierarchies are not - # mounted on the exact same directories in the host, and in the - # container. - - SUBSYSTEMS="${HIER%name=*}" - - # If cgroup hierarchy is named(mounted with "-o name=foo") we - # need to mount it in $CGROUP/foo to create exect same - # directoryes as on host. Else we need to mount it as is e.g. - # "subsys1,subsys2" if it has two subsystems - - # Named, control-less cgroups are mounted with "-o name=foo" - # (and appear as such under /proc//cgroup) but are usually - # mounted on a directory named "foo" (without the "name=" prefix). - # Systemd and OpenRC (and possibly others) both create such a - # cgroup. So just mount them on directory $CGROUP/foo. - - OHIER=$HIER - HIER="${HIER#*name=}" - - mkdir -p "$CGROUP/$HIER" - - if ! mountpoint -q "$CGROUP/$HIER"; then - mount -n -t cgroup -o "$OHIER" cgroup "$CGROUP/$HIER" - fi - - # Likewise, on at least one system, it has been reported that - # systemd would mount the CPU and CPU accounting controllers - # (respectively "cpu" and "cpuacct") with "-o cpuacct,cpu" - # but on a directory called "cpu,cpuacct" (note the inversion - # in the order of the groups). This tries to work around it. - - if [ "$HIER" = 'cpuacct,cpu' ]; then - ln -s "$HIER" "$CGROUP/cpu,cpuacct" - fi - - # If hierarchy has multiple subsystems, in /proc//cgroup - # we will see ":subsys1,subsys2,subsys3,name=foo:" substring, - # we need to mount it to "$CGROUP/foo" and if there were no - # name to "$CGROUP/subsys1,subsys2,subsys3", so we must create - # symlinks for docker daemon to find these subsystems: - # ln -s $CGROUP/foo $CGROUP/subsys1 - # ln -s $CGROUP/subsys1,subsys2,subsys3 $CGROUP/subsys1 - - if [ "$SUBSYSTEMS" != "${SUBSYSTEMS//,/ }" ]; then - SUBSYSTEMS="${SUBSYSTEMS//,/ }" - for SUBSYS in $SUBSYSTEMS - do - ln -s "$CGROUP/$HIER" "$CGROUP/$SUBSYS" - done - fi - done -fi - -if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security; then - mount -t securityfs none /sys/kernel/security || { - echo >&2 'Could not mount /sys/kernel/security.' - echo >&2 'AppArmor detection and --privileged mode might break.' - } -fi - -# Note: as I write those lines, the LXC userland tools cannot setup -# a "sub-container" properly if the "devices" cgroup is not in its -# own hierarchy. Let's detect this and issue a warning. -if ! grep -q :devices: /proc/1/cgroup; then - echo >&2 'WARNING: the "devices" cgroup should be in its own hierarchy.' -fi -if ! grep -qw devices /proc/1/cgroup; then - echo >&2 'WARNING: it looks like the "devices" cgroup is not mounted.' -fi - -# Mount /tmp (conditionally) -if ! mountpoint -q /tmp; then - mount -t tmpfs none /tmp -fi - -if [ $# -gt 0 ]; then - exec "$@" -fi - -echo >&2 'ERROR: No command specified.' -echo >&2 'You probably want to run hack/make.sh, or maybe a shell?' -# END jpetazzo/dind wrapper +/usr/local/bin/dind $@ diff --git a/builder/rootfs/etc/confd/templates/builder b/builder/rootfs/etc/confd/templates/builder index 49d415dcc1..1a275f8d24 100755 --- a/builder/rootfs/etc/confd/templates/builder +++ b/builder/rootfs/etc/confd/templates/builder @@ -89,7 +89,7 @@ fi # and write out a Dockerfile to use that slug if [ ! -f Dockerfile ]; then BUILD_OPTS=() - BUILD_OPTS+='/usr/bin/docker' + BUILD_OPTS+='/usr/local/bin/docker' BUILD_OPTS+=' run -v /etc/environment_proxy:/etc/environment_proxy' # get application configuration BUILD_OPTS+=$(echo $RESPONSE | get-app-values) From 1429fa872bab32d20c23843e73e9c1beb96baa61 Mon Sep 17 00:00:00 2001 From: Nathan Samson Date: Sun, 24 Jul 2016 01:30:49 +0200 Subject: [PATCH 144/178] feat(contrib): Add script to restart all apps. This is usefull after a reinstall of a cluster with stateless storage. When the new cluster is started it will still remember the requested scale of all applications, but all containers will be in "destroyed" state. This means that a `deis ps:restart` does not work and so manual rescaling needs to be done. This is a tedious and error-prone task if you have many applications, so this little script takes care of that. --- contrib/util/reset-ps-all-apps.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 contrib/util/reset-ps-all-apps.sh diff --git a/contrib/util/reset-ps-all-apps.sh b/contrib/util/reset-ps-all-apps.sh new file mode 100644 index 0000000000..3bd05c4b0c --- /dev/null +++ b/contrib/util/reset-ps-all-apps.sh @@ -0,0 +1,12 @@ +apps=$(curl -H "Authorization: token $DEIS_TOKEN" http://$DEIS_SERVER/v1/apps | jq -r '.results | map(.id) | join(" ")') + +for app in $apps; do + echo "Resetting containers of $app" + + originalscale=$(curl -H "Authorization: token $DEIS_TOKEN" http://$DEIS_SERVER/v1/apps/$app/containers/ 2>/dev/null | jq -r '(.results) | [group_by(.type)[] | max_by(.num)] | [map(.type), map(.num)] | transpose | map([.[0], .[1] | tostring] | join("=")) | join(" ")') + zeroscale=$(curl -H "Authorization: token $DEIS_TOKEN" http://$DEIS_SERVER/v1/apps/$app/containers/ 2>/dev/null | jq -r '(.results) | unique_by(.type) | map([.type, "0"] | join("=")) | join(" ")') + + deis ps:scale $zeroscale -a $app + deis ps:scale $originalscale -a $app + echo +done From 2df40c645524d64cf6261c7b5e891d527d474413 Mon Sep 17 00:00:00 2001 From: Nathan Samson Date: Fri, 22 Jul 2016 01:27:38 +0200 Subject: [PATCH 145/178] fix(*): Use cgroupfs driver in both host and builder docker. The (CorOS) default of systemd might have some problems. See also https://github.com/coreos/bugs/issues/1435 https://github.com/docker/docker/issues/21444 and https://github.com/docker/docker/issues/21678 --- builder/docker/docker.go | 2 ++ contrib/coreos/user-data.example | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/builder/docker/docker.go b/builder/docker/docker.go index 793d7ebf7a..a0ee765f7e 100644 --- a/builder/docker/docker.go +++ b/builder/docker/docker.go @@ -72,6 +72,8 @@ func Start(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) { "192.168.0.0/16", "--insecure-registry", "100.64.0.0/10", + "--exec-opt", + "native.cgroupdriver=cgroupfs", } // For overlay-ish filesystems, force the overlay to kick in if it exists. diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index 4e9267f4d0..1334dcff29 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -43,6 +43,10 @@ coreos: enable: false - name: docker.service drop-ins: + - name: 00-reset-environment.conf + content: | + [Service] + Environment= - name: 10-require-flannel.conf content: | [Unit] @@ -52,6 +56,10 @@ coreos: content: | [Service] Environment="DOCKER_OPTS=--insecure-registry 10.0.0.0/8 --insecure-registry 172.16.0.0/12 --insecure-registry 192.168.0.0/16 --insecure-registry 100.64.0.0/10" + - name: 60-cgroup-driver.conf + content: | + [Service] + Environment="DOCKER_CGROUPS=--exec-opt native.cgroupdriver=cgroupfs" - name: flanneld.service command: start drop-ins: From b7427a9b8685e680c4eae606e9bc0dd0ff2a0622 Mon Sep 17 00:00:00 2001 From: Nathan Samson Date: Thu, 21 Jul 2016 01:12:40 +0200 Subject: [PATCH 146/178] feat(client): Sort all listings Display all lists sorted. This improves readability when comparing output between 2 runs. --- client/cmd/apps.go | 2 + client/cmd/domains.go | 3 ++ client/cmd/keys.go | 3 ++ client/cmd/perms.go | 3 ++ client/cmd/ps.go | 13 ++++-- client/cmd/users.go | 3 ++ client/controller/api/apps.go | 6 +++ client/controller/api/apps_test.go | 24 +++++++++++ client/controller/api/domains.go | 6 +++ client/controller/api/domains_test.go | 24 +++++++++++ client/controller/api/keys.go | 6 +++ client/controller/api/keys_test.go | 24 +++++++++++ client/controller/api/ps.go | 17 ++++++++ client/controller/api/ps_test.go | 41 +++++++++++++++++++ client/controller/api/users.go | 6 +++ client/controller/api/users_test.go | 24 +++++++++++ client/controller/models/apps/apps.go | 2 +- client/controller/models/apps/apps_test.go | 2 +- client/controller/models/domains/domains.go | 2 +- .../controller/models/domains/domains_test.go | 2 +- client/controller/models/keys/keys.go | 2 +- client/controller/models/keys/keys_test.go | 2 +- client/controller/models/ps/ps.go | 13 ++++-- client/controller/models/ps/ps_test.go | 2 +- client/controller/models/users/users.go | 2 +- client/controller/models/users/users_test.go | 2 +- 26 files changed, 219 insertions(+), 17 deletions(-) create mode 100644 client/controller/api/apps_test.go create mode 100644 client/controller/api/domains_test.go create mode 100644 client/controller/api/keys_test.go create mode 100644 client/controller/api/ps_test.go create mode 100644 client/controller/api/users_test.go diff --git a/client/cmd/apps.go b/client/cmd/apps.go index fde0c5e6ff..1d83df8ff2 100644 --- a/client/cmd/apps.go +++ b/client/cmd/apps.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "os" + "sort" "strings" "time" @@ -82,6 +83,7 @@ func AppsList(results int) error { fmt.Printf("=== Apps%s", limitCount(len(apps), count)) + sort.Sort(apps) for _, app := range apps { fmt.Println(app.ID) } diff --git a/client/cmd/domains.go b/client/cmd/domains.go index 7517328eda..166033b089 100644 --- a/client/cmd/domains.go +++ b/client/cmd/domains.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "sort" "github.com/deis/deis/client/controller/models/domains" ) @@ -26,6 +27,8 @@ func DomainsList(appID string, results int) error { fmt.Printf("=== %s Domains%s", appID, limitCount(len(domains), count)) + sort.Sort(domains) + for _, domain := range domains { fmt.Println(domain.Domain) } diff --git a/client/cmd/keys.go b/client/cmd/keys.go index ddf89c19f8..88bfdacd9b 100644 --- a/client/cmd/keys.go +++ b/client/cmd/keys.go @@ -5,6 +5,7 @@ import ( "io/ioutil" "path" "regexp" + "sort" "strconv" "strings" @@ -33,6 +34,8 @@ func KeysList(results int) error { fmt.Printf("=== %s Keys%s", c.Username, limitCount(len(keys), count)) + sort.Sort(keys) + for _, key := range keys { fmt.Printf("%s %s...%s\n", key.ID, key.Public[:16], key.Public[len(key.Public)-10:]) } diff --git a/client/cmd/perms.go b/client/cmd/perms.go index 0fe414776d..4f54c609a8 100644 --- a/client/cmd/perms.go +++ b/client/cmd/perms.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "sort" "github.com/deis/deis/client/controller/client" "github.com/deis/deis/client/controller/models/perms" @@ -38,6 +39,8 @@ func PermsList(appID string, admin bool, results int) error { fmt.Printf("=== %s's Users\n", appID) } + sort.Strings(users) + for _, user := range users { fmt.Println(user) } diff --git a/client/cmd/ps.go b/client/cmd/ps.go index 16ddff5729..72be000c46 100644 --- a/client/cmd/ps.go +++ b/client/cmd/ps.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "regexp" + "sort" "strconv" "strings" "time" @@ -133,15 +134,19 @@ func PsRestart(appID, target string) error { return nil } -func printProcesses(appID string, processes []api.Process, count int) { +func printProcesses(appID string, processes api.Processes, count int) { psMap := ps.ByType(processes) fmt.Printf("=== %s Processes%s", appID, limitCount(len(processes), count)) - for psType, procs := range psMap { - fmt.Printf("--- %s:\n", psType) + sort.Sort(psMap) - for _, proc := range procs { + for _, processType := range psMap { + fmt.Printf("--- %s:\n", processType.Type) + + sort.Sort(processType.Processes) + + for _, proc := range processType.Processes { fmt.Printf("%s.%d %s (%s)\n", proc.Type, proc.Num, proc.State, proc.Release) } } diff --git a/client/cmd/users.go b/client/cmd/users.go index 68ecab5b82..163b2a020a 100644 --- a/client/cmd/users.go +++ b/client/cmd/users.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "sort" "github.com/deis/deis/client/controller/client" "github.com/deis/deis/client/controller/models/users" @@ -27,6 +28,8 @@ func UsersList(results int) error { fmt.Printf("=== Users%s", limitCount(len(users), count)) + sort.Sort(users) + for _, user := range users { fmt.Println(user.Username) } diff --git a/client/controller/api/apps.go b/client/controller/api/apps.go index 89770e5a35..dd5a60e9e8 100644 --- a/client/controller/api/apps.go +++ b/client/controller/api/apps.go @@ -10,6 +10,12 @@ type App struct { UUID string `json:"uuid"` } +type Apps []App + +func (a Apps) Len() int { return len(a) } +func (a Apps) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a Apps) Less(i, j int) bool { return a[i].ID < a[j].ID } + // AppCreateRequest is the definition of POST /v1/apps/. type AppCreateRequest struct { ID string `json:"id,omitempty"` diff --git a/client/controller/api/apps_test.go b/client/controller/api/apps_test.go new file mode 100644 index 0000000000..5f13107de4 --- /dev/null +++ b/client/controller/api/apps_test.go @@ -0,0 +1,24 @@ +package api + +import ( + "sort" + "testing" +) + +func TestAppsSorted(t *testing.T) { + apps := Apps{ + {"2014-01-01T00:00:00UTC", "Zulu", "John", "2016-01-02", "zulu.example.com", "d57be2ba-7ae2-4825-9ace-7c86cb893046"}, + {"2014-01-01T00:00:00UTC", "Alpha", "John", "2016-01-02", "alpha.example.com", "3d501190-1b8e-41ef-94c5-dd9a0bb707bb"}, + {"2014-01-01T00:00:00UTC", "Gamma", "John", "2016-01-02", "gamma.example.com", "41d95133-fd4d-4f4c-92a2-e454857371cc"}, + {"2014-01-01T00:00:00UTC", "Beta", "John", "2016-01-02", "beta.example.com", "222ed1aa-e985-4bec-9966-a88215300661"}, + } + + sort.Sort(apps) + expectedAppNames := []string{"Alpha", "Beta", "Gamma", "Zulu"} + + for i, app := range apps { + if expectedAppNames[i] != app.ID { + t.Errorf("Expected apps to be sorted %v, Got %v at index %v", expectedAppNames[i], app.ID, i) + } + } +} diff --git a/client/controller/api/domains.go b/client/controller/api/domains.go index 542e1699f6..6ae3889ed0 100644 --- a/client/controller/api/domains.go +++ b/client/controller/api/domains.go @@ -9,6 +9,12 @@ type Domain struct { Updated string `json:"updated"` } +type Domains []Domain + +func (d Domains) Len() int { return len(d) } +func (d Domains) Swap(i, j int) { d[i], d[j] = d[j], d[i] } +func (d Domains) Less(i, j int) bool { return d[i].Domain < d[j].Domain } + // DomainCreateRequest is the structure of POST /v1/app//domains/. type DomainCreateRequest struct { Domain string `json:"domain"` diff --git a/client/controller/api/domains_test.go b/client/controller/api/domains_test.go new file mode 100644 index 0000000000..6799d98adf --- /dev/null +++ b/client/controller/api/domains_test.go @@ -0,0 +1,24 @@ +package api + +import ( + "sort" + "testing" +) + +func TestDomainsSorted(t *testing.T) { + domains := Domains{ + {"Alpha", "", "gamma.example.com", "", ""}, + {"Alpha", "", "alpha1.example.com", "", ""}, + {"Alpha", "", "zulu.example.com", "", ""}, + {"Alpha", "", "delta.example.com", "", ""}, + } + + sort.Sort(domains) + expectedDomains := []string{"alpha1.example.com", "delta.example.com", "gamma.example.com", "zulu.example.com"} + + for i, domain := range domains { + if expectedDomains[i] != domain.Domain { + t.Errorf("Expected domains to be sorted %v, Got %v at index %v", expectedDomains[i], domain.Domain, i) + } + } +} diff --git a/client/controller/api/keys.go b/client/controller/api/keys.go index eb5b11c7d7..75eb8d5e7b 100644 --- a/client/controller/api/keys.go +++ b/client/controller/api/keys.go @@ -10,6 +10,12 @@ type Key struct { UUID string `json:"uuid"` } +type Keys []Key + +func (k Keys) Len() int { return len(k) } +func (k Keys) Swap(i, j int) { k[i], k[j] = k[j], k[i] } +func (k Keys) Less(i, j int) bool { return k[i].ID < k[j].ID } + // KeyCreateRequest is the definition of POST /v1/keys/. type KeyCreateRequest struct { ID string `json:"id"` diff --git a/client/controller/api/keys_test.go b/client/controller/api/keys_test.go new file mode 100644 index 0000000000..be331ed5dc --- /dev/null +++ b/client/controller/api/keys_test.go @@ -0,0 +1,24 @@ +package api + +import ( + "sort" + "testing" +) + +func TestKeysSorted(t *testing.T) { + keys := Keys{ + {"", "Delta", "", "", "", ""}, + {"", "Alpha", "", "", "", ""}, + {"", "Gamma", "", "", "", ""}, + {"", "Zeta", "", "", "", ""}, + } + + sort.Sort(keys) + expectedKeys := []string{"Alpha", "Delta", "Gamma", "Zeta"} + + for i, key := range keys { + if expectedKeys[i] != key.ID { + t.Errorf("Expected domains to be sorted %v, Got %v at index %v", expectedKeys[i], key.ID, i) + } + } +} diff --git a/client/controller/api/ps.go b/client/controller/api/ps.go index 56c7841aad..f8cbcd791a 100644 --- a/client/controller/api/ps.go +++ b/client/controller/api/ps.go @@ -12,3 +12,20 @@ type Process struct { Num int `json:"num"` State string `json:"state"` } + +type Processes []Process + +func (p Processes) Len() int { return len(p) } +func (p Processes) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p Processes) Less(i, j int) bool { return p[i].Num < p[j].Num } + +type ProcessType struct { + Type string + Processes Processes +} + +type ProcessTypes []ProcessType + +func (p ProcessTypes) Len() int { return len(p) } +func (p ProcessTypes) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p ProcessTypes) Less(i, j int) bool { return p[i].Type < p[j].Type } diff --git a/client/controller/api/ps_test.go b/client/controller/api/ps_test.go new file mode 100644 index 0000000000..fecaad2ca2 --- /dev/null +++ b/client/controller/api/ps_test.go @@ -0,0 +1,41 @@ +package api + +import ( + "sort" + "testing" +) + +func TestProcessesSorted(t *testing.T) { + processes := Processes{ + {"", "", "", "", "", "", "web", 4, "up"}, + {"", "", "", "", "", "", "web", 2, "up"}, + {"", "", "", "", "", "", "web", 3, "up"}, + {"", "", "", "", "", "", "web", 1, "up"}, + } + + // The API will return this sorted already, just to be sure + sort.Sort(processes) + + for i, process := range processes { + if i+1 != process.Num { + t.Errorf("Expected processes to be sorted %v, Got %v", i+1, process.Num) + } + } +} + +func TestProcessTypesSorted(t *testing.T) { + processTypes := ProcessTypes{ + {"worker", Processes{}}, + {"web", Processes{}}, + {"clock", Processes{}}, + } + + sort.Sort(processTypes) + expectedProcessTypes := []string{"clock", "web", "worker"} + + for i, processType := range processTypes { + if expectedProcessTypes[i] != processType.Type { + t.Errorf("Expected apps to be sorted %v, Got %v at index %v", expectedProcessTypes[i], processType.Type, i) + } + } +} diff --git a/client/controller/api/users.go b/client/controller/api/users.go index e83a63787d..ed64c196ad 100644 --- a/client/controller/api/users.go +++ b/client/controller/api/users.go @@ -13,3 +13,9 @@ type User struct { IsActive bool `json:"is_active"` DateJoined string `json:"date_joined"` } + +type Users []User + +func (u Users) Len() int { return len(u) } +func (u Users) Swap(i, j int) { u[i], u[j] = u[j], u[i] } +func (u Users) Less(i, j int) bool { return u[i].Username < u[j].Username } diff --git a/client/controller/api/users_test.go b/client/controller/api/users_test.go new file mode 100644 index 0000000000..c43675a458 --- /dev/null +++ b/client/controller/api/users_test.go @@ -0,0 +1,24 @@ +package api + +import ( + "sort" + "testing" +) + +func TestUsersSorted(t *testing.T) { + users := Users{ + {1, "", false, "Zulu", "", "", "", false, false, ""}, + {2, "", false, "Beta", "", "", "", false, false, ""}, + {3, "", false, "Gamma", "", "", "", false, false, ""}, + {4, "", false, "Alpha", "", "", "", false, false, ""}, + } + + sort.Sort(users) + expectedUsernames := []string{"Alpha", "Beta", "Gamma", "Zulu"} + + for i, user := range users { + if expectedUsernames[i] != user.Username { + t.Errorf("Expected users to be sorted %v, Got %v at index %v", expectedUsernames[i], user.Username, i) + } + } +} diff --git a/client/controller/models/apps/apps.go b/client/controller/models/apps/apps.go index 35720c26d6..24d78abe59 100644 --- a/client/controller/models/apps/apps.go +++ b/client/controller/models/apps/apps.go @@ -11,7 +11,7 @@ import ( ) // List lists apps on a Deis controller. -func List(c *client.Client, results int) ([]api.App, int, error) { +func List(c *client.Client, results int) (api.Apps, int, error) { body, count, err := c.LimitedRequest("/v1/apps/", results) if err != nil { diff --git a/client/controller/models/apps/apps_test.go b/client/controller/models/apps/apps_test.go index 56f9553ea6..d2499f6808 100644 --- a/client/controller/models/apps/apps_test.go +++ b/client/controller/models/apps/apps_test.go @@ -288,7 +288,7 @@ func TestAppsRun(t *testing.T) { func TestAppsList(t *testing.T) { t.Parallel() - expected := []api.App{ + expected := api.Apps{ api.App{ ID: "example-go", Created: "2014-01-01T00:00:00UTC", diff --git a/client/controller/models/domains/domains.go b/client/controller/models/domains/domains.go index abf64c90d1..705f76c83c 100644 --- a/client/controller/models/domains/domains.go +++ b/client/controller/models/domains/domains.go @@ -9,7 +9,7 @@ import ( ) // List domains registered with an app. -func List(c *client.Client, appID string, results int) ([]api.Domain, int, error) { +func List(c *client.Client, appID string, results int) (api.Domains, int, error) { u := fmt.Sprintf("/v1/apps/%s/domains/", appID) body, count, err := c.LimitedRequest(u, results) diff --git a/client/controller/models/domains/domains_test.go b/client/controller/models/domains/domains_test.go index 57b3459de0..e4cab5910c 100644 --- a/client/controller/models/domains/domains_test.go +++ b/client/controller/models/domains/domains_test.go @@ -86,7 +86,7 @@ func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { func TestDomainsList(t *testing.T) { t.Parallel() - expected := []api.Domain{ + expected := api.Domains{ api.Domain{ App: "example-go", Created: "2014-01-01T00:00:00UTC", diff --git a/client/controller/models/keys/keys.go b/client/controller/models/keys/keys.go index 45981fd920..2e3ade3f85 100644 --- a/client/controller/models/keys/keys.go +++ b/client/controller/models/keys/keys.go @@ -9,7 +9,7 @@ import ( ) // List keys on a controller. -func List(c *client.Client, results int) ([]api.Key, int, error) { +func List(c *client.Client, results int) (api.Keys, int, error) { body, count, err := c.LimitedRequest("/v1/keys/", results) if err != nil { diff --git a/client/controller/models/keys/keys_test.go b/client/controller/models/keys/keys_test.go index f435cd7e81..b44667b0a2 100644 --- a/client/controller/models/keys/keys_test.go +++ b/client/controller/models/keys/keys_test.go @@ -88,7 +88,7 @@ func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { func TestKeysList(t *testing.T) { t.Parallel() - expected := []api.Key{ + expected := api.Keys{ api.Key{ Created: "2014-01-01T00:00:00UTC", ID: "test@example.com", diff --git a/client/controller/models/ps/ps.go b/client/controller/models/ps/ps.go index 3abf57f464..8a28b787f4 100644 --- a/client/controller/models/ps/ps.go +++ b/client/controller/models/ps/ps.go @@ -10,7 +10,7 @@ import ( ) // List an app's processes. -func List(c *client.Client, appID string, results int) ([]api.Process, int, error) { +func List(c *client.Client, appID string, results int) (api.Processes, int, error) { u := fmt.Sprintf("/v1/apps/%s/containers/", appID) body, count, err := c.LimitedRequest(u, results) @@ -69,12 +69,17 @@ func Restart(c *client.Client, appID string, procType string, num int) ([]api.Pr } // ByType organizes processes of an app by process type. -func ByType(processes []api.Process) map[string][]api.Process { - psMap := make(map[string][]api.Process) +func ByType(processes api.Processes) api.ProcessTypes { + psMap := make(map[string]api.Processes) for _, ps := range processes { psMap[ps.Type] = append(psMap[ps.Type], ps) } - return psMap + processTypes := []api.ProcessType{} + for processType, processes := range psMap { + processTypes = append(processTypes, api.ProcessType{processType, processes}) + } + + return processTypes } diff --git a/client/controller/models/ps/ps_test.go b/client/controller/models/ps/ps_test.go index 0b85ad92de..e9bd38ee34 100644 --- a/client/controller/models/ps/ps_test.go +++ b/client/controller/models/ps/ps_test.go @@ -135,7 +135,7 @@ func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { func TestProcessesList(t *testing.T) { t.Parallel() - expected := []api.Process{ + expected := api.Processes{ api.Process{ Owner: "test", App: "example-go", diff --git a/client/controller/models/users/users.go b/client/controller/models/users/users.go index ea06bf8028..8113da68aa 100644 --- a/client/controller/models/users/users.go +++ b/client/controller/models/users/users.go @@ -8,7 +8,7 @@ import ( ) // List users registered with the controller. -func List(c *client.Client, results int) ([]api.User, int, error) { +func List(c *client.Client, results int) (api.Users, int, error) { body, count, err := c.LimitedRequest("/v1/users/", results) if err != nil { diff --git a/client/controller/models/users/users_test.go b/client/controller/models/users/users_test.go index f65072c85c..144089d350 100644 --- a/client/controller/models/users/users_test.go +++ b/client/controller/models/users/users_test.go @@ -54,7 +54,7 @@ func (fakeHTTPServer) ServeHTTP(res http.ResponseWriter, req *http.Request) { func TestUsersList(t *testing.T) { t.Parallel() - expected := []api.User{ + expected := api.Users{ api.User{ ID: 1, LastLogin: "2014-10-19T22:01:00.601Z", From dc71c58bbb9060a6e1d8d9f25c83d85505215f09 Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Mon, 8 Aug 2016 10:51:40 -0700 Subject: [PATCH 147/178] chore(planning): add July and August, up next, September --- docs/roadmap/planning.rst | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index 86c17238a6..8f5663ca73 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,32 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -July 2016 -~~~~~~~~~ +September 2016 +~~~~~~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, July 7nd** at **12pm MDT/1900 UTC**. The `event`_ can be added +**Thursday, September 1st** at **12pm MDT/1900 UTC**. The `event`_ can be added directly to your calendar. +August 2016 +~~~~~~~~~~~ + +- Introduction - Jason Hansen +- Megaboom Demo - Aaron Schlesinger +- Deployments Demo - Helgi Þorbjörnsson +- Workflow 2.3 Release Review - Jason Hansen +- Workflow 2.4 Up Next - Jason Hansen + +Archive: https://www.youtube.com/watch?v=ZWkDpi76H-E + +July 2016 +~~~~~~~~~ + +- Workflow 2.1 and 2.2 Release Review +- Helm Alpha.2 and Alpha.3 Review + +Archive: https://www.youtube.com/watch?v=BVHT03uQ1WU + June 2016 ~~~~~~~~~ @@ -170,7 +189,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/82ToK7 +.. _`event`: https://goo.gl/85tFYc .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From b0be46c946b4956cf0cc8fe84de5c5bd5f344f7e Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 9 Aug 2016 09:56:32 -0600 Subject: [PATCH 148/178] ref(Makefiles): remove obsolete "docker tag -f" flag Removes the -f flag from "docker tag" commands, since it is an error as of Docker v1.12. --- builder/Makefile | 2 +- controller/Makefile | 2 +- database/Makefile | 2 +- logger/Makefile | 2 +- logspout/Makefile | 2 +- publisher/Makefile | 2 +- registry/Makefile | 2 +- router/Makefile | 2 +- store/Makefile | 10 +++++----- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/builder/Makefile b/builder/Makefile index 5717442c4b..946d59db74 100644 --- a/builder/Makefile +++ b/builder/Makefile @@ -53,7 +53,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) + docker tag $(IMAGE) $(DEV_IMAGE) docker push $(DEV_IMAGE) set-image: check-deisctl diff --git a/controller/Makefile b/controller/Makefile index cc631abef6..c46c971553 100644 --- a/controller/Makefile +++ b/controller/Makefile @@ -38,7 +38,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) + docker tag $(IMAGE) $(DEV_IMAGE) docker push $(DEV_IMAGE) set-image: check-deisctl diff --git a/database/Makefile b/database/Makefile index a609e38961..808c032895 100644 --- a/database/Makefile +++ b/database/Makefile @@ -34,7 +34,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) + docker tag $(IMAGE) $(DEV_IMAGE) docker push $(DEV_IMAGE) set-image: check-deisctl diff --git a/logger/Makefile b/logger/Makefile index 329bde4b34..33c25011ff 100644 --- a/logger/Makefile +++ b/logger/Makefile @@ -44,7 +44,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) + docker tag $(IMAGE) $(DEV_IMAGE) docker push $(DEV_IMAGE) set-image: check-deisctl diff --git a/logspout/Makefile b/logspout/Makefile index 1a3b6341f6..927b7c7a4a 100644 --- a/logspout/Makefile +++ b/logspout/Makefile @@ -44,7 +44,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(RELEASE_IMAGE) $(DEV_DOCKER_IMAGE) + docker tag $(RELEASE_IMAGE) $(DEV_DOCKER_IMAGE) docker push $(DEV_DOCKER_IMAGE) set-image: check-deisctl diff --git a/publisher/Makefile b/publisher/Makefile index cb2edae7b3..e85ef8fd4f 100644 --- a/publisher/Makefile +++ b/publisher/Makefile @@ -32,7 +32,7 @@ install: check-deisctl dev-release: push set-image push: check-registry - docker tag -f $(RELEASE_IMAGE) $(REMOTE_IMAGE) + docker tag $(RELEASE_IMAGE) $(REMOTE_IMAGE) docker push $(REMOTE_IMAGE) set-image: check-deisctl diff --git a/registry/Makefile b/registry/Makefile index 3edc6aa137..9f69f2cad3 100644 --- a/registry/Makefile +++ b/registry/Makefile @@ -34,7 +34,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) + docker tag $(IMAGE) $(DEV_IMAGE) docker push $(DEV_IMAGE) set-image: check-deisctl diff --git a/router/Makefile b/router/Makefile index 29d1fe17ac..07fc78a0ab 100644 --- a/router/Makefile +++ b/router/Makefile @@ -46,7 +46,7 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(IMAGE) $(DEV_IMAGE) + docker tag $(IMAGE) $(DEV_IMAGE) docker push $(DEV_IMAGE) set-image: check-deisctl diff --git a/store/Makefile b/store/Makefile index 8f1880fcda..2aa0f6d6d4 100644 --- a/store/Makefile +++ b/store/Makefile @@ -70,15 +70,15 @@ run: install start dev-release: push set-image push: check-registry - docker tag -f $(ADMIN_IMAGE) $(ADMIN_DEV_IMAGE) + docker tag $(ADMIN_IMAGE) $(ADMIN_DEV_IMAGE) docker push $(ADMIN_DEV_IMAGE) - docker tag -f $(DAEMON_IMAGE) $(DAEMON_DEV_IMAGE) + docker tag $(DAEMON_IMAGE) $(DAEMON_DEV_IMAGE) docker push $(DAEMON_DEV_IMAGE) - docker tag -f $(GATEWAY_IMAGE) $(GATEWAY_DEV_IMAGE) + docker tag $(GATEWAY_IMAGE) $(GATEWAY_DEV_IMAGE) docker push $(GATEWAY_DEV_IMAGE) - docker tag -f $(METADATA_IMAGE) $(METADATA_DEV_IMAGE) + docker tag $(METADATA_IMAGE) $(METADATA_DEV_IMAGE) docker push $(METADATA_DEV_IMAGE) - docker tag -f $(MONITOR_IMAGE) $(MONITOR_DEV_IMAGE) + docker tag $(MONITOR_IMAGE) $(MONITOR_DEV_IMAGE) docker push $(MONITOR_DEV_IMAGE) set-image: check-deisctl From 7ced4e382747d2f5974a07f75c3017ccd0fd83ff Mon Sep 17 00:00:00 2001 From: Nathan Samson Date: Sat, 6 Aug 2016 12:30:26 +0200 Subject: [PATCH 149/178] fix(logspout): Ignore empty events This refactors some of the attaching / debugging code. * Full event info is logged (with no modifications) This prevents crashes when the fields are empty which seems to be the case with newer docker events * The full container IDs are used to attach This is just paranoia in case there is a collision on the fairly arbitrarily chosen first 12 characters of the container ID --- logspout/attacher.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/logspout/attacher.go b/logspout/attacher.go index 7af181783f..be3fee92e4 100644 --- a/logspout/attacher.go +++ b/logspout/attacher.go @@ -26,15 +26,19 @@ func NewAttachManager(client *docker.Client) *AttachManager { containers, err := client.ListContainers(docker.ListContainersOptions{}) assert(err, "attacher") for _, listing := range containers { - m.attach(listing.ID[:12]) + m.attach(listing.ID) } go func() { events := make(chan *docker.APIEvents) assert(client.AddEventListener(events), "attacher") for msg := range events { - debug("event:", msg.ID[:12], msg.Status) - if msg.Status == "start" { - go m.attach(msg.ID[:12]) + if msg.Status != "" { + debug("event:", msg.Status, msg.From, msg.ID, "(Status/From/ID)") + if msg.Status == "start" { + go m.attach(msg.ID) + } + } else { + debug("event: unknown (probably post API v1.22)") } } log.Fatal("ruh roh") // todo: loop? @@ -44,6 +48,10 @@ func NewAttachManager(client *docker.Client) *AttachManager { func (m *AttachManager) attach(id string) { container, err := m.client.InspectContainer(id) + shortId := id + if len(shortId) > 12 { + shortId = id[:12] + } assert(err, "attacher") name := container.Name[1:] success := make(chan struct{}) @@ -63,7 +71,7 @@ func (m *AttachManager) attach(id string) { }) outwr.Close() errwr.Close() - debug("attach:", id, "finished") + debug("attach:", shortId, "finished") if err != nil { close(success) failure <- err @@ -80,10 +88,10 @@ func (m *AttachManager) attach(id string) { m.Unlock() success <- struct{}{} m.send(&AttachEvent{ID: id, Name: name, Type: "attach"}) - debug("attach:", id, name, "success") + debug("attach:", shortId, name, "success") return } - debug("attach:", id, "failure:", <-failure) + debug("attach:", shortId, "failure:", <-failure) } func (m *AttachManager) send(event *AttachEvent) { From 378663ffa58283724ace84d03accf8e125a137c2 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 9 Aug 2016 10:02:10 -0600 Subject: [PATCH 150/178] chore(*): update base to alpine:3.4 Updates Docker base images to `alpine:3.4` to benefit from current code and fixes. Leaves database intact, since upgrading to a new version of postgresql isn't a smooth upgrade path. --- controller/Dockerfile | 2 +- controller/build.sh | 1 + logger/image/Dockerfile | 2 +- logspout/image/Dockerfile | 2 +- publisher/image/Dockerfile | 2 +- registry/Dockerfile | 2 +- router/Dockerfile | 2 +- tests/fixtures/mock-store/Dockerfile | 2 +- tests/fixtures/mock-store/build.sh | 1 + tests/fixtures/test-etcd/Dockerfile | 2 +- 10 files changed, 10 insertions(+), 8 deletions(-) diff --git a/controller/Dockerfile b/controller/Dockerfile index 8287484d34..0c82254ab4 100644 --- a/controller/Dockerfile +++ b/controller/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 # install common packages RUN apk add --no-cache curl bash sudo diff --git a/controller/build.sh b/controller/build.sh index c7077a3abc..0b2fefa4ad 100755 --- a/controller/build.sh +++ b/controller/build.sh @@ -17,6 +17,7 @@ apk add --no-cache \ libpq \ openldap \ openldap-dev \ + openssl \ postgresql-dev \ python \ python-dev diff --git a/logger/image/Dockerfile b/logger/image/Dockerfile index ab31ee7d0d..c24641948f 100644 --- a/logger/image/Dockerfile +++ b/logger/image/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 ENTRYPOINT ["/bin/logger"] CMD ["--enable-publish"] diff --git a/logspout/image/Dockerfile b/logspout/image/Dockerfile index 1fb9005158..001b7e0ef7 100644 --- a/logspout/image/Dockerfile +++ b/logspout/image/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 ENV DOCKER_HOST unix:///tmp/docker.sock ENV ROUTESPATH /tmp diff --git a/publisher/image/Dockerfile b/publisher/image/Dockerfile index dc2112765d..cc7b62cb18 100644 --- a/publisher/image/Dockerfile +++ b/publisher/image/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 # install curl in the image so it is possible to get the runtime # profiling information without any additional package installation. diff --git a/registry/Dockerfile b/registry/Dockerfile index 47b1552d23..79c501a4c1 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 # install common packages RUN apk add --no-cache curl bash sudo diff --git a/router/Dockerfile b/router/Dockerfile index b007937dcb..d25b20f0b3 100644 --- a/router/Dockerfile +++ b/router/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 # install common packages RUN apk add --no-cache \ diff --git a/tests/fixtures/mock-store/Dockerfile b/tests/fixtures/mock-store/Dockerfile index c1c3c43959..700a53fc39 100644 --- a/tests/fixtures/mock-store/Dockerfile +++ b/tests/fixtures/mock-store/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 # install common packages RUN apk add --no-cache curl bash sudo diff --git a/tests/fixtures/mock-store/build.sh b/tests/fixtures/mock-store/build.sh index bc5340d178..8f606d6e4d 100755 --- a/tests/fixtures/mock-store/build.sh +++ b/tests/fixtures/mock-store/build.sh @@ -17,6 +17,7 @@ apk add --no-cache \ file \ gcc \ git \ + openssl \ python-dev # install etcdctl diff --git a/tests/fixtures/test-etcd/Dockerfile b/tests/fixtures/test-etcd/Dockerfile index 5f77cfc787..d24d6a298f 100644 --- a/tests/fixtures/test-etcd/Dockerfile +++ b/tests/fixtures/test-etcd/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.3 +FROM alpine:3.4 # install common packages RUN apk add --no-cache curl tar From bdd195ddd3f1f1e397c635ded129e3f64282ffdc Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 9 Aug 2016 10:19:25 -0600 Subject: [PATCH 151/178] chore(buildpacks): update heroku-buildpack-go to v44 See https://github.com/heroku/heroku-buildpack-go/compare/v42...v44 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 9b0878735e..cd1ec328a7 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v71 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v42 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v44 From 35afb8de57f173af7aba3523ce53639ccb94a0fc Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 9 Aug 2016 10:19:43 -0600 Subject: [PATCH 152/178] chore(buildpacks): update heroku-buildpack-scala to v72 See https://github.com/heroku/heroku-buildpack-scala/compare/v71...v72 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index cd1ec328a7..7cf49dbd74 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -38,5 +38,5 @@ download_buildpack https://github.com/heroku/heroku-buildpack-play.git download_buildpack https://github.com/heroku/heroku-buildpack-python.git v81 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 -download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v71 +download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v72 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v44 From 1c562c3dbd85b03e2612a7973f0ec0aca2a954d7 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Fri, 12 Aug 2016 10:41:15 -0600 Subject: [PATCH 153/178] chore(buildpacks): update heroku-buildpack-php to v109 See https://github.com/heroku/heroku-buildpack-php/compare/v108...v109 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 7cf49dbd74..7d86d221fc 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v81 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v108 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v109 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v72 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v44 From 9b21fcc698a4ef86b37273c24cae79ea8f6fdc80 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 22 Aug 2016 10:10:48 -0600 Subject: [PATCH 154/178] chore(release): update version in master to v1.13.3 --- CHANGELOG.md | 25 +++++++ README.md | 2 +- contrib/coreos/user-data.example | 4 +- contrib/utils.sh | 2 +- docs/_includes/_get-the-source.rst | 2 +- docs/installing_deis/install-deisctl.rst | 10 +-- docs/installing_deis/install-platform.rst | 2 +- docs/managing_deis/upgrading-deis.rst | 14 ++-- docs/reference/api-v1.7.rst | 84 +++++++++++------------ docs/roadmap/releases.rst | 3 - docs/troubleshooting_deis/index.rst | 2 +- 11 files changed, 86 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bb84f67ba..62d97371c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,28 @@ +### v1.13.2 -> v1.13.3 + +#### Features + + - [`d369fd7`](https://github.com/deis/deis/commit/d369fd7e811c24d9da4eb907fd1237400cc15114) contrib: Add script to restart all apps. + - [`ef80d81`](https://github.com/deis/deis/commit/ef80d818b01de5e69888192fb855c63374fce9cc) client: Sort listings + - [`968c48c`](https://github.com/deis/deis/commit/968c48c859e92539173032f26aa95afe6478a455) router: Add server_tokens option + +#### Fixes + + - [`d143b4b`](https://github.com/deis/deis/commit/d143b4bf7ba7cb14236748dc6e421554c95ecba8) logspout: Ignore events with short ID + +#### Documentation + + - [`6da7204`](https://github.com/deis/deis/commit/6da72045a36a49d6e6c8b4dbe59ff66695cc927d) dockerfiles: Make Bash requirement explicit in the documentation + +#### Maintenance + + - [`e30db13`](https://github.com/deis/deis/commit/e30db1391800284edf0937d5abfa7956179802af) buildpacks: update go, scala, and php buildpacks + - [`fc1518a`](https://github.com/deis/deis/commit/fc1518a66b9d28d29626696d11be07749cc121a1) (all): update base to alpine:3.4 + - [`fd35c66`](https://github.com/deis/deis/commit/fd35c66ab16c4a621e42f2f42da5b66cb2c63cda) planning: add July and August, up next, September + - [`3ef983f`](https://github.com/deis/deis/commit/3ef983f8c5c7c2d57f3261789a15443fb021f22e) (all): bump CoreOS to 1068.8.0 + - [`167a44a`](https://github.com/deis/deis/commit/167a44a43880ce47509651c3ee2507e9c4e3abca) buildpacks: update go, php, nodejs, python, and scala buildpacks + - [`8342efc`](https://github.com/deis/deis/commit/8342efc2b78b7691e2578e1ac719953739fea908) roadmap: clarify Deis v1 roadmap status + ### v1.13.1 -> v1.13.2 #### Fixes diff --git a/README.md b/README.md index 88e9388fad..8753cd7794 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. [![Build Status](https://ci.deis.io/buildStatus/icon?job=test-acceptance)](https://ci.deis.io/job/test-acceptance/) -[![Current Release](http://img.shields.io/badge/release-v1.13.2-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.2) +[![Current Release](http://img.shields.io/badge/release-v1.13.3-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.3) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) New to Deis? Learn more about Deis [Concepts](http://docs.deis.io/en/latest/understanding_deis/concepts/), [Architecture](http://docs.deis.io/en/latest/understanding_deis/architecture/) and how to [Deploy an Application](http://docs.deis.io/en/latest/using_deis/deploy-application/). diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index 1334dcff29..ff27259c44 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -111,7 +111,7 @@ coreos: [Service] Type=oneshot - ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.2' + ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.3' - name: increase-nf_conntrack-connections.service command: start content: | @@ -125,7 +125,7 @@ coreos: write_files: - path: /etc/deis-release content: | - DEIS_RELEASE=v1.13.2 + DEIS_RELEASE=v1.13.3 - path: /etc/motd content: " \e[31m* * \e[34m* \e[32m***** \e[39mddddd eeeeeee iiiiiii ssss\n\e[31m* * \e[34m* * \e[32m* * \e[39md d e e i s s\n \e[31m* * \e[34m***** \e[32m***** \e[39md d e i s\n\e[32m***** \e[31m* * \e[34m* \e[39md d e i s\n\e[32m* * \e[31m* * \e[34m* * \e[39md d eee i sss\n\e[32m***** \e[31m* * \e[34m***** \e[39md d e i s\n \e[34m* \e[32m***** \e[31m* * \e[39md d e i s\n \e[34m* * \e[32m* * \e[31m* * \e[39md d e e i s s\n\e[34m***** \e[32m***** \e[31m* * \e[39mddddd eeeeeee iiiiiii ssss\n\n\e[39mWelcome to Deis\t\t\tPowered by Core\e[38;5;45mO\e[38;5;206mS\e[39m\n" - path: /etc/profile.d/nse-function.sh diff --git a/contrib/utils.sh b/contrib/utils.sh index 1c4fbbc4d8..136145e249 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -14,4 +14,4 @@ function echo_green { export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} export COREOS_VERSION=${COREOS_VERSION:-1068.8.0} -export DEIS_RELEASE=1.13.2 +export DEIS_RELEASE=1.13.3 diff --git a/docs/_includes/_get-the-source.rst b/docs/_includes/_get-the-source.rst index a83be05c44..7dc55b7743 100644 --- a/docs/_includes/_get-the-source.rst +++ b/docs/_includes/_get-the-source.rst @@ -6,7 +6,7 @@ this documentation. Download an archive file from the `releases page`_, or use $ git clone https://github.com/deis/deis.git $ cd deis - $ git checkout v1.13.2 + $ git checkout v1.13.3 Check out the latest Deis release, rather than using the default (master). diff --git a/docs/installing_deis/install-deisctl.rst b/docs/installing_deis/install-deisctl.rst index 8868076d85..3c2625547a 100644 --- a/docs/installing_deis/install-deisctl.rst +++ b/docs/installing_deis/install-deisctl.rst @@ -18,11 +18,11 @@ and run the latest installer: .. code-block:: console $ cd ~/bin - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.2 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.3 $ # on CoreOS, add "sudo" to install to /opt/bin/deisctl - $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.2 + $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.3 -This installs ``deisctl`` version 1.13.2 to the current directory, and downloads the matching +This installs ``deisctl`` version 1.13.3 to the current directory, and downloads the matching Deis systemd unit files used to schedule the components. Link ``deisctl`` into /usr/local/bin, so it will be in your ``$PATH``: @@ -33,10 +33,10 @@ it will be in your ``$PATH``: To change installation options, save the installer directly: .. image:: download-linux-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.2-linux-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.3-linux-amd64.run .. image:: download-osx-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.2-darwin-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.3-darwin-amd64.run Then run the downloaded file as a shell script. Append ``--help`` to see what options are available. diff --git a/docs/installing_deis/install-platform.rst b/docs/installing_deis/install-platform.rst index 6b11c7ab1d..915dabb17f 100644 --- a/docs/installing_deis/install-platform.rst +++ b/docs/installing_deis/install-platform.rst @@ -14,7 +14,7 @@ First check that you have ``deisctl`` installed and the version is correct. .. code-block:: console $ deisctl --version - 1.13.2 + 1.13.3 If not, follow instructions to :ref:`install_deisctl`. diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index 63d39fed87..621286342f 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -41,10 +41,10 @@ Finally, update ``deisctl`` to the new version and reinstall: .. code-block:: console - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.2 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.3 $ deisctl --version # should match the desired platform - 1.13.2 - $ deisctl config platform set version=v1.13.2 + 1.13.3 + $ deisctl config platform set version=v1.13.3 $ deisctl install platform $ deisctl start platform @@ -105,11 +105,11 @@ to. Care should be taken not to overwrite the existing ``deisctl`` version. .. code-block:: console $ mkdir /tmp/upgrade - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.2 /tmp/upgrade + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.3 /tmp/upgrade $ /tmp/upgrade/deisctl --version # should match the desired platform - 1.13.2 + 1.13.3 $ /tmp/upgrade/deisctl refresh-units - $ /tmp/upgrade/deisctl config platform set version=v1.13.2 + $ /tmp/upgrade/deisctl config platform set version=v1.13.3 Now it is possible to prepare the cluster for the upgrade using the old ``deisctl`` binary. This command will shutdown and uninstall all components of the cluster except the router and publisher. This means your services should still be @@ -134,7 +134,7 @@ If the process were to fail, the old version can be restored manually by reinsta $ /tmp/upgrade/deisctl stop platform $ /tmp/upgrade/deisctl uninstall platform - $ /tmp/upgrade/deisctl config platform set version=v1.13.2 + $ /tmp/upgrade/deisctl config platform set version=v1.13.3 $ /opt/bin/deisctl refresh-units $ /opt/bin/deisctl install platform $ /opt/bin/deisctl start platform diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index e444ac4d3e..401b95584a 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -51,7 +51,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -89,7 +89,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json {"token": "abc123"} @@ -112,7 +112,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Regenerate Token ```````````````` @@ -144,7 +144,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json {"token": "abc123"} @@ -182,7 +182,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Applications @@ -206,7 +206,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -252,7 +252,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -283,7 +283,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 List Application Details @@ -303,7 +303,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -367,7 +367,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: text/plain 16:51:14 deis[api]: test created initial release @@ -392,7 +392,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json [0, "hi\n"] @@ -419,7 +419,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -452,7 +452,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -497,7 +497,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -527,7 +527,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Containers @@ -551,7 +551,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -591,7 +591,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -631,7 +631,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json [ @@ -666,7 +666,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json [ @@ -701,7 +701,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json [ @@ -739,7 +739,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Configuration @@ -763,7 +763,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -801,7 +801,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json X-Deis-Release: 3 @@ -844,7 +844,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json X-Deis-Release: 4 @@ -886,7 +886,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -924,7 +924,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -954,7 +954,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Builds @@ -978,7 +978,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1033,7 +1033,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json X-Deis-Release: 4 @@ -1071,7 +1071,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1133,7 +1133,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1169,7 +1169,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json {"version": 5} @@ -1196,7 +1196,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1238,7 +1238,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1268,7 +1268,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Permissions @@ -1296,7 +1296,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1326,7 +1326,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Remove Application Permission @@ -1346,7 +1346,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 List Administrators ``````````````````` @@ -1365,7 +1365,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { @@ -1408,7 +1408,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Remove User's Administrative Privileges ``````````````````````````````````````` @@ -1431,7 +1431,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Users ----- @@ -1457,7 +1457,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.2 + DEIS_PLATFORM_VERSION: 1.13.3 Content-Type: application/json { diff --git a/docs/roadmap/releases.rst b/docs/roadmap/releases.rst index 8f738d96b3..7a9094b2dd 100644 --- a/docs/roadmap/releases.rst +++ b/docs/roadmap/releases.rst @@ -49,13 +49,10 @@ Patch Release docs/troubleshooting_deis/index.rst \ logger/image/Dockerfile \ logspout/image/Dockerfile \ - mesos/template \ - mesos/zookeeper/Dockerfile \ publisher/image/Dockerfile \ registry/Dockerfile \ router/Dockerfile \ store/base/Dockerfile \ - swarm/image/Dockerfile \ version/version.go - Update the CHANGELOG to include all commits since the last release. Since diff --git a/docs/troubleshooting_deis/index.rst b/docs/troubleshooting_deis/index.rst index 087d5f70ac..31b479aee9 100644 --- a/docs/troubleshooting_deis/index.rst +++ b/docs/troubleshooting_deis/index.rst @@ -107,7 +107,7 @@ If you built ``deisctl`` locally or didn't use its installer, you may see an err This is because ``deisctl`` could not find unit files for Deis locally. Run ``deisctl help refresh-units`` to see where ``deisctl`` searches, and then run a command such as -``deisctl refresh-units --tag=v1.13.2``, or set the ``$DEISCTL_UNITS`` environment variable to a directory +``deisctl refresh-units --tag=v1.13.3``, or set the ``$DEISCTL_UNITS`` environment variable to a directory containing the unit files. Other issues From bad5d225c19eb6414de33ee0a20b8b0bd0298f47 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 25 Aug 2016 14:07:53 -0600 Subject: [PATCH 155/178] fix(database/build.sh): refer to stable pv package location --- database/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/build.sh b/database/build.sh index 341600a6c1..084131cc04 100755 --- a/database/build.sh +++ b/database/build.sh @@ -25,8 +25,8 @@ apk add --update-cache \ python-dev # pv port. -curl http://dl-3.alpinelinux.org/alpine/edge/testing/x86_64/pv-1.6.0-r0.apk -o /tmp/pv-1.6.0-r0.apk -apk add /tmp/pv-1.6.0-r0.apk +curl https://s3-us-west-2.amazonaws.com/get-deis/pv-1.6.0-r1.apk -o /tmp/pv-1.6.0-r1.apk +apk add /tmp/pv-1.6.0-r1.apk /etc/init.d/postgresql stop || true From f73d59dcb58aa0f6b2592102a3e78f4781b10127 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 24 Aug 2016 10:48:23 -0600 Subject: [PATCH 156/178] chore(buildpacks): update heroku-buildpack-go to v46 See https://github.com/heroku/heroku-buildpack-go/compare/v44...v46 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 7d86d221fc..88c31d741f 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v109 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v72 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v44 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v46 From 27aa1e8041a209b61b534f12579b1a24be001186 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 31 Aug 2016 09:08:55 -0500 Subject: [PATCH 157/178] chore(router): upgrade nginx to 1.10.1 stable See http://nginx.org/en/CHANGES-1.10 --- router/rootfs/bin/build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/rootfs/bin/build b/router/rootfs/bin/build index 9efc225276..bd329f2e13 100755 --- a/router/rootfs/bin/build +++ b/router/rootfs/bin/build @@ -2,7 +2,7 @@ set -eof pipefail -export NGINX_VERSION=1.9.6 +export NGINX_VERSION=1.10.1 export NAXSI_VERSION=0d53a64ed856e694fcb4038748c8cf6d5551a603 export NDK_VERSION=0.2.19 export VTS_VERSION=22c51e201a550bb94e96239fef541347beb4eeca @@ -33,7 +33,7 @@ apk add --no-cache \ zlib-dev # download, verify and extract the source files -get_src ed501fc6d0eff9d3bc1049cc1ba3a3ac8c602de046acb2a4c108392bbfa865ea \ +get_src 1fd35846566485e03c0e318989561c135c598323ff349c503a6c14826487a801 \ "http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz" get_src 128b56873eedbd3f240dc0f88a8b260d791321db92f14ba2fc5c49fc5307e04d \ From 281343c7a87933585490d6d1ecadf28162a9e92e Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Mon, 12 Sep 2016 15:28:57 -0700 Subject: [PATCH 158/178] chore(community): september 2016 community meeting --- docs/roadmap/planning.rst | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index 8f5663ca73..50e404045b 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,24 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -September 2016 -~~~~~~~~~~~~~~ +October 2016 +~~~~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, September 1st** at **12pm MDT/1900 UTC**. The `event`_ can be added +**Thursday, October 6th** at **12pm MDT/1900 UTC**. The `event`_ can be added directly to your calendar. +September 2016 +~~~~~~~~~~~~~~ + +- Introduction - Gabe Monroy +- Meet Matt Tucker - Seth Goings & Matt Tucker +- Workflow 2.4 Release Review - Jason Hansen +- Autoscaling Preview - Helgi Þorbjörnsson +- Roadmap Process - Jason Hansen + +Archive: https://www.youtube.com/watch?v=sDaAZGDcRgU + August 2016 ~~~~~~~~~~~ @@ -189,7 +200,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: https://goo.gl/85tFYc +.. _`event`: http://goo.gl/adIzE5 .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From d6f6811be752798d5736ae84506d6cbf971105b1 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Wed, 21 Sep 2016 17:07:25 -0600 Subject: [PATCH 159/178] tests(container): add test case for duplicate containers --- controller/api/tests/test_container.py | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/controller/api/tests/test_container.py b/controller/api/tests/test_container.py index d941d48f6f..8cbffdfe98 100644 --- a/controller/api/tests/test_container.py +++ b/controller/api/tests/test_container.py @@ -667,3 +667,39 @@ def test_restart_containers(self): HTTP_AUTHORIZATION='token {}'.format(self.token)) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), container_set.filter(type='web', num=1).count()) + + def test_prune_old_containers(self): + url = '/v1/apps' + response = self.client.post(url, HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 201) + app_id = response.data['id'] + # post a new build + build_url = "/v1/apps/{app_id}/builds".format(**locals()) + body = {'image': 'autotest/example', 'sha': 'a'*40, + 'procfile': json.dumps({'web': 'node server.js', 'worker': 'node worker.js'})} + response = self.client.post(build_url, json.dumps(body), content_type='application/json', + HTTP_AUTHORIZATION='token {}'.format(self.token)) + url = "/v1/apps/{app_id}/scale".format(**locals()) + body = {'web': 4, 'worker': 8} + response = self.client.post(url, json.dumps(body), content_type='application/json', + HTTP_AUTHORIZATION='token {}'.format(self.token)) + self.assertEqual(response.status_code, 204) + containers = App.objects.get(id=app_id).container_set.all() + self.assertEqual(containers.count(), 12) + # save a representation of this container set to compare against later + repr_map = map(repr, containers) + # create some duplicate containers + for i in range(5): + for c in containers: + n = c.clone(c.release) + n.save() + # recreate the queryset since iterating caused it to be cached + containers = App.objects.get(id=app_id).container_set.all() + # test that duplicate containers actually exist at this point + self.assertEqual(containers.count(), 72) + # call the purge_containers method + app = App.objects.get(id=app_id) + app._prune_containers() + # verify that earlier duplicate containers went away + self.assertEqual(containers.count(), 12) + self.assertQuerysetEqual(containers, repr_map) From 898252599fbf50bd517bc19b8e0b25cf833b0cc7 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 22 Sep 2016 15:41:55 -0600 Subject: [PATCH 160/178] fix(models): prune old containers before deploy --- controller/api/models.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/controller/api/models.py b/controller/api/models.py index 87c59bc1e9..821f51bc6e 100644 --- a/controller/api/models.py +++ b/controller/api/models.py @@ -457,8 +457,25 @@ def _destroy_containers(self, to_destroy): log_event(self, err, logging.ERROR) raise RuntimeError(err) + def _prune_containers(self): + try: + containers = self.container_set.exclude(type='run') + # find the unique type+num values of containers + vals = set((i[0], i[1]) for i in containers.values_list('type', 'num')) + for typ, num in vals: + # delete all but the latest of each type+num + group = containers.filter(type=typ, num=num) + if group.count() > 1: + latest = group.latest() + group.exclude(uuid=latest.uuid).delete() + except Exception as e: + # just log the error, don't raise it + err = '(_prune_containers): {}'.format(e) + log_event(self, err, logging.ERROR) + def deploy(self, user, release): """Deploy a new release to this application""" + self._prune_containers() existing = self.container_set.exclude(type='run') new = [] scale_types = set() @@ -609,7 +626,7 @@ def __str__(self): return self.short_name() class Meta: - get_latest_by = '-created' + get_latest_by = 'created' ordering = ['created'] @property From e0e2e294f28ee5a1c77a1ade91be0a1f9649711c Mon Sep 17 00:00:00 2001 From: Josh Mize Date: Mon, 26 Sep 2016 00:37:24 -0500 Subject: [PATCH 161/178] fix(perms): user-only settings file permissions Settings files contain auth tokens and should not be world-readable. --- client/controller/client/client.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/controller/client/client.go b/client/controller/client/client.go index d13d63bfe3..9247700cef 100644 --- a/client/controller/client/client.go +++ b/client/controller/client/client.go @@ -94,11 +94,11 @@ func (c Client) Save() error { return err } - if err = os.MkdirAll(path.Join(FindHome(), "/.deis/"), 0775); err != nil { + if err = os.MkdirAll(path.Join(FindHome(), "/.deis/"), 0700); err != nil { return err } - return ioutil.WriteFile(locateSettingsFile(), settingsContents, 0775) + return ioutil.WriteFile(locateSettingsFile(), settingsContents, 0600) } // Delete user's settings file. From 0dcdd33c7dcc555c8210e7822d7c7ff0d30ee45c Mon Sep 17 00:00:00 2001 From: Maciej Malecki Date: Wed, 28 Sep 2016 13:05:18 +0200 Subject: [PATCH 162/178] fix(client): do not add top level command to cmdArgs this is a case for Deis CLI plugins. If you have `deis ssh` command it should run `deis-ssh` instead of `deis-ssh ssh`. --- client/deis.go | 27 ++++++++++++++++----------- client/deis_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/client/deis.go b/client/deis.go index 05a46c6151..977875524d 100644 --- a/client/deis.go +++ b/client/deis.go @@ -11,6 +11,8 @@ import ( docopt "github.com/docopt/docopt-go" ) +const extensionPrefix = "deis-" + // main exits with the return value of Command(os.Args[1:]), deferring all logic to // a func we can test. func main() { @@ -119,23 +121,14 @@ Use 'git push deis master' to deploy to an application. return 0 default: env := os.Environ() - extCmd := "deis-" + command - binary, err := exec.LookPath(extCmd) + binary, err := exec.LookPath(extensionPrefix + command) if err != nil { parser.PrintUsage() return 1 } - cmdArgv := []string{extCmd} - - cmdSplit := strings.Split(argv[0], command+":") - - if len(cmdSplit) > 1 { - argv[0] = cmdSplit[1] - } - - cmdArgv = append(cmdArgv, argv...) + cmdArgv := prepareCmdArgs(command, argv) err = syscall.Exec(binary, cmdArgv, env) if err != nil { @@ -186,6 +179,18 @@ func parseArgs(argv []string) (string, []string) { return "", argv } +// split original command and pass its first element in arguments +func prepareCmdArgs(command string, argv []string) []string { + cmdArgv := []string{extensionPrefix + command} + cmdSplit := strings.Split(argv[0], command+":") + + if len(cmdSplit) > 1 { + cmdArgv = append(cmdArgv, cmdSplit[1]) + } + + return append(cmdArgv, argv[1:]...) +} + func replaceShortcut(command string) string { shortcuts := map[string]string{ "create": "apps:create", diff --git a/client/deis_test.go b/client/deis_test.go index 1a2f927b36..2a8cef093e 100644 --- a/client/deis_test.go +++ b/client/deis_test.go @@ -61,6 +61,32 @@ func TestCommandSplitting(t *testing.T) { } } +func TestTopLevelCommandArgsPreparing(t *testing.T) { + t.Parallel() + + command := "ssh" + argv := []string{"ssh"} + expected := []string{"deis-ssh"} + actual := prepareCmdArgs(command, argv) + + if !reflect.DeepEqual(expected, actual) { + t.Errorf("Expected %v, Got %v", expected, actual) + } +} + +func TestCommandWithParameterArgsPreparing(t *testing.T) { + t.Parallel() + + command := "ssh --help" + argv := []string{"ssh --help"} + expected := []string{"deis-ssh --help"} + actual := prepareCmdArgs(command, argv) + + if !reflect.DeepEqual(expected, actual) { + t.Errorf("Expected %v, Got %v", expected, actual) + } +} + func TestReplaceShortcutRepalce(t *testing.T) { t.Parallel() From bae34ccd1af691cb1673206283a621f0611be452 Mon Sep 17 00:00:00 2001 From: Jordan Yaker Date: Mon, 3 Oct 2016 08:08:29 -0400 Subject: [PATCH 163/178] fix(contrib/azure): update template to current API and images --- contrib/azure/arm-template.json | 92 ++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 29 deletions(-) diff --git a/contrib/azure/arm-template.json b/contrib/azure/arm-template.json index d95940cc01..0ae84123ea 100644 --- a/contrib/azure/arm-template.json +++ b/contrib/azure/arm-template.json @@ -28,23 +28,57 @@ "Standard_A1", "Standard_A2", "Standard_A3", + "Standard_A5", "Standard_A4", + "Standard_A6", + "Standard_A7", + "Basic_A0", + "Basic_A1", + "Basic_A2", + "Basic_A3", + "Basic_A4", + "Standard_D1_v2", + "Standard_D2_v2", + "Standard_D3_v2", + "Standard_D4_v2", + "Standard_D5_v2", + "Standard_D11_v2", + "Standard_D12_v2", + "Standard_D13_v2", + "Standard_D14_v2", + "Standard_D15_v2", + "Standard_F1", + "Standard_F2", + "Standard_F4", + "Standard_F8", + "Standard_F16", "Standard_D1", - "Standard_DS1", "Standard_D2", - "Standard_DS2", "Standard_D3", - "Standard_DS3", "Standard_D4", - "Standard_DS4", "Standard_D11", - "Standard_DS11", "Standard_D12", - "Standard_DS12", "Standard_D13", - "Standard_DS13", "Standard_D14", - "Standard_DS14" + "Standard_DS1_v2", + "Standard_DS2_v2", + "Standard_DS3_v2", + "Standard_DS4_v2", + "Standard_DS5_v2", + "Standard_DS11_v2", + "Standard_DS12_v2", + "Standard_DS13_v2", + "Standard_DS14_v2", + "Standard_DS15_v2", + "Standard_F1s", + "Standard_F2s", + "Standard_F4s", + "Standard_F8s", + "Standard_F16s", + "Standard_A8", + "Standard_A9", + "Standard_A10", + "Standard_A11" ], "metadata": { "description": "Instance size for the VMs" @@ -73,14 +107,14 @@ "metadata": { "description": "Number of member nodes" }, - "defaultValue": "3" + "defaultValue": 3 }, "dockerVolumeSize": { "type": "int", "metadata": { "description": "Size in GB of the Docker volume" }, - "defaultValue": "100" + "defaultValue": 100 }, "coreosVersion": { "type": "string", @@ -134,7 +168,7 @@ { "type": "Microsoft.Compute/availabilitySets", "name": "[variables('availabilitySetName')]", - "apiVersion": "2015-05-01-preview", + "apiVersion": "2016-03-30", "location": "[resourceGroup().location]", "properties": {} }, @@ -142,13 +176,13 @@ "type": "Microsoft.Storage/storageAccounts", "name": "[parameters('newStorageAccountName')]", "location": "[resourceGroup().location]", - "apiVersion": "2015-05-01-preview", + "apiVersion": "2015-06-15", "properties": { "accountType": "[parameters('storageAccountType')]" } }, { - "apiVersion": "2015-05-01-preview", + "apiVersion": "2016-06-01", "type": "Microsoft.Network/publicIPAddresses", "name": "[variables('loadBalancerPublicIPName')]", "location": "[resourceGroup().location]", @@ -160,7 +194,7 @@ } }, { - "apiVersion": "2015-05-01-preview", + "apiVersion": "2016-06-01", "type": "Microsoft.Network/publicIPAddresses", "name": "[concat(parameters('dnsPrefixNameForPublicIP'),copyIndex())]", "location": "[resourceGroup().location]", @@ -179,7 +213,7 @@ } }, { - "apiVersion": "2015-05-01-preview", + "apiVersion": "2016-06-01", "type": "Microsoft.Network/loadBalancers", "name": "[variables('loadBalancerName')]", "location": "[resourceGroup().location]", @@ -226,10 +260,10 @@ "id": "[variables('lbPoolID')]" }, "protocol": "TCP", - "frontendPort": "80", - "backendPort": "80", + "frontendPort": 80, + "backendPort": 80, "enableFloatingIP": false, - "idleTimeoutInMinutes": "10", + "idleTimeoutInMinutes": 10, "probe": { "id": "[variables('apiProbeID')]" } @@ -237,9 +271,6 @@ }, { "name": "[variables('loadBalancerBuilderRuleName')]", - "dependsOn": [ - "[variables('lbIPConfig')]" - ], "properties": { "frontendIPConfiguration": { "id": "[variables('lbIPConfig')]" @@ -248,10 +279,10 @@ "id": "[variables('lbPoolID')]" }, "protocol": "TCP", - "frontendPort": "2222", - "backendPort": "2222", + "frontendPort": 2222, + "backendPort": 2222, "enableFloatingIP": false, - "idleTimeoutInMinutes": "10" + "idleTimeoutInMinutes": 10 } } ], @@ -260,9 +291,9 @@ "name": "[variables('apiProbeName')]", "properties": { "protocol": "HTTP", - "port": "80", - "intervalInSeconds": "5", - "numberOfProbes": "2", + "port": 80, + "intervalInSeconds": 5, + "numberOfProbes": 2, "requestPath": "/health-check" } } @@ -274,6 +305,9 @@ "name": "[variables('virtualNetworkName')]", "location": "[resourceGroup().location]", "apiVersion": "2015-05-01-preview", + "dependsOn": [ + "[variables('nsgID')]" + ], "properties": { "addressSpace": { "addressPrefixes": [ @@ -303,7 +337,7 @@ "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]", "[variables('lbID')]" ], - "apiVersion": "2015-05-01-preview", + "apiVersion": "2016-06-01", "properties": { "ipConfigurations": [ { @@ -339,7 +373,7 @@ "[concat('Microsoft.Network/networkInterfaces/', 'nic', copyindex())]", "[concat('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]" ], - "apiVersion": "2015-05-01-preview", + "apiVersion": "2016-03-30", "properties": { "availabilitySet": { "id": "[resourceId('Microsoft.Compute/availabilitySets',variables('availabilitySetName'))]" From c7403bc7f0770e0a3aafa0076ea0f9def48e0f35 Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Fri, 7 Oct 2016 17:58:16 -0700 Subject: [PATCH 164/178] chore(community): add latest community meeting --- docs/roadmap/planning.rst | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/docs/roadmap/planning.rst b/docs/roadmap/planning.rst index 50e404045b..7967143d6d 100644 --- a/docs/roadmap/planning.rst +++ b/docs/roadmap/planning.rst @@ -30,13 +30,22 @@ Major decisions affecting the Roadmap are discussed during Release Planning Meet Release Planning Meetings are open to the public with access coordinated via the #deis IRC channel on Freenode. Notes from past meetings are below, along with links to a recording of the entire meeting on YouTube. -October 2016 -~~~~~~~~~~~~ +November 2016 +~~~~~~~~~~~~~ The next public release planning meeting for Deis will take place on -**Thursday, October 6th** at **12pm MDT/1900 UTC**. The `event`_ can be added +**Thursday, November 3rd** at **12pm MDT/1900 UTC**. The `event`_ can be added directly to your calendar. +October 2016 +~~~~~~~~~~~~ + +- Introduction - Seth Goings +- Release Review - Jason Hansen +- Deis CI Overview - Jonathan Chauncey + +Archive: https://www.youtube.com/watch?v=LhglIIh9izw + September 2016 ~~~~~~~~~~~~~~ @@ -200,7 +209,7 @@ Thanks to `Amy Lindburg`_ and our friends at `Docker`_ for their inspiration. .. _`Amy Lindburg`: https://twitter.com/amylindburg .. _`Docker`: https://www.docker.com/ -.. _`event`: http://goo.gl/adIzE5 +.. _`event`: https://goo.gl/FGNnOC .. _`LTS release issue`: https://github.com/deis/deis/issues/4776 .. _`Maintainers`: https://github.com/deis/deis/blob/master/MAINTAINERS.md .. _`Kubernetes`: http://kubernetes.io/ From 8cc4bbdf818bea0a67d4c75d8939e13c9ab6df91 Mon Sep 17 00:00:00 2001 From: Kent Rancourt Date: Thu, 3 Nov 2016 14:30:57 -0400 Subject: [PATCH 165/178] docs(layout): Update notice with URL for published v2 docs Previously this was a link to the doc source. A Container Days conference attendee just pointed out that it would be more convenient to be linked to the published docs instead. I think he's right. --- docs/theme/deis/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/theme/deis/layout.html b/docs/theme/deis/layout.html index 9887fb3688..766fe3f0fd 100644 --- a/docs/theme/deis/layout.html +++ b/docs/theme/deis/layout.html @@ -88,7 +88,7 @@

    {% block body %} {% endblock %} From 0b7a6fd8927f818f3e4583c9e80a07f34b95734a Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 21 Nov 2016 12:46:06 -0700 Subject: [PATCH 166/178] fix(deisctl/fleet_test): unparallelize new client test Effectively restores a Go 1.5 assumption about GOMAXPROCS=1. --- deisctl/backend/fleet/fleet_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/deisctl/backend/fleet/fleet_test.go b/deisctl/backend/fleet/fleet_test.go index 7d3fa77ba8..6eef4fb1df 100644 --- a/deisctl/backend/fleet/fleet_test.go +++ b/deisctl/backend/fleet/fleet_test.go @@ -174,8 +174,6 @@ func (s *syncBuffer) Bytes() []byte { } func TestNewClient(t *testing.T) { - t.Parallel() - // set required flags Flags.Endpoint = "http://127.0.0.1:4001" From 739d35a503d0345bff8b728cdb3fdd5a7257c436 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 22 Nov 2016 12:18:05 -0700 Subject: [PATCH 167/178] fix(Godeps): rewrite old Google Code archive package location --- Godeps/Godeps.json | 7 +------ .../src/github.com/docker/docker/graph/tags_unit_test.go | 3 ++- .../src/github.com/docker/docker/pkg/archive/archive.go | 2 +- .../github.com/docker/docker/pkg/archive/archive_test.go | 2 +- .../github.com/docker/docker/pkg/archive/archive_unix.go | 2 +- .../docker/docker/pkg/archive/archive_windows.go | 2 +- .../src/github.com/docker/docker/pkg/archive/changes.go | 2 +- .../src/github.com/docker/docker/pkg/archive/diff.go | 2 +- .../src/github.com/docker/docker/pkg/archive/diff_test.go | 2 +- .../src/github.com/docker/docker/pkg/archive/utils_test.go | 2 +- .../src/github.com/docker/docker/pkg/archive/wrap.go | 2 +- .../src/github.com/docker/docker/pkg/tarsum/tarsum.go | 2 +- .../src/github.com/docker/docker/pkg/tarsum/tarsum_test.go | 2 +- .../src/github.com/docker/docker/pkg/tarsum/versioning.go | 2 +- 14 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 093565f5a9..0d7e58a1a1 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,6 +1,6 @@ { "ImportPath": "github.com/deis/deis", - "GoVersion": "go1.5", + "GoVersion": "go1.7.3", "Packages": [ "./..." ], @@ -248,11 +248,6 @@ "Comment": "v1.5.0", "Rev": "a8a31eff10544860d2188dddabdee4d727545796" }, - { - "ImportPath": "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar", - "Comment": "v1.5.0", - "Rev": "a8a31eff10544860d2188dddabdee4d727545796" - }, { "ImportPath": "github.com/docker/libcontainer/netlink", "Comment": "v1.2.0-160-g7294213", diff --git a/Godeps/_workspace/src/github.com/docker/docker/graph/tags_unit_test.go b/Godeps/_workspace/src/github.com/docker/docker/graph/tags_unit_test.go index 58ad8ed878..f6a7231586 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/graph/tags_unit_test.go +++ b/Godeps/_workspace/src/github.com/docker/docker/graph/tags_unit_test.go @@ -7,11 +7,12 @@ import ( "path" "testing" + "archive/tar" + "github.com/docker/docker/daemon/graphdriver" _ "github.com/docker/docker/daemon/graphdriver/vfs" // import the vfs driver so it is used in the tests "github.com/docker/docker/image" "github.com/docker/docker/utils" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" ) const ( diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive.go index 68e5c1d300..b54bad308f 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive.go @@ -16,7 +16,7 @@ import ( "strings" "syscall" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" log "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/fileutils" diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_test.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_test.go index 6cd95d5ad5..dbe8d5ea79 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_test.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_test.go @@ -14,7 +14,7 @@ import ( "testing" "time" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) func TestCmdStreamLargeStderr(t *testing.T) { diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_unix.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_unix.go index c0e8aee93c..dd1b767fa8 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_unix.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_unix.go @@ -6,7 +6,7 @@ import ( "errors" "syscall" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) func setHeaderForSpecialDevice(hdr *tar.Header, ta *tarAppender, name string, stat interface{}) (nlink uint32, inode uint64, err error) { diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_windows.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_windows.go index 3cc2493f6f..6312df3c8d 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_windows.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/archive_windows.go @@ -3,7 +3,7 @@ package archive import ( - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) func setHeaderForSpecialDevice(hdr *tar.Header, ta *tarAppender, name string, stat interface{}) (nlink uint32, inode uint64, err error) { diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/changes.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/changes.go index 85217f6e08..bc67e9049a 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/changes.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/changes.go @@ -10,7 +10,7 @@ import ( "syscall" "time" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" log "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/pools" diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff.go index ca282071f5..1e9b968ca8 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff.go @@ -9,7 +9,7 @@ import ( "strings" "syscall" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" "github.com/docker/docker/pkg/pools" "github.com/docker/docker/pkg/system" diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff_test.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff_test.go index 758c4115d5..1af10fe6a3 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff_test.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/diff_test.go @@ -3,7 +3,7 @@ package archive import ( "testing" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) func TestApplyLayerInvalidFilenames(t *testing.T) { diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/utils_test.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/utils_test.go index 9048027203..539f694b8e 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/utils_test.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/utils_test.go @@ -9,7 +9,7 @@ import ( "path/filepath" "time" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) var testUntarFns = map[string]func(string, io.Reader) error{ diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/wrap.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/wrap.go index b8b60197a3..0abe320bee 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/wrap.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/archive/wrap.go @@ -2,7 +2,7 @@ package archive import ( "bytes" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" "io/ioutil" ) diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum.go index 88fcbe4a94..17ca379ba6 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum.go @@ -12,7 +12,7 @@ import ( "io" "strings" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) const ( diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum_test.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum_test.go index 26f12cc847..3ec7035cb3 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum_test.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/tarsum_test.go @@ -15,7 +15,7 @@ import ( "os" "testing" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) type testLayer struct { diff --git a/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/versioning.go b/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/versioning.go index 0ceb5298a3..243844e8c0 100644 --- a/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/versioning.go +++ b/Godeps/_workspace/src/github.com/docker/docker/pkg/tarsum/versioning.go @@ -6,7 +6,7 @@ import ( "strconv" "strings" - "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" + "archive/tar" ) // versioning of the TarSum algorithm From 1390a4651a4c1913a2684f8aad7ef39085c4542b Mon Sep 17 00:00:00 2001 From: Jason Hansen Date: Tue, 15 Nov 2016 09:32:18 -0800 Subject: [PATCH 168/178] style(docs): clarify workflow vs paas --- docs/theme/deis/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/theme/deis/layout.html b/docs/theme/deis/layout.html index 766fe3f0fd..a5eccfa914 100644 --- a/docs/theme/deis/layout.html +++ b/docs/theme/deis/layout.html @@ -88,7 +88,7 @@

    Version 1

    -

    This documentation is for Deis Workflow (v1). For v2 documentation visit https://deis.com/docs/workflow/.

    +

    This documentation is for Deis v1 PaaS. For Workflow (v2) documentation visit https://deis.com/docs/workflow/.

    {% block body %} {% endblock %} From e2912ea244499c05ae7e35e85b04629fb6c128ad Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 22 Nov 2016 17:00:20 -0700 Subject: [PATCH 169/178] chore(buildpacks): update heroku-buildpack-ruby to v150 See https://github.com/heroku/heroku-buildpack-ruby/compare/v146...v150 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 88c31d741f..48a70b3f2a 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -29,7 +29,7 @@ download_buildpack() { mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 -download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v146 +download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v150 download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v91 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 From 179cdf8d42921d89a87ecf7063fe5a9f3cef721e Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 22 Nov 2016 17:03:10 -0700 Subject: [PATCH 170/178] chore(buildpacks): update heroku-buildpack-python to v97 See https://github.com/heroku/heroku-buildpack-python/compare/v81...v97 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 48a70b3f2a..4a70ce34e6 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -35,7 +35,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-java.git download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 -download_buildpack https://github.com/heroku/heroku-buildpack-python.git v81 +download_buildpack https://github.com/heroku/heroku-buildpack-python.git v97 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v109 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v72 From 7165a12397ec0dcf87b32cd57c3984843ddbe3e5 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 22 Nov 2016 17:03:59 -0700 Subject: [PATCH 171/178] chore(buildpacks): update heroku-buildpack-php to v117 See https://github.com/heroku/heroku-buildpack-php/compare/v109...v117 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 4a70ce34e6..91994d2871 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -36,7 +36,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v97 -download_buildpack https://github.com/heroku/heroku-buildpack-php.git v109 +download_buildpack https://github.com/heroku/heroku-buildpack-php.git v117 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v72 download_buildpack https://github.com/heroku/heroku-buildpack-go.git v46 From 8e6d738e3f52424862d54104d70c8a15b50741bc Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Tue, 22 Nov 2016 17:04:57 -0700 Subject: [PATCH 172/178] chore(buildpacks): update heroku-buildpack-go to v54 See https://github.com/heroku/heroku-buildpack-go/compare/v46...v54 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index 91994d2871..e5faec56dd 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -39,4 +39,4 @@ download_buildpack https://github.com/heroku/heroku-buildpack-python.git download_buildpack https://github.com/heroku/heroku-buildpack-php.git v117 download_buildpack https://github.com/heroku/heroku-buildpack-clojure.git v75 download_buildpack https://github.com/heroku/heroku-buildpack-scala.git v72 -download_buildpack https://github.com/heroku/heroku-buildpack-go.git v46 +download_buildpack https://github.com/heroku/heroku-buildpack-go.git v54 From a0ba7cba318213fc49fe098afe260c52ffc9b6b0 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 8 Dec 2016 15:21:48 -0700 Subject: [PATCH 173/178] chore(buildpacks): update heroku-buildpack-grails to v21 See https://github.com/heroku/heroku-buildpack-grails/compare/v20...v21 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index e5faec56dd..b262c4d30c 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -33,7 +33,7 @@ download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v91 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 -download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v20 +download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v21 download_buildpack https://github.com/heroku/heroku-buildpack-play.git v26 download_buildpack https://github.com/heroku/heroku-buildpack-python.git v97 download_buildpack https://github.com/heroku/heroku-buildpack-php.git v117 From fbc4ac6e1be8170b2d96e026251f5298cd31b7b0 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 12 Jan 2017 16:27:39 -0700 Subject: [PATCH 174/178] chore(buildpacks): update heroku-buildpack-nodejs to v93 See https://github.com/heroku/heroku-buildpack-nodejs/compare/v91...v93 --- .../rootfs/usr/local/src/slugbuilder/builder/install-buildpacks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks index b262c4d30c..7f2c431b38 100755 --- a/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks +++ b/builder/rootfs/usr/local/src/slugbuilder/builder/install-buildpacks @@ -30,7 +30,7 @@ mkdir -p $BUILDPACK_INSTALL_PATH download_buildpack https://github.com/heroku/heroku-buildpack-multi.git v1.0.0 download_buildpack https://github.com/heroku/heroku-buildpack-ruby.git v150 -download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v91 +download_buildpack https://github.com/heroku/heroku-buildpack-nodejs.git v93 download_buildpack https://github.com/heroku/heroku-buildpack-java.git v44 download_buildpack https://github.com/heroku/heroku-buildpack-gradle.git v17 download_buildpack https://github.com/heroku/heroku-buildpack-grails.git v21 From 3a19353299f53d835073064091732ee3534a56ed Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 19 Jan 2017 10:31:50 -0700 Subject: [PATCH 175/178] chore(release): update version to v1.13.4 --- CHANGELOG.md | 23 +++++++ README.md | 2 +- client/deis-version | 2 +- contrib/coreos/user-data.example | 4 +- contrib/utils.sh | 2 +- controller/deis/__init__.py | 2 +- deisctl/client/client.go | 2 +- deisctl/deis-version | 2 +- docs/_includes/_get-the-source.rst | 2 +- docs/installing_deis/install-deisctl.rst | 10 +-- docs/installing_deis/install-platform.rst | 2 +- docs/managing_deis/upgrading-deis.rst | 14 ++-- docs/reference/api-v1.7.rst | 84 +++++++++++------------ docs/troubleshooting_deis/index.rst | 2 +- version/version.go | 2 +- 15 files changed, 89 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62d97371c5..e245a79c3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +### v1.13.3 -> v1.13.4 + +#### Fixes + + - [`c63ade6`](https://github.com/deis/deis/commit/c63ade6027870308f046f17ce3aab268d2fdc61e) Godeps,deisctl: serialize a unit test and fix a package import + - [`7fd534c`](https://github.com/deis/deis/commit/7fd534c0b16389960290eb149c97c869331140ad) models: prune old containers before deploy + - [`49b008c`](https://github.com/deis/deis/commit/49b008ccaaeca4a778dbf8010ec3cde41f9b2913) contrib/azure: update template to current API and images + - [`d5d51cd`](https://github.com/deis/deis/commit/d5d51cdbb5caec564877f514ed86b9547b856c6a) client: do not add top level command to cmdArgs + - [`4ade016`](https://github.com/deis/deis/commit/4ade01607b1cbe9c583e6491fd4cd3b8b9599a65) perms: user-only settings file permissions + - [`2381530`](https://github.com/deis/deis/commit/2381530543d3fec4cb472bae24a646a8c76cce0d) database/build.sh: refer to stable pv package location + +#### Documentation + + - [`68fb9b4`](https://github.com/deis/deis/commit/68fb9b4ca0d73339324766f44343441017ce1309) layout: Update notice with URL for published v2 docs + +#### Maintenance + + - [`9b83d00`](https://github.com/deis/deis/commit/9b83d00d5910bb6e98a9a7aec6a0667b8e195cb8) buildpacks: update several buildpacks + - [`b5a1c38`](https://github.com/deis/deis/commit/b5a1c3844eeff06f0d0a5ae0420aef17b81c0f31) community: add latest community meeting + - [`e5f349d`](https://github.com/deis/deis/commit/e5f349dd9fb090aa993ad74758b3bbf038d44d23) community: september 2016 community meeting + - [`3ce03a4`](https://github.com/deis/deis/commit/3ce03a4f6ccc07719ffe98b5522de2b8e422e1c8) router: upgrade nginx to 1.10.1 stable + - [`014ba61`](https://github.com/deis/deis/commit/014ba61294ffd9e3430e5f745cc1835e4c1524b4) buildpacks: update heroku-buildpack-go to v46 + ### v1.13.2 -> v1.13.3 #### Features diff --git a/README.md b/README.md index 8753cd7794..c09e801d34 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Deis (pronounced DAY-iss) is an open source PaaS that makes it easy to deploy and manage applications on your own servers. Deis builds upon [Docker](http://docker.io/) and [CoreOS](http://coreos.com) to provide a lightweight PaaS with a [Heroku-inspired](http://heroku.com) workflow. [![Build Status](https://ci.deis.io/buildStatus/icon?job=test-acceptance)](https://ci.deis.io/job/test-acceptance/) -[![Current Release](http://img.shields.io/badge/release-v1.13.3-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.3) +[![Current Release](http://img.shields.io/badge/release-v1.13.4-1eb0fc.svg)](https://github.com/deis/deis/releases/tag/v1.13.4) [![Latest Docs](http://img.shields.io/badge/docs-latest-fc1e5e.svg)](http://docs.deis.io/en/latest/) New to Deis? Learn more about Deis [Concepts](http://docs.deis.io/en/latest/understanding_deis/concepts/), [Architecture](http://docs.deis.io/en/latest/understanding_deis/architecture/) and how to [Deploy an Application](http://docs.deis.io/en/latest/using_deis/deploy-application/). diff --git a/client/deis-version b/client/deis-version index 2f2e08cfa3..80138e7146 100644 --- a/client/deis-version +++ b/client/deis-version @@ -1 +1 @@ -1.14.0-dev +1.13.4 diff --git a/contrib/coreos/user-data.example b/contrib/coreos/user-data.example index ff27259c44..5b7427024c 100644 --- a/contrib/coreos/user-data.example +++ b/contrib/coreos/user-data.example @@ -111,7 +111,7 @@ coreos: [Service] Type=oneshot - ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.3' + ExecStart=/usr/bin/sh -c 'curl -sSL --retry 5 --retry-delay 2 http://deis.io/deisctl/install.sh | sh -s 1.13.4' - name: increase-nf_conntrack-connections.service command: start content: | @@ -125,7 +125,7 @@ coreos: write_files: - path: /etc/deis-release content: | - DEIS_RELEASE=v1.13.3 + DEIS_RELEASE=v1.13.4 - path: /etc/motd content: " \e[31m* * \e[34m* \e[32m***** \e[39mddddd eeeeeee iiiiiii ssss\n\e[31m* * \e[34m* * \e[32m* * \e[39md d e e i s s\n \e[31m* * \e[34m***** \e[32m***** \e[39md d e i s\n\e[32m***** \e[31m* * \e[34m* \e[39md d e i s\n\e[32m* * \e[31m* * \e[34m* * \e[39md d eee i sss\n\e[32m***** \e[31m* * \e[34m***** \e[39md d e i s\n \e[34m* \e[32m***** \e[31m* * \e[39md d e i s\n \e[34m* * \e[32m* * \e[31m* * \e[39md d e e i s s\n\e[34m***** \e[32m***** \e[31m* * \e[39mddddd eeeeeee iiiiiii ssss\n\n\e[39mWelcome to Deis\t\t\tPowered by Core\e[38;5;45mO\e[38;5;206mS\e[39m\n" - path: /etc/profile.d/nse-function.sh diff --git a/contrib/utils.sh b/contrib/utils.sh index 136145e249..44f02f45f5 100644 --- a/contrib/utils.sh +++ b/contrib/utils.sh @@ -14,4 +14,4 @@ function echo_green { export COREOS_CHANNEL=${COREOS_CHANNEL:-stable} export COREOS_VERSION=${COREOS_VERSION:-1068.8.0} -export DEIS_RELEASE=1.13.3 +export DEIS_RELEASE=1.13.4 diff --git a/controller/deis/__init__.py b/controller/deis/__init__.py index 7246dfa82e..4b468d2723 100644 --- a/controller/deis/__init__.py +++ b/controller/deis/__init__.py @@ -6,4 +6,4 @@ from __future__ import absolute_import -__version__ = '1.14.0-dev' +__version__ = '1.13.4' diff --git a/deisctl/client/client.go b/deisctl/client/client.go index b70d62c71d..b5c391fd96 100644 --- a/deisctl/client/client.go +++ b/deisctl/client/client.go @@ -273,7 +273,7 @@ Usage: Options: -p --path= where to save unit files [default: $HOME/.deis/units] -t --tag= git tag, branch, or SHA to use when downloading unit files - [default: master] + [default: v1.13.4] ` // parse command-line arguments args, err := docopt.Parse(usage, argv, true, "", false) diff --git a/deisctl/deis-version b/deisctl/deis-version index 2f2e08cfa3..80138e7146 100644 --- a/deisctl/deis-version +++ b/deisctl/deis-version @@ -1 +1 @@ -1.14.0-dev +1.13.4 diff --git a/docs/_includes/_get-the-source.rst b/docs/_includes/_get-the-source.rst index 7dc55b7743..220a15f6e7 100644 --- a/docs/_includes/_get-the-source.rst +++ b/docs/_includes/_get-the-source.rst @@ -6,7 +6,7 @@ this documentation. Download an archive file from the `releases page`_, or use $ git clone https://github.com/deis/deis.git $ cd deis - $ git checkout v1.13.3 + $ git checkout v1.13.4 Check out the latest Deis release, rather than using the default (master). diff --git a/docs/installing_deis/install-deisctl.rst b/docs/installing_deis/install-deisctl.rst index 3c2625547a..b04e02b853 100644 --- a/docs/installing_deis/install-deisctl.rst +++ b/docs/installing_deis/install-deisctl.rst @@ -18,11 +18,11 @@ and run the latest installer: .. code-block:: console $ cd ~/bin - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.3 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.4 $ # on CoreOS, add "sudo" to install to /opt/bin/deisctl - $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.3 + $ curl -sSL http://deis.io/deisctl/install.sh | sudo sh -s 1.13.4 -This installs ``deisctl`` version 1.13.3 to the current directory, and downloads the matching +This installs ``deisctl`` version 1.13.4 to the current directory, and downloads the matching Deis systemd unit files used to schedule the components. Link ``deisctl`` into /usr/local/bin, so it will be in your ``$PATH``: @@ -33,10 +33,10 @@ it will be in your ``$PATH``: To change installation options, save the installer directly: .. image:: download-linux-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.3-linux-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.4-linux-amd64.run .. image:: download-osx-brightgreen.svg - :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.3-darwin-amd64.run + :target: https://s3-us-west-2.amazonaws.com/get-deis/deisctl-1.13.4-darwin-amd64.run Then run the downloaded file as a shell script. Append ``--help`` to see what options are available. diff --git a/docs/installing_deis/install-platform.rst b/docs/installing_deis/install-platform.rst index 915dabb17f..f528f60a64 100644 --- a/docs/installing_deis/install-platform.rst +++ b/docs/installing_deis/install-platform.rst @@ -14,7 +14,7 @@ First check that you have ``deisctl`` installed and the version is correct. .. code-block:: console $ deisctl --version - 1.13.3 + 1.13.4 If not, follow instructions to :ref:`install_deisctl`. diff --git a/docs/managing_deis/upgrading-deis.rst b/docs/managing_deis/upgrading-deis.rst index 621286342f..7d1f306ed7 100644 --- a/docs/managing_deis/upgrading-deis.rst +++ b/docs/managing_deis/upgrading-deis.rst @@ -41,10 +41,10 @@ Finally, update ``deisctl`` to the new version and reinstall: .. code-block:: console - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.3 + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.4 $ deisctl --version # should match the desired platform - 1.13.3 - $ deisctl config platform set version=v1.13.3 + 1.13.4 + $ deisctl config platform set version=v1.13.4 $ deisctl install platform $ deisctl start platform @@ -105,11 +105,11 @@ to. Care should be taken not to overwrite the existing ``deisctl`` version. .. code-block:: console $ mkdir /tmp/upgrade - $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.3 /tmp/upgrade + $ curl -sSL http://deis.io/deisctl/install.sh | sh -s 1.13.4 /tmp/upgrade $ /tmp/upgrade/deisctl --version # should match the desired platform - 1.13.3 + 1.13.4 $ /tmp/upgrade/deisctl refresh-units - $ /tmp/upgrade/deisctl config platform set version=v1.13.3 + $ /tmp/upgrade/deisctl config platform set version=v1.13.4 Now it is possible to prepare the cluster for the upgrade using the old ``deisctl`` binary. This command will shutdown and uninstall all components of the cluster except the router and publisher. This means your services should still be @@ -134,7 +134,7 @@ If the process were to fail, the old version can be restored manually by reinsta $ /tmp/upgrade/deisctl stop platform $ /tmp/upgrade/deisctl uninstall platform - $ /tmp/upgrade/deisctl config platform set version=v1.13.3 + $ /tmp/upgrade/deisctl config platform set version=v1.13.4 $ /opt/bin/deisctl refresh-units $ /opt/bin/deisctl install platform $ /opt/bin/deisctl start platform diff --git a/docs/reference/api-v1.7.rst b/docs/reference/api-v1.7.rst index 401b95584a..fced552073 100644 --- a/docs/reference/api-v1.7.rst +++ b/docs/reference/api-v1.7.rst @@ -51,7 +51,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -89,7 +89,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json {"token": "abc123"} @@ -112,7 +112,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Regenerate Token ```````````````` @@ -144,7 +144,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json {"token": "abc123"} @@ -182,7 +182,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Applications @@ -206,7 +206,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -252,7 +252,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -283,7 +283,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 List Application Details @@ -303,7 +303,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -367,7 +367,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: text/plain 16:51:14 deis[api]: test created initial release @@ -392,7 +392,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json [0, "hi\n"] @@ -419,7 +419,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -452,7 +452,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -497,7 +497,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -527,7 +527,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Containers @@ -551,7 +551,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -591,7 +591,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -631,7 +631,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json [ @@ -666,7 +666,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json [ @@ -701,7 +701,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json [ @@ -739,7 +739,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Configuration @@ -763,7 +763,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -801,7 +801,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json X-Deis-Release: 3 @@ -844,7 +844,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json X-Deis-Release: 4 @@ -886,7 +886,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -924,7 +924,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -954,7 +954,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Builds @@ -978,7 +978,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1033,7 +1033,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json X-Deis-Release: 4 @@ -1071,7 +1071,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1133,7 +1133,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1169,7 +1169,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json {"version": 5} @@ -1196,7 +1196,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1238,7 +1238,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1268,7 +1268,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Permissions @@ -1296,7 +1296,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1326,7 +1326,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Remove Application Permission @@ -1346,7 +1346,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 List Administrators ``````````````````` @@ -1365,7 +1365,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { @@ -1408,7 +1408,7 @@ Example Response: HTTP/1.1 201 CREATED DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Remove User's Administrative Privileges ``````````````````````````````````````` @@ -1431,7 +1431,7 @@ Example Response: HTTP/1.1 204 NO CONTENT DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Users ----- @@ -1457,7 +1457,7 @@ Example Response: HTTP/1.1 200 OK DEIS_API_VERSION: 1.7 - DEIS_PLATFORM_VERSION: 1.13.3 + DEIS_PLATFORM_VERSION: 1.13.4 Content-Type: application/json { diff --git a/docs/troubleshooting_deis/index.rst b/docs/troubleshooting_deis/index.rst index 31b479aee9..6f5bb682da 100644 --- a/docs/troubleshooting_deis/index.rst +++ b/docs/troubleshooting_deis/index.rst @@ -107,7 +107,7 @@ If you built ``deisctl`` locally or didn't use its installer, you may see an err This is because ``deisctl`` could not find unit files for Deis locally. Run ``deisctl help refresh-units`` to see where ``deisctl`` searches, and then run a command such as -``deisctl refresh-units --tag=v1.13.3``, or set the ``$DEISCTL_UNITS`` environment variable to a directory +``deisctl refresh-units --tag=v1.13.4``, or set the ``$DEISCTL_UNITS`` environment variable to a directory containing the unit files. Other issues diff --git a/version/version.go b/version/version.go index 573fb3edd2..386f8cd7f1 100644 --- a/version/version.go +++ b/version/version.go @@ -1,7 +1,7 @@ package version // Version identifies this Deis product revision. -const Version = "1.14.0-dev" +const Version = "1.13.4" // APIVersion identifies the latest Deis api verison const APIVersion = "1.7" From 7e73eae1ac39d3cadcfd776557d66789dd4c041c Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 19 Jan 2017 11:36:24 -0700 Subject: [PATCH 176/178] chore(release): update Dockerfile ENV to 1.13.4 --- builder/rootfs/Dockerfile | 2 +- builder/rootfs/usr/local/src/slugbuilder/Dockerfile | 2 +- builder/rootfs/usr/local/src/slugrunner/Dockerfile | 2 +- controller/Dockerfile | 2 +- database/Dockerfile | 2 +- logger/image/Dockerfile | 2 +- logspout/image/Dockerfile | 2 +- publisher/image/Dockerfile | 2 +- registry/Dockerfile | 2 +- router/Dockerfile | 2 +- store/base/Dockerfile | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/builder/rootfs/Dockerfile b/builder/rootfs/Dockerfile index b646439634..1e99780752 100644 --- a/builder/rootfs/Dockerfile +++ b/builder/rootfs/Dockerfile @@ -54,4 +54,4 @@ RUN passwd -u git COPY . / -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/builder/rootfs/usr/local/src/slugbuilder/Dockerfile b/builder/rootfs/usr/local/src/slugbuilder/Dockerfile index 4fdb19f2ed..a5481e4744 100644 --- a/builder/rootfs/usr/local/src/slugbuilder/Dockerfile +++ b/builder/rootfs/usr/local/src/slugbuilder/Dockerfile @@ -11,4 +11,4 @@ ADD ./builder/ /tmp/builder RUN /tmp/builder/install-buildpacks ENTRYPOINT ["/tmp/builder/build.sh"] -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/builder/rootfs/usr/local/src/slugrunner/Dockerfile b/builder/rootfs/usr/local/src/slugrunner/Dockerfile index 3684a27e1d..4afab979f5 100644 --- a/builder/rootfs/usr/local/src/slugrunner/Dockerfile +++ b/builder/rootfs/usr/local/src/slugrunner/Dockerfile @@ -17,7 +17,7 @@ USER slug ENV HOME /app ENTRYPOINT ["/runner/init"] -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 ONBUILD RUN mkdir -p /app ONBUILD WORKDIR /app diff --git a/controller/Dockerfile b/controller/Dockerfile index 0c82254ab4..dfa3e6ff80 100644 --- a/controller/Dockerfile +++ b/controller/Dockerfile @@ -29,4 +29,4 @@ ADD . /app # Create static resources RUN /app/manage.py collectstatic --settings=deis.settings --noinput -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/database/Dockerfile b/database/Dockerfile index 7d9a88e56c..5d99c6222c 100644 --- a/database/Dockerfile +++ b/database/Dockerfile @@ -20,4 +20,4 @@ CMD ["/app/bin/boot"] EXPOSE 5432 ADD . /app -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/logger/image/Dockerfile b/logger/image/Dockerfile index c24641948f..4b4a10896b 100644 --- a/logger/image/Dockerfile +++ b/logger/image/Dockerfile @@ -7,4 +7,4 @@ EXPOSE 8088 ADD . / -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/logspout/image/Dockerfile b/logspout/image/Dockerfile index 001b7e0ef7..5adfcb5eb7 100644 --- a/logspout/image/Dockerfile +++ b/logspout/image/Dockerfile @@ -6,4 +6,4 @@ CMD ["/bin/logspout"] ADD logspout /bin/logspout -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/publisher/image/Dockerfile b/publisher/image/Dockerfile index cc7b62cb18..a318a6507c 100644 --- a/publisher/image/Dockerfile +++ b/publisher/image/Dockerfile @@ -7,4 +7,4 @@ RUN apk add --no-cache curl ADD bin/publisher /usr/local/bin/publisher ENTRYPOINT ["/usr/local/bin/publisher"] -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/registry/Dockerfile b/registry/Dockerfile index 79c501a4c1..ff405f1b76 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile @@ -25,4 +25,4 @@ RUN DOCKER_BUILD=true /app/build.sh ADD . /app -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/router/Dockerfile b/router/Dockerfile index d25b20f0b3..85477405fb 100644 --- a/router/Dockerfile +++ b/router/Dockerfile @@ -26,4 +26,4 @@ RUN build CMD ["boot"] EXPOSE 80 2222 9090 -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 diff --git a/store/base/Dockerfile b/store/base/Dockerfile index b04756d1e6..df66c9aa33 100644 --- a/store/base/Dockerfile +++ b/store/base/Dockerfile @@ -9,5 +9,5 @@ RUN DOCKER_BUILD=true /tmp/build.sh # Add shared confd configuration ADD . /app -ENV DEIS_RELEASE 1.14.0-dev +ENV DEIS_RELEASE 1.13.4 From b1b77fc9bf4339a5100ad150c67359807c2b3268 Mon Sep 17 00:00:00 2001 From: Seth Goings Date: Tue, 14 Feb 2017 11:53:45 -0700 Subject: [PATCH 177/178] chore(README): add deprecation notice --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c09e801d34..e92e83b8c7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -| This repository (`deis/deis`) is home for the Deis v1 PaaS (based on CoreOS + Fleet). For more information about the latest version, based on Kubernetes, visit [`deis/workflow`](https://github.com/deis/workflow). -|---| +|![](https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Warning.svg/156px-Warning.svg.png) | This repository (`deis/deis`) is [no longer developed or maintained](https://deis.com/blog/2017/deis-paas-v1-takes-a-bow/). The Deis v1 PaaS based on CoreOS Container Linux and Fleet has been replaced by [Deis Workflow](https://github.com/deis/workflow) which is based on Kubernetes. | +|---|---| # Deis v1 PaaS From 102e8d0195e283ac88c2495c78bba2f1ddf361f7 Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Thu, 11 May 2017 15:07:21 -0600 Subject: [PATCH 178/178] ref(LICENSE): switch to MIT license We are changing the project's license from Apache 2.0 to the MIT license. The MIT license is compatible not only with the Kubernetes and commercial community licensing communities, but also with the Linux and other copyleft licensed projects. MIT is also the most common OSS license on GitHub. Thanks for your continuing interest in our project. --- LICENSE | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/LICENSE b/LICENSE index 4537aa75ae..2efacf37b1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,13 +1,21 @@ -Copyright 2013, 2014 Engine Yard, Inc. +The MIT License (MIT) -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at +Copyright (c) Microsoft Corporation. All rights reserved. - http://www.apache.org/licenses/LICENSE-2.0 +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.