Compare commits

...

191 Commits

Author SHA1 Message Date
Stefan Prodan
c63554c534 Merge pull request #985 from fluxcd/cosign-fix
Fix cosign workflow
2021-08-25 12:16:24 +03:00
Stefan Prodan
be8ed8a696 Fix cosign workflow
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-25 12:16:06 +03:00
Stefan Prodan
98530d9968 Merge pull request #984 from fluxcd/release-v1.13.0
Release v1.13.0
2021-08-25 12:08:14 +03:00
Stefan Prodan
38adc513a6 Release v1.13.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-25 11:46:30 +03:00
Stefan Prodan
eb12e3bde1 Merge pull request #983 from fluxcd/cosign
Sign Flagger container images with cosign
2021-08-25 10:00:59 +03:00
Stefan Prodan
8b2839d36e Add docs on how to verify Flagger containers with cosign
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-24 17:59:32 +03:00
Stefan Prodan
f0fa2aa6bb Sign Flagger container images with cosign
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-24 17:58:54 +03:00
Stefan Prodan
33528b073f Add cosign keys
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-24 15:25:02 +03:00
Fabio Pinna
cf8783ea37 Add support for Google Chat alerts (#953)
Add gchat alerting support

Signed-off-by: fpinna <fplkid@gmail.com>
2021-08-24 11:26:00 +03:00
Stefan Prodan
00355635f8 Merge pull request #982 from saiskee/fix-gloo-edge-flagger
Update Gloo APIs to v1.8
2021-08-23 19:47:18 +03:00
Keerthan Ekbote
aa485f4bf1 Update gloo apis to replace snake case with camel case
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-08-23 12:16:43 -04:00
Stefan Prodan
273b05fb24 Merge pull request #980 from fluxcd/istio-e2e
Update virtual service delegation e2e tests for Istio v1.11
2021-08-23 18:10:51 +03:00
Stefan Prodan
e470474d6f Update Istio delegation e2e for 1.11
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-23 17:48:40 +03:00
Stefan Prodan
ddfd2fe2ec Merge pull request #979 from fluxcd/update-e2e-vers
Update providers in e2e tests
2021-08-23 15:15:32 +03:00
Stefan Prodan
7533d0ae99 e2e: Update Ingress NGINX to v0.49.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-23 14:26:27 +03:00
Stefan Prodan
04ec7f0388 Merge pull request #966 from eduardobarbosa/eduardobarbosa/add-podlabels-helmchart
Add extra podLabels options to Flagger Helm Chart
2021-08-23 13:02:13 +03:00
Stefan Prodan
419000cc13 e2e: Update Istio to v1.11.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-23 12:58:35 +03:00
Stefan Prodan
0dc8edb437 Merge pull request #975 from hobbsh/support-volumes-loadtester
support volumes/volumeMounts in loadtester chart
2021-08-23 12:48:17 +03:00
Stefan Prodan
0759b6531b e2e: Update Contour to v1.18
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-23 12:34:32 +03:00
Stefan Prodan
d8f984de7d Merge pull request #977 from johnsonshi/osm-flagger-docs
Add OSM tutorial and docs
2021-08-23 12:33:16 +03:00
Johnson Shi
82e490a875 Add osm tutorial and docs
Signed-off-by: Johnson Shi <Johnson.Shi@microsoft.com>
2021-08-20 14:25:47 -07:00
Stefan Prodan
c6dffd9d3e e2e: Update Linkerd to v2.10.2
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-08-20 17:17:59 +03:00
Stefan Prodan
8ee3d5835a Merge pull request #978 from fluxcd/update-calendar
Update links to calendar and resources
2021-08-17 13:33:13 +03:00
Daniel Holbach
1209d7e42b update links to calendar and resources
Signed-off-by: Daniel Holbach <daniel@weave.works>
2021-08-17 10:22:48 +02:00
Wylie Hobbs
cdc05ba506 support volumes/volumeMounts in loadtester chart
Signed-off-by: Wylie Hobbs <wylie@wyliehobbs.com>
2021-08-12 10:44:12 -06:00
Stefan Prodan
a6fae0195f Merge pull request #955 from johnsonshi/support-osm-in-flagger
Support OSM progressive traffic shifting in Flagger
2021-08-12 15:04:09 +03:00
Johnson Shi
11375b6890 Support OSM progressive traffic shifting
Signed-off-by: Johnson Shi <Johnson.Shi@microsoft.com>
2021-08-11 17:43:00 -07:00
eduardobarbosa
3811470ebf Add extra podLabels options to Flagger Helm Chart
Signed-off-by: eduardobarbosa <eduardobarbosadacosta@gmail.com>
2021-08-04 15:10:00 -03:00
Stefan Prodan
e2b08eb4dc Merge pull request #964 from shuheiktgw/drop_ioutil
chore: Drop deprecated io/ioutil
2021-07-31 10:16:11 +03:00
shuheiktgw
38d3ca1022 chore: Drop deprecated io/ioutil
Signed-off-by: shuheiktgw <shuheiktgw@users.noreply.github.com>
2021-07-31 08:25:46 +09:00
Stefan Prodan
df459c5fe6 Merge pull request #960 from fluxcd/traefik-2.4
e2e: Update Traefik to 2.4.9
2021-07-27 12:56:41 +03:00
Stefan Prodan
d1d9c0e2a9 Update Traefik docs with Prometheus annotations
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-07-27 12:34:27 +03:00
Stefan Prodan
c1b1d7d448 e2e: Update Traefik to 2.4.9
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-07-27 12:17:40 +03:00
Stefan Prodan
e6b5ee2042 Merge pull request #958 from GregoryVds/fix-typo
pkg:canary: fix typos in logs
2021-07-26 18:37:20 +03:00
Stefan Prodan
0170fc6166 Merge pull request #959 from HBOCodeLabs/mdb/typo-fixes
correct spelling of 'Secrets' in code comments
2021-07-26 17:02:58 +03:00
Mike Ball
4cc2ada2a2 correct spelling of 'Secrets' in code comments
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-07-23 06:54:26 -04:00
Gregory Vander Schueren
a5d3e4f6a6 pkg:canary: fix typos in logs
Signed-off-by: Gregory Vander Schueren <gregory.vanderschueren@sortlist.com>
2021-07-21 15:44:56 +02:00
Stefan Prodan
7c92b33886 Merge pull request #952 from bellkev/fix-grafana-dashboard
Remove problematic nulls from Grafana dashboard
2021-07-09 17:21:46 +03:00
Kevin Bell
0f0b9414ae Remove problematic nulls from Grafana dashboard
Newer versions of Grafana complain when loading
dashboard JSON with nulls in these "current" fields.

Signed-off-by: Kevin Bell <kebel@amazon.com>
2021-07-08 18:01:47 -07:00
Stefan Prodan
6fbb67ee8c Merge pull request #943 from L3o-pold/hotfix/fix-alerting-http-proxy
Fix for the http client proxy overriding the default client
2021-06-24 17:14:52 +03:00
Léopold Jacquot
6634f1a9ae don't override DefaultClient
bug introduced by https://github.com/fluxcd/flagger/pull/872

Signed-off-by: Léopold Jacquot <leopold.jacquot@infomaniak.com>
2021-06-24 15:04:41 +02:00
Stefan Prodan
8da8138f77 Merge pull request #941 from fluxcd/release-v1.12.1
Release v1.12.1
2021-06-17 19:33:36 +03:00
Stefan Prodan
588f4c477b Release v1.12.1
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-17 19:12:06 +03:00
Stefan Prodan
fda1775d3a Merge pull request #940 from fluxcd/k8s.io/api-v0.21.1
Update Go to v1.16 and Kubernetes packages to v1.21.1
2021-06-17 19:03:24 +03:00
Stefan Prodan
fc71d53c71 Update Go to v1.16
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-17 18:44:23 +03:00
Stefan Prodan
ab2a320659 Update Kubernetes packages to v1.21.1
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-17 18:35:42 +03:00
Stefan Prodan
7f50f81ac7 Merge pull request #939 from fluxcd/remove-toolkit-markers
Remove the GitOps Toolkit metadata from generated objects
2021-06-17 18:12:21 +03:00
Stefan Prodan
c36a13ccff Remove the GitOps Toolkit metadata from generated objects
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-17 17:49:22 +03:00
Stefan Prodan
47de726345 Merge pull request #937 from fluxcd/release-v1.12.0
Release v1.12.0
2021-06-16 13:16:19 +03:00
Stefan Prodan
7a4fdbddc0 Release v1.12.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-16 12:18:40 +03:00
Joakim Ahrlin
0dc6f33550 Add insecureSkipVerify option for Prometheus and Graphite
Add insecureSkipVerify option for Prometheus and Graphite

Signed-off-by: Joakim Ahrlin <joakim.ahrlin@embark-studios.com>
2021-06-15 19:28:25 +03:00
Stefan Prodan
b2436eb0df Merge pull request #936 from fluxcd/flux-gc-skip
Remove Flux GC markers from generated objects
2021-06-15 18:08:32 +03:00
Stefan Prodan
cc673159d7 Remove Flux GC markers from generated objects
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-15 17:45:33 +03:00
Stefan Prodan
17c310d66d Merge pull request #932 from KnechtionsCoding/feat/gloo-label-copy
gloo: copy labels from upstream
2021-06-15 12:36:37 +03:00
Hans Knecht
e7357c4e07 fix: updating to use include-label-prefix
fix: remove copy of labels

Signed-off-by: Hans Knecht <Hans.Knecht@missionlane.com>
2021-06-14 11:39:55 -04:00
Stefan Prodan
c44de2d7c3 Merge pull request #934 from johnsonshi/fix-smi-trafficsplit-v1alpha2-omitempty
fix: Require SMI TrafficSplit Service and Weight
2021-06-14 18:07:42 +03:00
Johnson Shi
d82b2c219a fix: Require SMI TrafficSplit Service and Weight
In the SMI TrafficSplit spec, Weight and Service are
required values for TrafficSplit Backend.
In flagger's SMI v1alpha2 implementation,
Service and Weight have the omitempty json option.

During canary analysis, flagger initially creates
a SMI TrafficSplit custom resource in which the
canary backend service has a Weight of 0.
The omitempty option causes Go to omit Weight
when it sends the custom resource to Kubernetes.
This throws an error during canary analysis.

Signed-off-by: Johnson Shi <Johnson.Shi@microsoft.com>
2021-06-14 06:55:59 -07:00
Hans Knecht
35c8957a55 chore: lowercase labels
Signed-off-by: Hans Knecht <Hans.Knecht@missionlane.com>
2021-06-12 21:57:45 -04:00
Hans Knecht
8555f8250a feat: copy labels from upstream
Signed-off-by: Hans Knecht <Hans.Knecht@missionlane.com>
2021-06-11 16:18:29 -04:00
Mike Ball
8137a25b13 Improve language and correct typos in FAQs docs (#925)
Improve language and correct typos in FAQs docs

Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-06-03 11:09:42 +03:00
Stefan Prodan
2db5573c0e Merge pull request #924 from fluxcd/release-1.11.0
Release v1.11.0
2021-06-01 13:59:04 +03:00
Stefan Prodan
1e382203b8 Release v1.11.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-06-01 13:37:51 +03:00
Stefan Prodan
873903a4cb Merge pull request #920 from fluxcd/rbac-v1
Update Kubernetes manifests to rbac.authorization.k8s.io/v1
2021-06-01 12:37:37 +03:00
Stefan Prodan
e5b8afc085 Merge pull request #917 from fluxcd/ingress-v1
Upgrade Ingress to networking.k8s.io/v1
2021-06-01 12:37:26 +03:00
Stefan Prodan
ded658fed9 Merge pull request #922 from HBOCodeLabs/mdb/docs-typo-fixes
Improve the Flagger documentation
2021-05-29 11:54:21 +03:00
Stefan Prodan
88d8858900 Merge pull request #921 from HBOCodeLabs/mdb/add-graphite-info-to-docs
add Graphite info to docs
2021-05-29 11:53:30 +03:00
Mike Ball
737c185aa6 insert comma in dev guide e2e test explanation
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:24:08 -04:00
Mike Ball
0006a68740 correct spelling/tense of 'choose' in dev guide
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:22:07 -04:00
Mike Ball
4db91f7062 improve readability of service exposure FAQ
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:14:30 -04:00
Mike Ball
b8c23967b7 insert comma in FAQ selectors explanation
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:13:45 -04:00
Mike Ball
2019d048a4 separate FAQ about multiple ports into 2 sentences
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:12:42 -04:00
Mike Ball
fe0a4eb20c fine-tune FAQ explanation pertaining to downtime
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:11:30 -04:00
Mike Ball
a35b0e8639 fine-tune language of FAQ pertaining to downtime
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:10:14 -04:00
Mike Ball
4c0843f92a use nonplural 'cookie' in FAQ A/B test explanation
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:08:22 -04:00
Mike Ball
867c1af897 insert comma in FAQ A/B testing explanation
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:07:19 -04:00
Mike Ball
100308289f correct 'install' to 'installing' on docs homepage
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:05:00 -04:00
Mike Ball
3d4739760d correct 'choose' spelling/tense on docs homepage
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 12:04:15 -04:00
Mike Ball
9f321dd685 add New Relic & Graphite to FAQ metrics providers
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 11:57:46 -04:00
Mike Ball
ba6078f235 add Graphite to docs homepage metrics providers
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
2021-05-28 11:53:17 -04:00
Stefan Prodan
cd2f1a24bd Update Kubernetes manifests to rbac.authorization.k8s.io/v1
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-28 09:37:51 +03:00
Stefan Prodan
b87a81b798 Merge pull request #919 from fluxcd/release-1.10.0
Release v1.10.0
2021-05-28 09:32:23 +03:00
Stefan Prodan
0f9dd61786 Release v1.10.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-28 09:06:46 +03:00
Stefan Prodan
4869a9f3ae Merge pull request #915 from HBOCodeLabs/graphite-metrics-provider
Add Graphite metrics provider
2021-05-28 08:55:30 +03:00
Nathan Mische
cd6f36302d Add graphite to the list of valid provider types for the MetricTemplate crd
Co-authored-by: Mike Ball <mike.ball@warnermedia.com>
Co-authored-by: Nathan Mische <Nathan.Mische@warnermedia.com>
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
Signed-off-by: Nathan Mische <Nathan.Mische@warnermedia.com>
2021-05-26 10:07:12 -04:00
Stefan Prodan
e5fdc7a57d docs: Update Ingress guides to networking.k8s.io/v1
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-26 11:10:42 +03:00
Stefan Prodan
834a601311 e2e: Update Kubernetes to v1.21.1
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-26 10:44:06 +03:00
Stefan Prodan
a2784c533e Upgrade Ingress to networking/v1
- breaking change: drop support for Ingress `k8s.io/api/networking/v1beta1`
- routing: use Ingress `k8s.io/api/networking/v1` for NGINX and Skipper routers
- e2e: update ingress-nginx v0.46.0 and skipper to v0.13.61

Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-26 09:59:26 +03:00
Mike Ball
8e3ee3439c add {{target}} to Graphite metrics query example
Co-authored-by: Mike Ball <mike.ball@warnermedia.com>
Co-authored-by: Nathan Mische <Nathan.Mische@warnermedia.com>
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
Signed-off-by: Nathan Mische <Nathan.Mische@warnermedia.com>
2021-05-25 11:56:17 -04:00
Stefan Prodan
f9d40cfe1b Merge pull request #914 from kazukousen/scan-init-container-envs
ConfigTracker: Scan envFrom in init-containers
2021-05-25 17:45:53 +03:00
kazukousen
b26b49fac2 add unit tests
Signed-off-by: kazukousen <mmchari.0228@gmail.com>
2021-05-25 23:21:34 +09:00
Stefan Prodan
f68d647fd0 Merge pull request #916 from fluxcd/e2e-up
e2e: Update Istio and Contour
2021-05-25 11:08:13 +03:00
Stefan Prodan
deb3fb01a2 e2e: Update Contour to v1.15
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-25 10:43:14 +03:00
Stefan Prodan
3accd23a19 e2e: Update Istio to v1.10.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-25 10:42:21 +03:00
Mike Ball
6a66113560 document Graphite metrics provider (#9)
This adds documentation of the Graphite metrics
provider in support of addressing issue #911.

Co-authored-by: Mike Ball <mike.ball@warnermedia.com>
Co-authored-by: Nathan Mische <Nathan.Mische@warnermedia.com>
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
Signed-off-by: Nathan Mische <Nathan.Mische@warnermedia.com>
2021-05-24 17:44:31 -04:00
Eric Wyles
6a7f7415fa Fixed typo on canary documentation (#912)
Fix webhook typo in docs
Signed-off-by: Eric Wyles <eric.wyles@jbhunt.com>
2021-05-24 16:30:26 +03:00
Mike Ball
4654f2cba9 add a Graphite metrics provider
This adds a Graphite metric provider to address
issue #911.

Co-authored-by: Mike Ball <mike.ball@warnermedia.com>
Co-authored-by: Nathan Mische <Nathan.Mische@warnermedia.com>
Signed-off-by: Mike Ball <mike.ball@warnermedia.com>
Signed-off-by: Nathan Mische <Nathan.Mische@warnermedia.com>
2021-05-24 09:16:00 -04:00
kazukousen
17557dc206 fixed ConfigTracker to be able to scan envFrom in init-containers
Signed-off-by: kazukousen <mmchari.0228@gmail.com>
2021-05-24 14:09:04 +09:00
Stefan Prodan
39a3898234 Merge pull request #909 from fluxcd/release-v1.9.0
Release v1.9.0
2021-05-14 16:20:38 +03:00
Stefan Prodan
9372cf9f18 Release v1.9.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-14 16:19:27 +03:00
Stefan Prodan
41e427d645 Merge pull request #908 from kdorosh/add_gloo_upstreamRef
Gloo Upstream Ref for Upstream Config
2021-05-14 15:37:49 +03:00
Stefan Prodan
84ff6f7e89 Merge pull request #907 from vorozhko/nginx-ingress-cleanup
Adjusted Nginx ingress canary headers on init and promotion
2021-05-14 15:18:14 +03:00
Keerthan Ekbote
a286625ad9 updated gloo unit tests
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

intermediate commit

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

updated gloo unit tests

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

copy config from upstream ref to flagger-generateed upstreams

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

removed unneeded types

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

make fmt

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

added code-generator to replace

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

reverted go.mod

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

fixed struct

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

updated e2es with new upstream ref

Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>

Add note to docs about upstreamRef

Signed-off-by: Kevin Dorosh <kevin.dorosh@solo.io>

Fix typo, improve clarity

Signed-off-by: Kevin Dorosh <kevin.dorosh@solo.io>
2021-05-14 08:07:15 -04:00
Iaroslav Vorozhko
d7999e6627 Added e2e test to check nginx update pass witth nginx validation webhook after canary promotion
Signed-off-by: Iaroslav Vorozhko <iaroslav.vorozhko@mcmakler.de>
2021-05-14 12:25:05 +02:00
Iaroslav Vorozhko
41481c1ca8 Adjusted tests to new behaviour on init and promotion
Signed-off-by: Iaroslav Vorozhko <iaroslav.vorozhko@mcmakler.de>
2021-05-13 14:45:33 +02:00
Iaroslav Vorozhko
e926486b0f Stop canary traffic after canary promotion
Signed-off-by: Iaroslav Vorozhko <iaroslav.vorozhko@mcmakler.de>
2021-05-13 14:45:33 +02:00
Stefan Prodan
3ad55c9750 Merge pull request #894 from saiskee/create-non-discovered-gloo-upstreams
Gloo: Create gloo upstreams from non-discovered services
2021-05-11 18:42:20 +03:00
Keerthan Ekbote
06c4151ec4 change port numbers in gloo progressive delivery docs
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-05-06 13:00:23 -04:00
Keerthan Ekbote
51605d9e04 Updated docs
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-05-06 10:26:33 -04:00
Stefan Prodan
438b558809 Merge pull request #902 from fluxcd/issue-template
Add issue templates for bug reports and enhancements
2021-05-06 11:57:40 +03:00
Stefan Prodan
293c44b2a5 Add issue templates for bug reports and enhancements
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-05-06 11:57:19 +03:00
Stefan Prodan
55de241f48 Merge pull request #898 from oliviermichaelis/om/rename-canaryphase
style: rename CanaryWaitingPromotion to CanaryPhaseWaitingPromotion
2021-05-06 11:37:48 +03:00
Stefan Prodan
fda1d32dec Merge pull request #900 from dholbach/update-adopters-location
Move list of production users
2021-05-06 11:29:32 +03:00
Daniel Holbach
b8d5295690 move list of production users
Signed-off-by: Daniel Holbach <daniel@weave.works>
2021-05-05 18:34:05 +02:00
Keerthan Ekbote
fdc8dd8795 fixed observers test
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-05-05 11:29:14 -04:00
Keerthan Ekbote
99b3775926 fixed typo in gloo/v1/types.go
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-05-05 11:21:43 -04:00
Keerthan Ekbote
f0f44c9d35 updated gloo unit tests
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-05-05 11:19:51 -04:00
Olivier Michaelis
d7b878f980 style: rename CanaryWaitingPromotion to CanaryPhaseWaitingPromotion
Renames the CanaryPhase to be more consistent with the existing phases.

Signed-off-by: Olivier Michaelis <38879457+oliviermichaelis@users.noreply.github.com>
2021-05-01 00:21:13 +02:00
Keerthan Ekbote
d8c8b90a95 make fmt
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-30 09:50:18 -04:00
Keerthan Ekbote
8be3d82ae9 Merge branch 'main' of https://github.com/fluxcd/flagger into create-non-discovered-gloo-upstreams 2021-04-29 19:16:05 -04:00
Keerthan Ekbote
fd778be943 updated prom queries to new envoy clusters
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-29 19:12:01 -04:00
Keerthan Ekbote
51936bdc89 changed upstream names in tests
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-29 12:19:52 -04:00
Keerthan Ekbote
2935fad54d fixed gloo upstream api group
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-29 11:43:39 -04:00
Stefan Prodan
c9257bdb99 Merge pull request #897 from fluxcd/release-v1.8.0
Release v1.8.0
2021-04-29 16:10:47 +03:00
Stefan Prodan
90a6ace666 Release v1.8.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-04-29 15:40:26 +03:00
Stefan Prodan
5eb2b5211c Merge pull request #896 from fluxcd/smi-v1alpha3
Implement SMI v1alpha3 router
2021-04-29 15:19:01 +03:00
Stefan Prodan
2ed9ddcdf8 Merge pull request #878 from AlonGluz/bugfix/scale-up-canary-after-confirm-rollout
Scale up canary on confirm rollout
2021-04-29 11:59:36 +03:00
Alon Gluzman
92f4be79ac Scale up canary on confirm rollout
Signed-off-by: Alon Gluzman <alon.gluzman@stackpulse.io>
2021-04-29 11:37:18 +03:00
Stefan Prodan
593f450093 Implement SMI v1alpha3 router
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-04-28 19:26:42 +03:00
Keerthan Ekbote
d20efe4509 make fmt
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-28 09:52:51 -04:00
Stefan Prodan
fcac992e71 Merge pull request #867 from carsonoid/patch-1
Update traefik-progressive-delivery.md
2021-04-28 15:02:19 +03:00
Stefan Prodan
d59663810c Merge pull request #872 from L3o-pold/feature/add-alerting-http-proxy
Add alerting http proxy option
2021-04-28 14:59:37 +03:00
Stefan Prodan
37abdbb774 Merge pull request #881 from andylibrian/charts-prometheus-security-context
Chart: Add securityContext parameter to prometheus deployment
2021-04-28 14:57:51 +03:00
Stefan Prodan
a5909682cd Merge pull request #887 from mayankshah1607/mayank/alert-muting
feat: Add option to mute alerts generated from webhooks
2021-04-28 14:56:47 +03:00
Stefan Prodan
927b4324ae Merge pull request #879 from fluxcd/smi-v1lapha2-router
Implement SMI v1alpha2 router
2021-04-28 13:22:43 +03:00
Stefan Prodan
1ae72dafca Merge pull request #895 from Nerja/fix_loadtester_pdb
Fix Deployment of Flagger loadtester to include the correct label
2021-04-28 12:22:39 +03:00
Marcus Rodan
392865ec59 Fix Deployment of Flagger loadtester to include the correct label
The Deployment of the Flagger loadtester did not contain the correct
label app.kubernetes.io/name. This label is used for the Flagger
deployment and it is also used in the PodDisruptionBudget for
the Flagger operator. I added the same label to the Flagger
load tester to make the PodDisruptionBudget work correctly
for the Flagger loadtester.

Signed-off-by: Marcus Rodan <marcusrodan@gmail.com>
2021-04-28 10:59:18 +02:00
Keerthan Ekbote
3f1af1ec85 added comment
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-27 17:14:30 -04:00
Keerthan Ekbote
487432d873 change: turned off discovery by default in tests
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-27 13:44:21 -04:00
Keerthan Ekbote
a1ff44454a change: Creating gloo upstreams from kube services
Signed-off-by: Keerthan Ekbote <keerthan.ekbote@solo.io>
2021-04-27 12:49:19 -04:00
Mayank Shah
05b0557430 Trigger CI
Signed-off-by: Mayank Shah <mayankshah1614@gmail.com>
2021-04-23 14:17:46 +05:30
Mayank Shah
975b84a2eb feat: Add option to mute alerts generated from webhooks
Signed-off-by: Mayank Shah <mayankshah1614@gmail.com>
2021-04-23 11:27:09 +05:30
Stefan Prodan
3e845f1a29 Merge pull request #884 from marcoferrer/add-ou-org-list
Add offerup to the organizations list
2021-04-15 10:52:12 +03:00
Marco Ferrer
49a266c207 Add offerup to the organizations list
Signed-off-by: Marco Ferrer <marrferr.cdx@gmail.com>
2021-04-14 12:50:57 -04:00
Andy Librian
7284e55eb0 Chart: Add securityContext parameter to prometheus deployment
Signed-off-by: Andy Librian <andylibrian@gmail.com>
2021-04-09 15:03:30 +07:00
Léopold Jacquot
b82fd5e5a5 Add alerting http proxy option
Signed-off-by: Léopold Jacquot <leopold.jacquot@infomaniak.com>
2021-04-08 11:58:19 +02:00
Stefan Prodan
4b084cf685 Implement SMI v1alpha2 router
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-04-08 11:37:04 +03:00
Stefan Prodan
e6c740d917 Merge pull request #877 from fluxcd/cii-badge
Add CII Best Practices badge
2021-04-07 15:30:32 +03:00
Stefan Prodan
cb93a9a158 Add CII Best Practices badge
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-04-07 15:06:02 +03:00
Stefan Prodan
3ea65ea1ad Merge pull request #876 from Nerja/addedsinch
Added Sinch to Who is using Flagger
2021-04-06 15:09:45 +03:00
Marcus Rodan
70d91bb399 Added Sinch to Who is using Flagger
Removed diff

Signed-off-by: Marcus Rodan <marcus.rodan@sinch.com>
2021-04-06 13:32:16 +02:00
Carson A
f5fa18d7ca Update traefik-progressive-delivery.md
Use curly braces to specify an array value in helm set.

The latest versions of the chart need to have the additional arguments specified as a list or they error out:

```
Error: template: traefik/templates/_podtemplate.tpl:199:20: executing "traefik.podTemplate" at <.>: range can't iterate over --metrics.prometheus=true
```

Signed-off-by: Carson Anderson <carson.anderson@getweave.com>
2021-03-25 11:47:57 -06:00
Stefan Prodan
cb24c74769 Merge pull request #864 from fluxcd/release-v1.7.0
Release v1.7.0
2021-03-23 11:28:12 +02:00
Stefan Prodan
775dc91ede Release v1.7.0
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-23 11:00:35 +02:00
Stefan Prodan
ffef8ba4d9 Merge pull request #845 from Pothulapati/tarun/l5d-2.10
linkerd: update prometheus URL based on the latest 2.10 changes
2021-03-23 10:36:33 +02:00
Stefan Prodan
ef2df0d7bc Merge pull request #859 from jblackburn21/waiting-promotion-phase
feat: added WaitingPromotion phase
2021-03-23 10:36:06 +02:00
Jason Blackburn
f0bf5219d4 added WaitingPromotion phase and only generate one alert when transitioning into the phase
Signed-off-by: Jason Blackburn <jason.blackburn@outlook.com>
2021-03-19 08:04:18 -05:00
Stefan Prodan
c8a1165db2 Merge pull request #857 from fluxcd/update-deps-k8s
Update Kubernetes packages to v1.20.4
2021-03-17 16:38:03 +02:00
Stefan Prodan
e9c3518ce7 ci: Merge FOSSA and CodeQL workflows
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-17 16:07:48 +02:00
Stefan Prodan
a5ea6587c0 Update Alpine to v3.13
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-17 16:07:08 +02:00
Stefan Prodan
2792835d66 Update Kubernetes packages to v1.20.4
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-17 16:06:46 +02:00
Stefan Prodan
16867db1b4 Merge pull request #849 from mayankshah1607/mayank/confirm-traffic-webhook
feat: add webhook for manually approving traffic weight increase
2021-03-17 15:53:37 +02:00
Mayank Shah
164bbb884d Add docs for confirm-traffic-increase webhook
Signed-off-by: Mayank Shah <mayankshah1614@gmail.com>
2021-03-16 20:31:51 +05:30
Mayank Shah
873141b9ca Add webhook confirm-traffic-increase for manually approving traffic increase
Signed-off-by: Mayank Shah <mayankshah1614@gmail.com>
2021-03-16 20:18:27 +05:30
Tarun Pothulapati
4a66a28c01 update to latest stable linkerd version
This commit updates the linkerd version to `2.10`, along with
the install script to download the arm version.

It also updates the install script and metricsTempalte to install
and use the viz Prometheus respectively.

Signed-off-by: Tarun Pothulapati <tarunpothulapati@outlook.com>
2021-03-15 06:25:18 +00:00
Tarun Pothulapati
c886c1db62 Merge branch 'main' into tarun/l5d-2.10 2021-03-08 17:17:59 +00:00
Stefan Prodan
f2d121a13b Merge pull request #846 from fluxcd/update-e2e
e2e fix: Update Contour installer
2021-03-08 17:51:32 +02:00
Stefan Prodan
f255938780 e2e: Update Gloo to v1.6.13
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-08 17:24:29 +02:00
Stefan Prodan
aa17367de7 e2e: Update Contour to v1.13
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-08 16:28:27 +02:00
Stefan Prodan
d5df6df661 Run e2e on Kubernetes v1.20
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-03-08 16:23:53 +02:00
Tarun Pothulapati
ec6004963c use correct prom URL
Signed-off-by: Tarun Pothulapati <tarunpothulapati@outlook.com>
2021-03-08 14:06:20 +00:00
Tarun Pothulapati
61d272dbbc update readme
Signed-off-by: Tarun Pothulapati <tarunpothulapati@outlook.com>
2021-03-08 13:55:56 +00:00
Tarun Pothulapati
6be97b3fc7 linkerd: update prometheus URL based on the latest 2.10 changes
In Linkerd 2.10, The Prometheus instance moved into the `viz`
extension which is installed separately from the core
control-plane. This means that the prometheus now exists in
the `linkerd-viz` namespace by default unless overriden.

This PR updates the URl to reflect the same

Signed-off-by: Tarun Pothulapati <tarunpothulapati@outlook.com>
2021-03-08 13:46:38 +00:00
Stefan Prodan
6f95275051 Merge pull request #843 from gopisaba/faq
docs: update resources to disable mTLS in Istio
2021-03-07 13:08:24 +02:00
Gopi
49829fc80f docs: update resources to disable mTLS in Istio
Signed-off-by: Gopi <gopisaba@users.noreply.github.com>
2021-03-05 13:50:25 +00:00
Stefan Prodan
9112c5a064 Merge pull request #842 from Lapeyus/missing-helm-variable
chart: Add pull secret for Prometheus deployment
2021-03-05 07:44:06 +02:00
Joseph Villarreal Lopez
73c4833697 Add missing pull secret on Prometheus deployment
Prometheus deployment created by the Helm chart is missing a pull secret,
variable is necessary to pull the prometheus image from private a repository

Signed-off-by: Joseph Villarreal Lopez <lapeyus@gmail.com>
2021-03-04 18:49:19 -06:00
Stefan Prodan
f3ca6266ab Merge pull request #833 from KnechtionsCoding/main
docs: updating slack alerting docs to point to legacy slack webhooks
2021-02-27 10:32:56 +02:00
Hans Knecht
03acb869b7 docs: updating slack alert docs tone
Signed-off-by: Hans Knecht <Hans.Knecht@missionlane.com>
2021-02-26 10:52:28 -05:00
Hans Knecht
8470d728f9 docs: updating slack alerting docs to point to legacy slack webhooks
Signed-off-by: Hans Knecht <Hans.Knecht@missionlane.com>
2021-02-26 10:44:48 -05:00
Stefan Prodan
71965b199b Merge pull request #832 from fluxcd/release-v1.6.4
Release v1.6.4
2021-02-26 15:24:54 +02:00
Stefan Prodan
fd47d385c2 Release v1.6.4
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-02-26 14:59:56 +02:00
Stefan Prodan
dfdd8cffd7 Merge pull request #831 from jddcarreira/fixMultipleAppMeshBackends
Fix AWS AppMesh issue when providing multiple backends
2021-02-26 11:13:57 +02:00
Stefan Prodan
138c42ec3a Merge pull request #821 from Becram/main
chart: add env option to loadtester
2021-02-26 11:13:29 +02:00
Stefan Prodan
e53723c9c2 Merge pull request #829 from bia/main
Consolidate logos and add project name logos
2021-02-26 11:07:21 +02:00
Joao Carreira
03be6a58ac Fix AWS AppMesh issue when providing multiple backends
Signed-off-by: Joao Carreira <jddcarreira@gmail.com>
2021-02-25 15:09:40 +00:00
bia
864f362f7d consolidate logos and add project name logos
Signed-off-by: bia <get.bianca@gmail.com>
2021-02-24 18:25:49 +01:00
Stefan Prodan
bfb329b2f3 Merge pull request #825 from Multiply/chore-user-list-trendhim
Add Trendhim to user list
2021-02-23 12:24:03 +02:00
Jens Fosgerau
4ce65be0c6 Add Trendhim to user list
Signed-off-by: Jens Fosgerau <multiply@juhp.net>
2021-02-23 10:57:43 +01:00
Stefan Prodan
6ab598d71b Merge pull request #819 from Nerja/loadtesterimprovements
chart: Added PodDisruptionBudget for the loadtester
2021-02-22 11:45:52 +02:00
Becram
06b8ab4096 add environment variable in chart for loadtester
Signed-off-by: Becram <bikram.dhoju@gmail.com>
2021-02-19 22:09:20 +07:00
Marcus Rodan
596bb6487c Added PDB for the loadtester
Signed-off-by: Marcus Rodan <marcus.rodan@sinch.com>
2021-02-18 12:16:43 +01:00
232 changed files with 7160 additions and 814 deletions

50
.cosign/README.md Normal file
View File

@@ -0,0 +1,50 @@
# Flagger signed releases
Flagger releases published to GitHub Container Registry as multi-arch container images
are signed using [cosign](https://github.com/sigstore/cosign).
## Verify Flagger images
Install the [cosign](https://github.com/sigstore/cosign) CLI:
```sh
brew install sigstore/tap/cosign
```
Verify a Flagger release with cosign CLI:
```sh
cosign verify -key https://raw.githubusercontent.com/fluxcd/flagger/main/cosign/cosign.pub \
ghcr.io/fluxcd/flagger:1.13.0
```
Verify Flagger images before they get pulled on your Kubernetes clusters with [Kyverno](https://github.com/kyverno/kyverno/):
```yaml
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: verify-flagger-image
annotations:
policies.kyverno.io/title: Verify Flagger Image
policies.kyverno.io/category: Cosign
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.4.2
spec:
validationFailureAction: enforce
background: false
rules:
- name: verify-image
match:
resources:
kinds:
- Pod
verifyImages:
- image: "ghcr.io/fluxcd/flagger:*"
key: |-
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEST+BqQ1XZhhVYx0YWQjdUJYIG5Lt
iz2+UxRIqmKBqNmce2T+l45qyqOs99qfD7gLNGmkVZ4vtJ9bM7FxChFczg==
-----END PUBLIC KEY-----
```

11
.cosign/cosign.key Normal file
View File

@@ -0,0 +1,11 @@
-----BEGIN ENCRYPTED COSIGN PRIVATE KEY-----
eyJrZGYiOnsibmFtZSI6InNjcnlwdCIsInBhcmFtcyI6eyJOIjozMjc2OCwiciI6
OCwicCI6MX0sInNhbHQiOiIvK1MwbTNrU3pGMFFXdVVYQkFoY2gvTDc3NVJBSy9O
cnkzUC9iMkxBZGF3PSJ9LCJjaXBoZXIiOnsibmFtZSI6Im5hY2wvc2VjcmV0Ym94
Iiwibm9uY2UiOiJBNEFYL2IyU1BsMDBuY3JUNk45QkNOb0VLZTZLZEluRCJ9LCJj
aXBoZXJ0ZXh0IjoiZ054UlJweXpraWtRMUVaRldsSnEvQXVUWTl0Vis2enBlWkIy
dUFHREMzOVhUQlAwaWY5YStaZTE1V0NTT2FQZ01XQmtSZWhrQVVjQ3dZOGF2WTZa
eFhZWWE3T1B4eFdidHJuSUVZM2hwZUk1M1dVQVZ6SXEzQjl0N0ZmV1JlVGsxdFlo
b3hwQmxUSHY4U0c2azdPYk1aQnJleitzSGRWclF6YUdMdG12V1FOMTNZazRNb25i
ZUpRSUJpUXFQTFg5NzFhSUlxU0dxYVhCanc9PSJ9
-----END ENCRYPTED COSIGN PRIVATE KEY-----

4
.cosign/cosign.pub Normal file
View File

@@ -0,0 +1,4 @@
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEST+BqQ1XZhhVYx0YWQjdUJYIG5Lt
iz2+UxRIqmKBqNmce2T+l45qyqOs99qfD7gLNGmkVZ4vtJ9bM7FxChFczg==
-----END PUBLIC KEY-----

View File

@@ -13,3 +13,4 @@ redirects:
usage/skipper-progressive-delivery: tutorials/skipper-progressive-delivery.md
usage/crossover-progressive-delivery: tutorials/crossover-progressive-delivery.md
usage/traefik-progressive-delivery: tutorials/traefik-progressive-delivery.md
usage/osm-progressive-delivery: tutorials/osm-progressive-delivery.md

29
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,29 @@
---
name: Bug report
about: Create a report to help us improve this project
title: ''
assignees: ''
---
### Describe the bug
A clear and concise description of what the bug is.
Please provide the Canary definition and Flagger logs.
### To Reproduce
<!--
Steps to reproduce the behaviour
-->
### Expected behavior
A clear and concise description of what you expected to happen.
### Additional context
- Flagger version:
- Kubernetes version:
- Service Mesh provider:
- Ingress provider:

2
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
blank_issues_enabled: true

View File

@@ -0,0 +1,19 @@
---
name: Feature Request
about: I have a suggestion (and may want to implement it 🙂)!
title: ''
assignees: ''
---
## Describe the feature
What problem are you trying to solve?
### Proposed solution
What do you want to happen? Add any considered drawbacks.
### Any alternatives you've considered?
Is there another way to solve this problem that isn't as good a solution?

View File

@@ -25,7 +25,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: 1.15.x
go-version: 1.16.x
- name: Download modules
run: |
go mod download

View File

@@ -1,67 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '24 0 * * 4'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@@ -22,12 +22,16 @@ jobs:
- traefik
- gloo
- skipper
- osm
- kubernetes
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Kubernetes
uses: engineerd/setup-kind@v0.5.0
with:
version: "v0.11.0"
image: kindest/node:v1.21.1@sha256:fae9a58f17f18f06aeac9772ca8b5ac680ebbed985e266f711d936e91d113bad
- name: Build container image
run: |
docker build -t test/flagger:latest .

View File

@@ -1,25 +0,0 @@
name: FOSSA
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: "^1.15.x"
- name: Add GOPATH to GITHUB_ENV
run: echo "GOPATH=$(go env GOPATH)" >>"$GITHUB_ENV"
- name: Add GOPATH to GITHUB_PATH
run: echo "$GOPATH/bin" >>"$GITHUB_PATH"
- name: Run FOSSA scan and upload build data
uses: fossa-contrib/fossa-action@v1
with:
# FOSSA Push-Only API Token
fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de
github-token: ${{ github.token }}

View File

@@ -9,6 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: sigstore/cosign-installer@main
- name: Prepare
id: prep
run: |
@@ -52,9 +53,18 @@ jobs:
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }}
org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }}
- name: Sign image
run: |
echo -n "${{secrets.COSIGN_PASSWORD}}" | \
cosign sign -key ./.cosign/cosign.key -a git_sha=$GITHUB_SHA \
ghcr.io/fluxcd/flagger:${{ steps.prep.outputs.VERSION }}
- name: Check images
run: |
docker buildx imagetools inspect ghcr.io/fluxcd/flagger:${{ steps.prep.outputs.VERSION }}
- name: Verifiy image signature
run: |
cosign verify -key ./.cosign/cosign.pub \
ghcr.io/fluxcd/flagger:${{ steps.prep.outputs.VERSION }}
- name: Publish Helm charts
uses: stefanprodan/helm-gh-pages@v1.3.0
with:

37
.github/workflows/scan.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: scan
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '18 10 * * 3'
jobs:
fossa:
name: FOSSA
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run FOSSA scan and upload build data
uses: fossa-contrib/fossa-action@v1
with:
# FOSSA Push-Only API Token
fossa-api-key: 5ee8bf422db1471e0bcf2bcb289185de
github-token: ${{ github.token }}
codeql:
name: CodeQL
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: go
- name: Autobuild
uses: github/codeql-action/autobuild@v1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

View File

@@ -2,6 +2,229 @@
All notable changes to this project are documented in this file.
## 1.13.0
**Release date:** 2021-08-25
This release comes with support for [Open Service Mesh](https://openservicemesh.io).
For more details see the [OSM Progressive Delivery tutorial](https://docs.flagger.app/tutorials/osm-progressive-delivery).
Starting with this version, Flagger container images are signed with
[sigstore/cosign](https://github.com/sigstore/cosign), for more details see the
[Flagger cosign docs](https://github.com/fluxcd/flagger/blob/main/.cosign/README.md).
#### Features
- Support OSM progressive traffic shifting in Flagger
[#955](https://github.com/fluxcd/flagger/pull/955)
[#977](https://github.com/fluxcd/flagger/pull/977)
- Add support for Google Chat alerts
[#953](https://github.com/fluxcd/flagger/pull/953)
#### Improvements
- Sign Flagger container images with cosign
[#983](https://github.com/fluxcd/flagger/pull/983)
- Update Gloo APIs and e2e tests to Gloo v1.8.9
[#982](https://github.com/fluxcd/flagger/pull/982)
- Update e2e tests to Istio v1.11, Contour v1.18, Linkerd v2.10.2 and NGINX v0.49.0
[#979](https://github.com/fluxcd/flagger/pull/979)
- Update e2e tests to Traefik to 2.4.9
[#960](https://github.com/fluxcd/flagger/pull/960)
- Add support for volumes/volumeMounts in loadtester Helm chart
[#975](https://github.com/fluxcd/flagger/pull/975)
- Add extra podLabels options to Flagger Helm Chart
[#966](https://github.com/fluxcd/flagger/pull/966)
#### Fixes
- Fix for the http client proxy overriding the default client
[#943](https://github.com/fluxcd/flagger/pull/943)
- Drop deprecated io/ioutil
[#964](https://github.com/fluxcd/flagger/pull/964)
- Remove problematic nulls from Grafana dashboard
[#952](https://github.com/fluxcd/flagger/pull/952)
## 1.12.1
**Release date:** 2021-06-17
This release comes with a fix to Flagger when used with Flux v2.
#### Improvements
- Update Go to v1.16 and Kubernetes packages to v1.21.1
[#940](https://github.com/fluxcd/flagger/pull/940)
#### Fixes
- Remove the GitOps Toolkit metadata from generated objects
[#939](https://github.com/fluxcd/flagger/pull/939)
## 1.12.0
**Release date:** 2021-06-16
This release comes with support for disabling the SSL certificate verification
for the Prometheus and Graphite metric providers.
#### Improvements
- Add `insecureSkipVerify` option for Prometheus and Graphite
[#935](https://github.com/fluxcd/flagger/pull/935)
- Copy labels from Gloo upstreams
[#932](https://github.com/fluxcd/flagger/pull/932)
- Improve language and correct typos in FAQs docs
[#925](https://github.com/fluxcd/flagger/pull/925)
- Remove Flux GC markers from generated objects
[#936](https://github.com/fluxcd/flagger/pull/936)
#### Fixes
- Require SMI TrafficSplit Service and Weight
[#878](https://github.com/fluxcd/flagger/pull/878)
## 1.11.0
**Release date:** 2021-06-01
**Breaking change:** the minimum supported version of Kubernetes is v1.19.0.
This release comes with support for Kubernetes Ingress `networking.k8s.io/v1`.
The Ingress from `networking.k8s.io/v1beta1` is no longer supported,
affected integrations: **NGINX** and **Skipper** ingress controllers.
#### Improvements
- Upgrade Ingress to networking.k8s.io/v1
[#917](https://github.com/fluxcd/flagger/pull/917)
- Update Kubernetes manifests to rbac.authorization.k8s.io/v1
[#920](https://github.com/fluxcd/flagger/pull/920)
## 1.10.0
**Release date:** 2021-05-28
This release comes with support for [Graphite](https://docs.flagger.app/usage/metrics#graphite) metric templates.
#### Features
- Add Graphite metrics provider
[#915](https://github.com/fluxcd/flagger/pull/915)
#### Improvements
- ConfigTracker: Scan envFrom in init-containers
[#914](https://github.com/fluxcd/flagger/pull/914)
- e2e: Update Istio to v1.10 and Contour to v1.15
[#914](https://github.com/fluxcd/flagger/pull/914)
## 1.9.0
**Release date:** 2021-05-14
This release comes with improvements to the [Gloo Edge](https://docs.flagger.app/tutorials/gloo-progressive-delivery) integration.
Starting with this version, Flagger no longer requires Gloo discovery to be enabled.
Flagger generated the Gloo upstream objects on its own and optionally it can use an
existing upstream (specified with `.spec.upstreamRef`) as a template.
#### Features
- Gloo: Create gloo upstreams from non-discovered services
[#894](https://github.com/fluxcd/flagger/pull/894)
- Gloo Upstream Ref for Upstream Config
[#908](https://github.com/fluxcd/flagger/pull/908)
#### Improvements
- Adjusted Nginx ingress canary headers on init and promotion
[#907](https://github.com/fluxcd/flagger/pull/907)
## 1.8.0
**Release date:** 2021-04-29
This release comes with support for the SMI `v1alpha2` and `v1alpha3` TrafficSplit APIs.
For SMI compatible service mesh solutions like Open Service Mesh, Consul Connect or Nginx Service Mesh,
[Prometheus MetricTemplates](https://docs.flagger.app/usage/metrics#prometheus) can be used to implement
the request success rate and request duration checks.
The desired SMI version can be set in the Canary object:
```yaml
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: my-canary
spec:
provider: "smi:v1alpha3" # or "smi:v1alpha2"
```
#### Features
- Implement SMI v1alpha2 and v1alpha3 routers
[#896](https://github.com/fluxcd/flagger/pull/896)
[#879](https://github.com/fluxcd/flagger/pull/879)
- Add alerting HTTP/S proxy option
[#872](https://github.com/fluxcd/flagger/pull/872)
- Add option to mute alerts generated from webhooks
[#887](https://github.com/fluxcd/flagger/pull/887)
#### Fixes
- Scale up canary on confirm rollout
[#878](https://github.com/fluxcd/flagger/pull/878)
## 1.7.0
**Release date:** 2021-03-23
This release comes with support for manually approving
the traffic weight increase.
#### Features
- Add webhook for manually approving traffic weight increase
[#849](https://github.com/fluxcd/flagger/pull/849)
- Add WaitingPromotion phase to canary status
[#859](https://github.com/fluxcd/flagger/pull/859)
#### Improvements
- linkerd: update prometheus URL based on the latest 2.10 changes
[#845](https://github.com/fluxcd/flagger/pull/845)
- docs: update resources to disable mTLS in Istio
[#843](https://github.com/fluxcd/flagger/pull/843)
- docs: updating slack alerting docs to point to legacy slack webhooks
[#833](https://github.com/fluxcd/flagger/pull/833)
- chart: Add pull secret for Prometheus deployment
[#842](https://github.com/fluxcd/flagger/pull/842)
- Update Kubernetes packages to v1.20.4
[#857](https://github.com/fluxcd/flagger/pull/857)
## 1.6.4
**Release date:** 2021-02-26
This release comes with a bug fix to the AppMesh integration
when using multiple backends.
#### Improvements
- Consolidate logos and add project name logos
[#829](https://github.com/fluxcd/flagger/pull/829)
- chart: add env option to loadtester
[#821](https://github.com/fluxcd/flagger/pull/821)
- chart: Added PodDisruptionBudget for the loadtester
[#819](https://github.com/fluxcd/flagger/pull/819)
#### Fixes
- Fix AWS AppMesh issue when providing multiple backends
[#831](https://github.com/fluxcd/flagger/pull/831)
## 1.6.3
**Release date:** 2021-02-15

View File

@@ -1,4 +1,4 @@
FROM golang:1.15-alpine as builder
FROM golang:1.16-alpine as builder
ARG TARGETPLATFORM
ARG REVISON
@@ -21,7 +21,7 @@ RUN CGO_ENABLED=0 go build \
-ldflags "-s -w -X github.com/fluxcd/flagger/pkg/version.REVISION=${REVISON}" \
-a -o flagger ./cmd/flagger
FROM alpine:3.12
FROM alpine:3.13
RUN apk --no-cache add ca-certificates

View File

@@ -1,5 +1,6 @@
# flagger
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4783/badge)](https://bestpractices.coreinfrastructure.org/projects/4783)
[![build](https://github.com/fluxcd/flagger/workflows/build/badge.svg)](https://github.com/fluxcd/flagger/actions)
[![report](https://goreportcard.com/badge/github.com/fluxcd/flagger)](https://goreportcard.com/report/github.com/fluxcd/flagger)
[![license](https://img.shields.io/github/license/fluxcd/flagger.svg)](https://github.com/fluxcd/flagger/blob/main/LICENSE)
@@ -12,10 +13,10 @@ by gradually shifting traffic to the new version while measuring metrics and run
![flagger-overview](https://raw.githubusercontent.com/fluxcd/flagger/main/docs/diagrams/flagger-overview.png)
Flagger implements several deployment strategies (Canary releases, A/B testing, Blue/Green mirroring)
using a service mesh (App Mesh, Istio, Linkerd)
using a service mesh (App Mesh, Istio, Linkerd, Open Service Mesh)
or an ingress controller (Contour, Gloo, NGINX, Skipper, Traefik) for traffic routing.
For release analysis, Flagger can query Prometheus, Datadog, New Relic or CloudWatch
and for alerting it uses Slack, MS Teams, Discord and Rocket.
and for alerting it uses Slack, MS Teams, Discord, Rocket and Google Chat.
Flagger is a [Cloud Native Computing Foundation](https://cncf.io/) project
and part of [Flux](https://fluxcd.io) family of GitOps tools.
@@ -42,21 +43,14 @@ Flagger documentation can be found at [docs.flagger.app](https://docs.flagger.ap
* [NGINX Ingress](https://docs.flagger.app/tutorials/nginx-progressive-delivery)
* [Skipper](https://docs.flagger.app/tutorials/skipper-progressive-delivery)
* [Traefik](https://docs.flagger.app/tutorials/traefik-progressive-delivery)
* [Open Service Mesh (OSM)](https://docs.flagger.app/tutorials/osm-progressive-delivery)
* [Kubernetes Blue/Green](https://docs.flagger.app/tutorials/kubernetes-blue-green)
### Who is using Flagger
List of organizations using Flagger:
**Our list of production users has moved to <https://fluxcd.io/adopters/#flagger>**.
* [Chick-fil-A](https://www.chick-fil-a.com)
* [Capra Consulting](https://www.capraconsulting.no)
* [DMM.com](https://dmm-corp.com)
* [MediaMarktSaturn](https://www.mediamarktsaturn.com)
* [Weaveworks](https://weave.works)
* [Jumia Group](https://group.jumia.com)
* [eLife](https://elifesciences.org/)
If you are using Flagger, please submit a PR to add your organization to the list!
If you are using Flagger, please [submit a PR to add your organization](https://github.com/fluxcd/website/tree/main/adopters#readme) to the list!
### Canary CRD
@@ -77,7 +71,8 @@ metadata:
namespace: test
spec:
# service mesh provider (optional)
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, contour, gloo, supergloo, traefik
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, contour, gloo, supergloo, traefik, osm
# for SMI TrafficSplit can be: smi:v1alpha1, smi:v1alpha2, smi:v1alpha3
provider: istio
# deployment reference
targetRef:
@@ -188,17 +183,21 @@ For more details on how the canary analysis and promotion works please [read the
**Service Mesh**
| Feature | App Mesh | Istio | Linkerd | Kubernetes CNI |
| ------------------------------------------ | ------------------ | ------------------ | ------------------ | ----------------- |
| Canary deployments (weighted traffic) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
| A/B testing (headers and cookies routing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
| Blue/Green deployments (traffic switch) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Blue/Green deployments (traffic mirroring) | :heavy_minus_sign: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
| Webhooks (acceptance/load testing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Manual gating (approve/pause/resume) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Request success rate check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
| Request duration check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
| Custom metric checks | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Feature | App Mesh | Istio | Linkerd | Open Service Mesh | SMI | Kubernetes CNI |
| ------------------------------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
| Canary deployments (weighted traffic) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
| A/B testing (headers and cookies routing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |
| Blue/Green deployments (traffic switch) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Blue/Green deployments (traffic mirroring) | :heavy_minus_sign: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |
| Webhooks (acceptance/load testing) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Manual gating (approve/pause/resume) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Request success rate check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
| Request duration check (L7 metric) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
| Custom metric checks | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
For other SMI compatible service mesh solutions like Consul Connect or Nginx Service Mesh,
[Prometheus MetricTemplates](https://docs.flagger.app/usage/metrics#prometheus) can be used to implement
the request success rate and request duration checks.
**Ingress**
@@ -225,7 +224,6 @@ For more details on how the canary analysis and promotion works please [read the
#### Integrations
* Add support for Kubernetes [Ingress v2](https://github.com/kubernetes-sigs/service-apis)
* Add support for SMI compatible service mesh solutions like Open Service Mesh and Consul Connect
* Add support for ingress controllers like HAProxy and ALB
* Add support for metrics providers like InfluxDB, Stackdriver, SignalFX
@@ -249,8 +247,8 @@ If you have any questions about Flagger and progressive delivery:
* Read the Flagger [docs](https://docs.flagger.app).
* Invite yourself to the [CNCF community slack](https://slack.cncf.io/)
and join the [#flagger](https://cloud-native.slack.com/messages/flagger/) channel.
* Check out the [Flux talks section](https://fluxcd.io/community/#talks) and to see a list of online talks,
hands-on training and meetups.
* Check out the **[Flux events calendar](https://fluxcd.io/#calendar)**, both with upcoming talks, events and meetings you can attend.
* Or view the **[Flux resources section](https://fluxcd.io/resources)** with past events videos you can watch.
* File an [issue](https://github.com/fluxcd/flagger/issues/new).
Your feedback is always welcome!

View File

@@ -0,0 +1,42 @@
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
namespace: test
spec:
provider: osm
targetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
progressDeadlineSeconds: 600
service:
port: 9898
targetPort: 9898
analysis:
interval: 15s
threshold: 10
stepWeights: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55]
metrics:
- name: request-success-rate
thresholdRange:
min: 99
interval: 1m
- name: request-duration
thresholdRange:
max: 500
interval: 30s
webhooks:
- name: acceptance-test
type: pre-rollout
url: http://flagger-loadtester.test/
timeout: 15s
metadata:
type: bash
cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
- name: load-test
type: rollout
url: http://flagger-loadtester.test/
timeout: 5s
metadata:
cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/"

View File

@@ -0,0 +1,43 @@
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
namespace: test
spec:
provider: osm
targetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
progressDeadlineSeconds: 600
service:
port: 9898
targetPort: 9898
analysis:
interval: 15s
threshold: 10
maxWeight: 50
stepWeight: 5
metrics:
- name: request-success-rate
thresholdRange:
min: 99
interval: 1m
- name: request-duration
thresholdRange:
max: 500
interval: 30s
webhooks:
- name: acceptance-test
type: pre-rollout
url: http://flagger-loadtester.test/
timeout: 15s
metadata:
type: bash
cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
- name: load-test
type: rollout
url: http://flagger-loadtester.test/
timeout: 5s
metadata:
cmd: "hey -z 1m -q 10 -c 2 http://podinfo-canary.test:9898/"

View File

@@ -6,7 +6,7 @@ metadata:
labels:
app: flagger
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: flagger
@@ -192,7 +192,7 @@ rules:
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger

View File

@@ -129,6 +129,21 @@ spec:
- Ingress
name:
type: string
upstreamRef:
description: Gloo Upstream selector
type: object
required: [ "apiVersion", "kind", "name" ]
properties:
apiVersion:
type: string
kind:
type: string
enum:
- Upstream
name:
type: string
namespace:
type: string
service:
description: Kubernetes Service spec
type: object
@@ -940,6 +955,10 @@ spec:
- post-rollout
- event
- rollback
- confirm-traffic-increase
muteAlert:
description: Mute all alerts for the webhook
type: boolean
url:
description: URL address of this webhook
type: string
@@ -966,6 +985,7 @@ spec:
- Initialized
- Waiting
- Progressing
- WaitingPromotion
- Promoting
- Finalising
- Succeeded
@@ -1086,6 +1106,7 @@ spec:
- datadog
- cloudwatch
- newrelic
- graphite
address:
description: API address of this provider
type: string
@@ -1101,6 +1122,9 @@ spec:
region:
description: Region of the provider
type: string
insecureSkipVerify:
description: Disable SSL certificate validation for the provider address
type: boolean
query:
description: Query of this metric template
type: string
@@ -1167,6 +1191,7 @@ spec:
- msteams
- discord
- rocket
- gchat
channel:
description: Alert channel for this provider
type: string
@@ -1176,6 +1201,9 @@ spec:
address:
description: Hook URL address of this provider
type: string
proxy:
description: Http/s proxy of this provider
type: string
secretRef:
description: Kubernetes secret reference containing the provider address
type: object

View File

@@ -22,7 +22,7 @@ spec:
serviceAccountName: flagger
containers:
- name: flagger
image: ghcr.io/fluxcd/flagger:1.6.3
image: ghcr.io/fluxcd/flagger:1.13.0
imagePullPolicy: IfNotPresent
ports:
- name: http

View File

@@ -1,7 +1,7 @@
apiVersion: v1
name: flagger
version: 1.6.3
appVersion: 1.6.3
version: 1.13.0
appVersion: 1.13.0
kubeVersion: ">=1.16.0-0"
engine: gotpl
description: Flagger is a progressive delivery operator for Kubernetes
@@ -21,5 +21,8 @@ keywords:
- gloo
- contour
- nginx
- traefik
- osm
- smi
- gitops
- canary

View File

@@ -7,10 +7,13 @@ Flagger can run automated application analysis, testing, promotion and rollback
* A/B Testing (HTTP headers and cookies traffic routing)
* Blue/Green (traffic switching and mirroring)
Flagger works with service mesh solutions (Istio, Linkerd, AWS App Mesh) and with Kubernetes ingress controllers
Flagger works with service mesh solutions (Istio, Linkerd, AWS App Mesh, Open Service Mesh) and with Kubernetes ingress controllers
(NGINX, Skipper, Gloo, Contour, Traefik).
Flagger can be configured to send alerts to various chat platforms such as Slack, Microsoft Teams, Discord and Rocket.
Flagger is a [Cloud Native Computing Foundation](https://cncf.io/) project
and part of [Flux](https://fluxcd.io) family of GitOps tools.
## Prerequisites
* Kubernetes >= 1.16
@@ -38,13 +41,13 @@ $ helm upgrade -i flagger flagger/flagger \
--set metricsServer=http://prometheus:9090
```
To install Flagger for **Linkerd**:
To install Flagger for **Linkerd** (requires Linkerd Viz extension):
```console
$ helm upgrade -i flagger flagger/flagger \
--namespace=linkerd \
--set meshProvider=linkerd \
--set metricsServer=http://linkerd-prometheus:9090
--set metricsServer=http://prometheus.linkerd-viz:9090
```
To install Flagger for **AWS App Mesh**:
@@ -65,7 +68,7 @@ $ helm upgrade -i flagger flagger/flagger \
--set prometheus.install=true
```
To install Flagger and Prometheus for **Gloo** (requires Gloo discovery enabled):
To install Flagger and Prometheus for **Gloo** (no longer requires Gloo discovery):
```console
$ helm upgrade -i flagger flagger/flagger \
@@ -93,6 +96,15 @@ $ helm upgrade -i flagger flagger/flagger \
--set meshProvider=traefik
```
To install Flagger for **Open Service Mesh (OSM)** (requires OSM to have been installed with Prometheus):
```console
$ helm upgrade -i flagger flagger/flagger \
--namespace=osm-system \
--set meshProvider=osm \
--set metricsServer=http://osm-prometheus.osm-system.svc:7070
```
The [configuration](#configuration) section lists the parameters that can be configured during installation.
## Uninstalling the Chart
@@ -122,9 +134,11 @@ Parameter | Description | Default
`configTracking.enabled` | If `true`, flagger will track changes in Secrets and ConfigMaps referenced in the target deployment | `true`
`eventWebhook` | If set, Flagger will publish events to the given webhook | None
`slack.url` | Slack incoming webhook | None
`slack.proxyUrl` | Slack proxy url | None
`slack.channel` | Slack channel | None
`slack.user` | Slack username | `flagger`
`msteams.url` | Microsoft Teams incoming webhook | None
`msteams.proxyUrl` | Microsoft Teams proxy url | None
`podMonitor.enabled` | If `true`, create a PodMonitor for [monitoring the metrics](https://docs.flagger.app/usage/monitoring#metrics) | `false`
`podMonitor.namespace` | Namespace where the PodMonitor is created | the same namespace
`podMonitor.interval` | Interval at which metrics should be scraped | `15s`

View File

@@ -129,6 +129,21 @@ spec:
- Ingress
name:
type: string
upstreamRef:
description: Gloo Upstream selector
type: object
required: [ "apiVersion", "kind", "name" ]
properties:
apiVersion:
type: string
kind:
type: string
enum:
- Upstream
name:
type: string
namespace:
type: string
service:
description: Kubernetes Service spec
type: object
@@ -940,6 +955,10 @@ spec:
- post-rollout
- event
- rollback
- confirm-traffic-increase
muteAlert:
description: Mute all alerts for the webhook
type: boolean
url:
description: URL address of this webhook
type: string
@@ -966,6 +985,7 @@ spec:
- Initialized
- Waiting
- Progressing
- WaitingPromotion
- Promoting
- Finalising
- Succeeded
@@ -1086,6 +1106,7 @@ spec:
- datadog
- cloudwatch
- newrelic
- graphite
address:
description: API address of this provider
type: string
@@ -1101,6 +1122,9 @@ spec:
region:
description: Region of the provider
type: string
insecureSkipVerify:
description: Disable SSL certificate validation for the provider address
type: boolean
query:
description: Query of this metric template
type: string
@@ -1167,6 +1191,7 @@ spec:
- msteams
- discord
- rocket
- gchat
channel:
description: Alert channel for this provider
type: string
@@ -1176,6 +1201,9 @@ spec:
address:
description: Hook URL address of this provider
type: string
proxy:
description: Http/s proxy of this provider
type: string
secretRef:
description: Kubernetes secret reference containing the provider address
type: object

View File

@@ -22,6 +22,11 @@ spec:
labels:
app.kubernetes.io/name: {{ template "flagger.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- if .Values.podLabels }}
{{- range $key, $value := .Values.podLabels }}
{{ $key }}: {{ $value | quote }}
{{- end }}
{{- end }}
annotations:
{{- if .Values.podAnnotations }}
{{ toYaml .Values.podAnnotations | indent 8 }}
@@ -90,6 +95,9 @@ spec:
{{- if .Values.slack.url }}
- -slack-url={{ .Values.slack.url }}
{{- end }}
{{- if .Values.slack.proxyUrl }}
- -slack-proxy-url={{ .Values.slack.proxyUrl }}
{{- end }}
{{- if .Values.slack.user }}
- -slack-user={{ .Values.slack.user }}
{{- end }}
@@ -99,6 +107,9 @@ spec:
{{- if .Values.msteams.url }}
- -msteams-url={{ .Values.msteams.url }}
{{- end }}
{{- if .Values.msteams.proxyUrl }}
- -msteams-proxy-url={{ .Values.msteams.proxyUrl }}
{{- end }}
{{- if .Values.leaderElection.enabled }}
- -enable-leader-election=true
- -leader-election-namespace={{ .Release.Namespace }}

View File

@@ -1,5 +1,5 @@
{{- if .Values.prometheus.install }}
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ template "flagger.fullname" . }}-prometheus
@@ -24,7 +24,7 @@ rules:
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ template "flagger.fullname" . }}-prometheus
@@ -255,7 +255,14 @@ spec:
mountPath: /etc/prometheus
- name: data-volume
mountPath: /prometheus/data
{{- if .Values.prometheus.securityContext.enabled }}
securityContext:
{{ toYaml .Values.prometheus.securityContext.context | indent 12 }}
{{- end }}
{{- if .Values.prometheus.pullSecret }}
imagePullSecrets:
- name: {{ .Values.prometheus.pullSecret }}
{{- end }}
volumes:
- name: config-volume
configMap:

View File

@@ -1,5 +1,5 @@
{{- if .Values.rbac.create }}
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ template "flagger.fullname" . }}
@@ -200,7 +200,7 @@ rules:
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ template "flagger.fullname" . }}

View File

@@ -2,7 +2,7 @@
image:
repository: ghcr.io/fluxcd/flagger
tag: 1.6.3
tag: 1.13.0
pullPolicy: IfNotPresent
pullSecret:
@@ -19,7 +19,7 @@ podPriorityClassName: ""
metricsServer: "http://prometheus:9090"
# accepted values are kubernetes, istio, linkerd, appmesh, contour, nginx, gloo, skipper, traefik
# accepted values are kubernetes, istio, linkerd, appmesh, contour, nginx, gloo, skipper, traefik, osm
meshProvider: ""
# single namespace restriction
@@ -55,6 +55,7 @@ slack:
channel:
# incoming webhook https://api.slack.com/incoming-webhooks
url:
proxy:
msteams:
# MS Teams incoming webhook URL
@@ -72,11 +73,21 @@ podMonitor:
# secretKeyRef:
# name: slack
# key: url
#- name: SLACK_PROXY_URL
# valueFrom:
# secretKeyRef:
# name: slack
# key: proxy-url
#- name: MSTEAMS_URL
# valueFrom:
# secretKeyRef:
# name: msteams
# key: url
#- name: MSTEAMS_PROXY_URL
# valueFrom:
# secretKeyRef:
# name: msteams
# key: proxy-url
#- name: EVENT_WEBHOOK_URL
# valueFrom:
# secretKeyRef:
@@ -125,7 +136,14 @@ prometheus:
# to be used with ingress controllers
install: false
image: docker.io/prom/prometheus:v2.23.0
pullSecret:
retention: 2h
# when enabled, it will add a security context for the prometheus pod
securityContext:
enabled: false
context:
readOnlyRootFilesystem: true
runAsUser: 10001
kubeconfigQPS: ""
kubeconfigBurst: ""
@@ -142,3 +160,5 @@ istio:
podDisruptionBudget:
enabled: false
minAvailable: 1
podLabels: {}

View File

@@ -1,6 +1,6 @@
apiVersion: v1
name: grafana
version: 1.5.0
version: 1.6.0
appVersion: 7.2.0
description: Grafana dashboards for monitoring Flagger canary deployments
icon: https://raw.githubusercontent.com/fluxcd/flagger/main/docs/logo/flagger-icon.png

View File

@@ -1146,7 +1146,6 @@
"list": [
{
"allValue": null,
"current": null,
"datasource": "prometheus",
"definition": "query_result(sum(envoy_cluster_upstream_rq) by (kubernetes_namespace))",
"hide": 0,
@@ -1168,7 +1167,6 @@
},
{
"allValue": null,
"current": null,
"datasource": "prometheus",
"definition": "query_result(sum(envoy_cluster_upstream_rq{kubernetes_namespace=\"$namespace\",app=~\".*-primary\"}) by (app))",
"hide": 0,
@@ -1190,7 +1188,6 @@
},
{
"allValue": null,
"current": null,
"datasource": "prometheus",
"definition": "query_result(sum(envoy_cluster_upstream_rq{kubernetes_namespace=\"$namespace\",app!~\".*-primary\"}) by (app))",
"hide": 0,

View File

@@ -1,6 +1,6 @@
apiVersion: v1
name: loadtester
version: 0.18.0
version: 0.19.1
appVersion: 0.18.0
kubeVersion: ">=1.11.0-0"
engine: gotpl
@@ -19,5 +19,7 @@ keywords:
- appmesh
- linkerd
- gloo
- osm
- smi
- gitops
- load testing

View File

@@ -1,7 +1,7 @@
# Flagger load testing service
[Flagger's](https://github.com/fluxcd/flagger) load testing service is based on
[rakyll/hey](https://github.com/rakyll/hey) and
[Flagger's](https://github.com/fluxcd/flagger) load testing service is based on
[rakyll/hey](https://github.com/rakyll/hey) and
[bojand/ghz](https://github.com/bojand/ghz).
It can be used to generate HTTP and gRPC traffic during canary analysis when configured as a webhook.
@@ -26,7 +26,7 @@ helm upgrade -i flagger-loadtester flagger/loadtester
The command deploys loadtester on the Kubernetes cluster in the default namespace.
> **Tip**: Note that the namespace where you deploy the load tester should
> have the Istio, App Mesh or Linkerd sidecar injection enabled
> have the Istio, App Mesh, Linkerd or Open Service Mesh sidecar injection enabled
The [configuration](#configuration) section lists the parameters that can be configured during installation.
@@ -50,7 +50,7 @@ Parameter | Description | Default
`image.pullPolicy` | Image pull policy | `IfNotPresent`
`image.tag` | Image tag | `<VERSION>`
`replicaCount` | Desired number of pods | `1`
`serviceAccountName` | Kubernetes service account name | `none`
`serviceAccountName` | Kubernetes service account name | `none`
`resources.requests.cpu` | CPU requests | `10m`
`resources.requests.memory` | Memory requests | `64Mi`
`tolerations` | List of node taints to tolerate | `[]`
@@ -70,6 +70,8 @@ Parameter | Description | Default
`podPriorityClassName` | PriorityClass name for pod priority configuration | ""
`securityContext.enabled` | Add securityContext to container | ""
`securityContext.context` | securityContext to add | ""
`podDisruptionBudget.enabled` | A PodDisruptionBudget will be created if `true` | `false`
`podDisruptionBudget.minAvailable` | The minimal number of available replicas that will be set in the PodDisruptionBudget | `1`
Specify each parameter using the `--set key=value[,key=value]` argument to `helm upgrade`. For example,
@@ -87,5 +89,3 @@ helm install flagger/loadtester --name flagger-loadtester -f values.yaml
```
> **Tip**: You can use the default [values.yaml](values.yaml)

View File

@@ -16,8 +16,10 @@ spec:
metadata:
labels:
app: {{ include "loadtester.name" . }}
app.kubernetes.io/name: {{ include "loadtester.name" . }}
annotations:
appmesh.k8s.aws/ports: "444"
openservicemesh.io/inbound-port-exclusion-list: "80, 8080"
{{- if .Values.podAnnotations }}
{{ toYaml .Values.podAnnotations | indent 8 }}
{{- end }}
@@ -29,7 +31,7 @@ spec:
{{- end }}
{{- if .Values.podPriorityClassName }}
priorityClassName: {{ .Values.podPriorityClassName }}
{{- end }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
{{- if .Values.securityContext.enabled }}
@@ -66,8 +68,21 @@ spec:
- --spider
- http://localhost:8080/healthz
timeoutSeconds: 5
{{- if .Values.env }}
env:
{{- toYaml .Values.env | nindent 12 }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.volumeMounts }}
volumeMounts:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- end }}
{{ with .Values.volumes }}
volumes:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}

View File

@@ -0,0 +1,11 @@
{{- if .Values.podDisruptionBudget.enabled }}
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: {{ include "loadtester.fullname" . }}
spec:
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "loadtester.name" . }}
{{- end }}

View File

@@ -9,7 +9,7 @@ podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
podPriorityClassName: ""
podPriorityClassName: ""
logLevel: info
cmd:
@@ -18,6 +18,8 @@ cmd:
nameOverride: ""
fullnameOverride: ""
env: []
service:
type: ClusterIP
port: 80
@@ -27,6 +29,9 @@ resources:
cpu: 10m
memory: 64Mi
volumes: []
volumeMounts: []
nodeSelector: {}
tolerations: []
@@ -62,15 +67,15 @@ appmesh:
- podinfo
- podinfo-canary
#Istio virtual service and gatway settings. TLS secrets should be in namespace before enbaled it. ( secret format loadtester.fullname )
#Istio virtual service and gatway settings. TLS secrets should be in namespace before enbaled it. ( secret format loadtester.fullname )
istio:
enabled: false
host: flagger-loadtester.flagger
gateway:
enabled: false
enabled: false
tls:
enabled: false
httpsRedirect: false
httpsRedirect: false
# when enabled, it will add a security context for the loadtester pod
securityContext:
@@ -79,3 +84,7 @@ securityContext:
readOnlyRootFilesystem: true
runAsUser: 100
runAsGroup: 101
podDisruptionBudget:
enabled: false
minAvailable: 1

View File

@@ -12,6 +12,7 @@ metadata:
sidecar.istio.io/inject: "false"
linkerd.io/inject: disabled
appmesh.k8s.aws/sidecarInjectorWebhook: disabled
openservicemesh.io/sidecar-injection: disabled
spec:
containers:
- name: tools

View File

@@ -63,8 +63,10 @@ var (
logLevel string
port string
msteamsURL string
msteamsProxyURL string
includeLabelPrefix string
slackURL string
slackProxyURL string
slackUser string
slackChannel string
eventWebhook string
@@ -93,16 +95,18 @@ func init() {
flag.StringVar(&logLevel, "log-level", "debug", "Log level can be: debug, info, warning, error.")
flag.StringVar(&port, "port", "8080", "Port to listen on.")
flag.StringVar(&slackURL, "slack-url", "", "Slack hook URL.")
flag.StringVar(&slackProxyURL, "slack-proxy-url", "", "Slack proxy URL.")
flag.StringVar(&slackUser, "slack-user", "flagger", "Slack user name.")
flag.StringVar(&slackChannel, "slack-channel", "", "Slack channel.")
flag.StringVar(&eventWebhook, "event-webhook", "", "Webhook for publishing flagger events")
flag.StringVar(&msteamsURL, "msteams-url", "", "MS Teams incoming webhook URL.")
flag.StringVar(&msteamsProxyURL, "msteams-proxy-url", "", "MS Teams proxy URL.")
flag.StringVar(&includeLabelPrefix, "include-label-prefix", "", "List of prefixes of labels that are copied when creating primary deployments or daemonsets. Use * to include all.")
flag.IntVar(&threadiness, "threadiness", 2, "Worker concurrency.")
flag.BoolVar(&zapReplaceGlobals, "zap-replace-globals", false, "Whether to change the logging level of the global zap logger.")
flag.StringVar(&zapEncoding, "zap-encoding", "json", "Zap logger encoding.")
flag.StringVar(&namespace, "namespace", "", "Namespace that flagger would watch canary object.")
flag.StringVar(&meshProvider, "mesh-provider", "istio", "Service mesh provider, can be istio, linkerd, appmesh, contour, gloo, nginx, skipper or traefik.")
flag.StringVar(&meshProvider, "mesh-provider", "istio", "Service mesh provider, can be istio, linkerd, appmesh, contour, gloo, nginx, skipper, traefik or osm.")
flag.StringVar(&selectorLabels, "selector-labels", "app,name,app.kubernetes.io/name", "List of pod labels that Flagger uses to create pod selectors.")
flag.StringVar(&ingressAnnotationsPrefix, "ingress-annotations-prefix", "nginx.ingress.kubernetes.io", "Annotations prefix for NGINX ingresses.")
flag.StringVar(&ingressClass, "ingress-class", "", "Ingress class used for annotating HTTPProxy objects.")
@@ -349,11 +353,13 @@ func startLeaderElection(ctx context.Context, run func(), ns string, kubeClient
func initNotifier(logger *zap.SugaredLogger) (client notifier.Interface) {
provider := "slack"
notifierURL := fromEnv("SLACK_URL", slackURL)
notifierProxyURL := fromEnv("SLACK_PROXY_URL", slackProxyURL)
if msteamsURL != "" || os.Getenv("MSTEAMS_URL") != "" {
provider = "msteams"
notifierURL = fromEnv("MSTEAMS_URL", msteamsURL)
notifierProxyURL = fromEnv("MSTEAMS_PROXY_URL", msteamsProxyURL)
}
notifierFactory := notifier.NewFactory(notifierURL, slackUser, slackChannel)
notifierFactory := notifier.NewFactory(notifierURL, notifierProxyURL, slackUser, slackChannel)
var err error
client, err = notifierFactory.Notifier(provider)

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -10,9 +10,9 @@ version in production by gradually shifting traffic to the new version while mea
and running conformance tests.
Flagger implements several deployment strategies (Canary releases, A/B testing, Blue/Green mirroring)
using a service mesh (App Mesh, Istio, Linkerd)
using a service mesh (App Mesh, Istio, Linkerd, Open Service Mesh)
or an ingress controller (Contour, Gloo, NGINX, Skipper, Traefik) for traffic routing.
For release analysis, Flagger can query Prometheus, Datadog, New Relic or CloudWatch
For release analysis, Flagger can query Prometheus, Datadog, New Relic, CloudWatch or Graphite
and for alerting it uses Slack, MS Teams, Discord and Rocket.
![Flagger overview diagram](https://raw.githubusercontent.com/fluxcd/flagger/main/docs/diagrams/flagger-overview.png)
@@ -26,16 +26,17 @@ and part of [Flux](https://fluxcd.io) family of GitOps tools.
## Getting started
To get started with Flagger, chose one of the supported routing providers and
To get started with Flagger, choose one of the supported routing providers and
[install](install/flagger-install-on-kubernetes.md) Flagger with Helm or Kustomize.
After install Flagger, you can follow one of these tutorials to get started:
After installing Flagger, you can follow one of these tutorials to get started:
**Service mesh tutorials**
* [Istio](tutorials/istio-progressive-delivery.md)
* [Linkerd](tutorials/linkerd-progressive-delivery.md)
* [AWS App Mesh](tutorials/appmesh-progressive-delivery.md)
* [Open Service Mesh](tutorials/osm-progressive-delivery.md)
**Ingress controller tutorials**

View File

@@ -30,6 +30,7 @@
* [NGINX Canary Deployments](tutorials/nginx-progressive-delivery.md)
* [Skipper Canary Deployments](tutorials/skipper-progressive-delivery.md)
* [Traefik Canary Deployments](tutorials/traefik-progressive-delivery.md)
* [Open Service Mesh Deployments](tutorials/osm-progressive-delivery.md)
* [Blue/Green Deployments](tutorials/kubernetes-blue-green.md)
* [Canary analysis with Prometheus Operator](tutorials/prometheus-operator.md)
* [Zero downtime deployments](tutorials/zero-downtime-deployments.md)

View File

@@ -200,7 +200,7 @@ Run the Istio e2e tests:
./test/istio/run.sh
```
For each service mesh and ingress controller there is a dedicated e2e test suite,
chose one that matches your changes from this [list](https://github.com/fluxcd/flagger/tree/main/test).
For each service mesh and ingress controller, there is a dedicated e2e test suite,
choose one that matches your changes from this [list](https://github.com/fluxcd/flagger/tree/main/test).
When you open a pull request on Flagger repo, the unit and integration tests will be run in CI.

View File

@@ -13,8 +13,8 @@ Flagger implements the following deployment strategies:
#### When should I use A/B testing instead of progressive traffic shifting?
For frontend applications that require session affinity you should use HTTP headers or
cookies match conditions to ensure a set of users will stay on the same version for
For frontend applications that require session affinity, you should use HTTP headers or
cookie match conditions to ensure a set of users will stay on the same version for
the whole duration of the canary analysis.
#### Can I use Flagger to manage applications that live outside of a service mesh?
@@ -49,16 +49,17 @@ spec:
timestamp: "2020-03-10T14:24:48+0000"
```
#### Why is there a downtime during the canary initializing process when analysis is disabled?
#### Why is there a window of downtime during the canary initializing process when analysis is disabled?
It is the intended behavior when the analysis is disabled, this allows instant rollback and also mimics the way a Kubernetes deployment initialization works.
To avoid this: enable the analysis (`skipAnalysis: true`), wait for the initialization to finish, and disable it afterward (`skipAnalysis: false`).
A window of downtime is the intended behavior when the analysis is disabled. This allows instant rollback and also mimics the way
a Kubernetes deployment initialization works. To avoid this, enable the analysis (`skipAnalysis: true`), wait for the initialization
to finish, and disable it afterward (`skipAnalysis: false`).
## Kubernetes services
#### How is an application exposed inside the cluster?
Assuming the app name is podinfo you can define a canary like:
Assuming the app name is `podinfo`, you can define a canary like:
```yaml
apiVersion: flagger.app/v1beta1
@@ -84,19 +85,19 @@ spec:
If the `service.name` is not specified, then `targetRef.name` is used for
the apex domain and canary/primary services name prefix.
You should treat the service name as an immutable field, changing it could result in routing conflicts.
You should treat the service name as an immutable field; changing its could result in routing conflicts.
Based on the canary spec service, Flagger generates the following Kubernetes ClusterIP service:
* `<service.name>.<namespace>.svc.cluster.local`
* `<service.name>.<namespace>.svc.cluster.local`
selector `app=<name>-primary`
* `<service.name>-primary.<namespace>.svc.cluster.local`
* `<service.name>-primary.<namespace>.svc.cluster.local`
selector `app=<name>-primary`
* `<service.name>-canary.<namespace>.svc.cluster.local`
* `<service.name>-canary.<namespace>.svc.cluster.local`
selector `app=<name>`
@@ -152,7 +153,7 @@ and can be used for conformance testing or load testing.
## Multiple ports
#### My application listens on multiple ports, how can I expose them inside the cluster?
#### My application listens on multiple ports. How can I expose them inside the cluster?
If port discovery is enabled, Flagger scans the deployment spec and extracts the containers ports excluding
the port specified in the canary service and Envoy sidecar ports.
@@ -219,8 +220,15 @@ spec:
app: podinfo
```
Besides `app` Flagger supports `name` and `app.kubernetes.io/name` selectors.
If you use a different convention you can specify your label with the `-selector-labels` flag.
Besides `app`, Flagger supports `name` and `app.kubernetes.io/name` selectors.
If you use a different convention, you can specify your label with the `-selector-labels` flag.
For example:
```
flagger \
-selector-labels=service,name,app.kubernetes.io/name \
...
```
#### Is pod affinity and anti affinity supported?
@@ -331,7 +339,7 @@ spec:
#### How does Flagger measure the request success rate and duration?
Flagger measures the request success rate and duration using Prometheus queries.
By default, Flagger measures the request success rate and duration using Prometheus queries.
#### HTTP requests success rate percentage
@@ -360,8 +368,8 @@ sum(
response_code!~"5.*"
}[$interval]
)
)
/
)
/
sum(
rate(
istio_requests_total{
@@ -384,8 +392,8 @@ sum(
envoy_response_code!~"5.*"
}[$interval]
)
)
/
)
/
sum(
rate(
envoy_cluster_upstream_rq{
@@ -435,7 +443,7 @@ Spec:
Istio query:
```javascript
histogram_quantile(0.99,
histogram_quantile(0.99,
sum(
irate(
istio_request_duration_seconds_bucket{
@@ -451,7 +459,7 @@ histogram_quantile(0.99,
Envoy query (App Mesh, Contour and Gloo):
```javascript
histogram_quantile(0.99,
histogram_quantile(0.99,
sum(
irate(
envoy_cluster_upstream_rq_time_bucket{
@@ -467,8 +475,8 @@ histogram_quantile(0.99,
#### Can I use custom metrics?
The analysis can be extended with metrics provided by Prometheus, Datadog and AWS CloudWatch.
For more details on how custom metrics can be used please read the [metrics docs](usage/metrics.md).
The analysis can be extended with metrics provided by Prometheus, Datadog, AWS CloudWatch, New Relic and Graphite.
For more details on how custom metrics can be used, please read the [metrics docs](usage/metrics.md).
## Istio routing
@@ -711,7 +719,7 @@ spec:
weight: 0
```
Therefore, The following virtual service forward the traffic to `/podinfo` by the above delegate VirtualService.
Therefore, the following virtual service forwards the traffic to `/podinfo` by the above delegate VirtualService.
```yaml
apiVersion: networking.istio.io/v1alpha3
@@ -737,7 +745,7 @@ spec:
namespace: test
```
Note that pilot env `PILOT_ENABLE_VIRTUAL_SERVICE_DELEGATE` must also be set.
Note that pilot env `PILOT_ENABLE_VIRTUAL_SERVICE_DELEGATE` must also be set.
For the use of Istio Delegation, you can refer to the documentation of
[Virtual Service](https://istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate)
and [pilot environment variables](https://istio.io/latest/docs/reference/commands/pilot-discovery/#envvars).
@@ -746,8 +754,8 @@ and [pilot environment variables](https://istio.io/latest/docs/reference/command
#### How can I expose multiple canaries on the same external domain?
Assuming you have two apps, one that servers the main website and one that serves the REST API.
For each app you can define a canary object as:
Assuming you have two apps -- one that serves the main website and one that serves its REST API --
you can define a canary object for each app as:
```yaml
apiVersion: flagger.app/v1beta1
@@ -791,7 +799,7 @@ Istio Pilot will
[merge](https://istio.io/help/ops/traffic-management/deploy-guidelines/#multiple-virtual-services-and-destination-rules-for-the-same-host)
the two services and the website rule will be moved to the end of the list in the merged configuration.
Note that host merging only works if the canaries are bounded to a ingress gateway other than the `mesh` gateway.
Note that host merging only works if the canaries are bounded to an ingress gateway other than the `mesh` gateway.
## Istio Mutual TLS
@@ -809,7 +817,7 @@ spec:
mode: ISTIO_MUTUAL
```
If you run Istio in permissive mode you can disable TLS:
If you run Istio in permissive mode, you can disable TLS:
```yaml
apiVersion: flagger.app/v1beta1
@@ -824,10 +832,10 @@ spec:
#### If Flagger is outside of the mesh, how can it start the load test?
In order for Flagger to be able to call the load tester service from outside the mesh,
you need to disable mTLS on port 80:
you need to disable mTLS:
```yaml
apiVersion: networking.istio.io/v1alpha3
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: flagger-loadtester
@@ -838,14 +846,15 @@ spec:
tls:
mode: DISABLE
---
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: flagger-loadtester
namespace: test
spec:
targets:
- name: flagger-loadtester
ports:
- number: 80
selector:
matchLabels:
app: flagger-loadtester
mtls:
mode: DISABLE
```

View File

@@ -71,6 +71,16 @@ helm upgrade -i flagger flagger/flagger \
--set metricsServer=http://appmesh-prometheus:9090
```
Deploy Flagger for **Open Service Mesh (OSM)** (requires OSM to have been installed with Prometheus):
```console
$ helm upgrade -i flagger flagger/flagger \
--namespace=osm-system \
--set crd.create=false \
--set meshProvider=osm \
--set metricsServer=http://osm-prometheus.osm-system.svc:7070
```
You can install Flagger in any namespace as long as it can talk to the Prometheus service on port 9090.
For ingress controllers, the install instructions are:
@@ -173,6 +183,14 @@ kustomize build https://github.com/fluxcd/flagger/kustomize/linkerd?ref=main | k
This deploys Flagger in the `linkerd` namespace and sets the metrics server URL to Linkerd's Prometheus instance.
Install Flagger for Open Service Mesh:
```bash
kustomize build https://github.com/fluxcd/flagger/kustomize/osm?ref=main | kubectl apply -f -
```
This deploys Flagger in the `osm-system` namespace and sets the metrics server URL to OSM's Prometheus instance.
If you want to install a specific Flagger release, add the version number to the URL:
```bash
@@ -202,7 +220,7 @@ metadata:
name: app
namespace: test
spec:
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo, traefik
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo, traefik, osm
# use the kubernetes provider for Blue/Green style deployments
provider: nginx
```

View File

@@ -337,7 +337,7 @@ A canary deployment can fail due to any of the following reasons:
* the container image can't be downloaded
* the deployment replica set is stuck for more then ten minutes \(eg. due to a container crash loop\)
* the webooks \(acceptance tests, helm tests, load tests, etc\) are returning a non 2xx response
* the webhooks \(acceptance tests, helm tests, load tests, etc\) are returning a non 2xx response
* the HTTP success rate \(non 5xx responses\) metric drops under the threshold
* the HTTP average duration metric goes over the threshold
* the Istio telemetry service is unable to collect traffic metrics

View File

@@ -10,8 +10,8 @@ and Flagger to automate canary releases and A/B testing.
Flagger requires a Kubernetes cluster **v1.16** or newer and Gloo Edge ingress **1.6.0** or newer.
This guide was written for Flagger version **1.6.0** or higher. Prior versions of Flagger
used Gloo upstream groups to handle canaries, but newer versions of Flagger use Gloo
route tables to handle canaries as well as A/B testing.
used Gloo `UpstreamGroup`s to handle canaries, but newer versions of Flagger use Gloo
`RouteTable`s to handle canaries as well as A/B testing.
Install Gloo with Helm v3:
@@ -36,7 +36,7 @@ helm upgrade -i flagger flagger/flagger \
## Bootstrap
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
then creates a series of objects (Kubernetes deployments, ClusterIP services and Gloo route tables groups).
then creates a series of objects (Kubernetes deployments, ClusterIP services, Gloo route tables and upstreams).
These objects expose the application outside the cluster and drive the canary analysis and promotion.
Create a test namespace:
@@ -94,6 +94,14 @@ metadata:
name: podinfo
namespace: test
spec:
# upstreamRef (optional)
# defines an upstream to copy the spec from when flagger generates new upstreams.
# necessary to copy over TLS config, circuit breakers, etc. (anything nonstandard)
# upstreamRef:
# apiVersion: gloo.solo.io/v1
# kind: Upstream
# name: podinfo-upstream
# namespace: gloo-system
provider: gloo
# deployment reference
targetRef:
@@ -152,6 +160,8 @@ spec:
cmd: "hey -z 2m -q 5 -c 2 -host app.example.com http://gateway-proxy.gloo-system"
```
*Note: when using upstreamRef the following fields are copied over from the original upstream: `Labels, SslConfig, CircuitBreakers, ConnectionConfig, UseHttp2, InitialStreamWindowSize`*
Save the above resource as podinfo-canary.yaml and then apply it:
```bash
@@ -174,6 +184,8 @@ service/podinfo
service/podinfo-canary
service/podinfo-primary
routetables.gateway.solo.io/podinfo
upstreams.gloo.solo.io/test-podinfo-canaryupstream-9898
upstreams.gloo.solo.io/test-podinfo-primaryupstream-9898
```
When the bootstrap finishes Flagger will set the canary status to initialized:

View File

@@ -6,7 +6,14 @@ This guide shows you how to use Linkerd and Flagger to automate canary deploymen
## Prerequisites
Flagger requires a Kubernetes cluster **v1.16** or newer and Linkerd **2.4** or newer.
Flagger requires a Kubernetes cluster **v1.16** or newer and Linkerd **2.10** or newer.
Install Linkerd the Promethues (part of Linkerd Viz):
```bash
linkerd install | kubectl apply -f -
linkerd viz install | kubectl apply -f -
```
Install Flagger in the linkerd namespace:
@@ -14,11 +21,11 @@ Install Flagger in the linkerd namespace:
kubectl apply -k github.com/fluxcd/flagger//kustomize/linkerd
```
Note that you'll need kubectl 1.14 or newer to run the above command.
## Bootstrap
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler \(HPA\), then creates a series of objects \(Kubernetes deployments, ClusterIP services and SMI traffic split\). These objects expose the application inside the mesh and drive the canary analysis and promotion.
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
then creates a series of objects (Kubernetes deployments, ClusterIP services and SMI traffic split).
These objects expose the application inside the mesh and drive the canary analysis and promotion.
Create a test namespace and enable Linkerd proxy injection:

View File

@@ -6,7 +6,7 @@ This guide shows you how to use the NGINX ingress controller and Flagger to auto
## Prerequisites
Flagger requires a Kubernetes cluster **v1.16** or newer and NGINX ingress **v0.41** or newer.
Flagger requires a Kubernetes cluster **v1.19** or newer and NGINX ingress **v0.46** or newer.
Install the NGINX ingress controller with Helm v3:
@@ -59,7 +59,7 @@ helm upgrade -i flagger-loadtester flagger/loadtester \
Create an ingress definition (replace `app.example.com` with your own domain):
```yaml
apiVersion: networking.k8s.io/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: podinfo
@@ -70,12 +70,16 @@ metadata:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: app.example.com
- host: "app.example.com"
http:
paths:
- backend:
serviceName: podinfo
servicePort: 80
- pathType: Prefix
path: "/"
backend:
service:
name: podinfo
port:
number: 80
```
Save the above resource as podinfo-ingress.yaml and then apply it:
@@ -101,7 +105,7 @@ spec:
name: podinfo
# ingress reference
ingressRef:
apiVersion: networking.k8s.io/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
name: podinfo
# HPA reference (optional)

View File

@@ -0,0 +1,355 @@
# Open Service Mesh Canary Deployments
This guide shows you how to use Open Service Mesh (OSM) and Flagger to automate canary deployments.
![Flagger OSM Traffic Split](https://raw.githubusercontent.com/fluxcd/flagger/main/docs/diagrams/flagger-osm-traffic-split.png)
## Prerequisites
Flagger requires a Kubernetes cluster **v1.16** or newer and Open Service Mesh **0.9.1** or newer.
Install Open Service Mesh with Prometheus and permissive traffic policy enabled.
```bash
osm install \
--set=OpenServiceMesh.deployPrometheus=true \
--set=OpenServiceMesh.enablePermissiveTrafficPolicy=true
```
Install Flagger in the `osm-system` namespace using `kubectl`.
```bash
kubectl apply -k https://github.com/fluxcd/flagger//kustomize/osm?ref=main
```
Alternatively, Flagger can be installed in the `osm-system` namespace using `helm`.
```bash
helm upgrade -i flagger flagger/flagger \
--namespace=osm-system \
--set meshProvider=osm \
--set metricsServer=http://osm-prometheus.osm-system.svc:7070
```
## Bootstrap
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
then creates a series of objects (Kubernetes deployments, ClusterIP services and SMI traffic split).
These objects expose the application inside the mesh and drive the canary analysis and promotion.
Create a `test` namespace and enable osm namespace monitoring and metrics scraping for the namespace.
```bash
kubectl create namespace test
osm namespace add test
osm metrics enable --namespace test
```
Create a `podinfo` deployment and a horizontal pod autoscaler:
```bash
kubectl apply -k https://github.com/fluxcd/flagger//kustomize/podinfo?ref=main
```
Install the load testing service to generate traffic during the canary analysis:
```bash
kubectl apply -k https://github.com/fluxcd/flagger//kustomize/tester?ref=main
```
Create a canary custom resource for the `podinfo` deployment.
The following `podinfo` canary custom resource instructs Flagger to:
1. monitor any changes to the `podinfo` deployment created earlier,
2. detect `podinfo` deployment revision changes, and
3. start a Flagger canary analysis, rollout, and promotion if there were deployment revision changes.
```yaml
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
namespace: test
spec:
provider: osm
# deployment reference
targetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
# HPA reference (optional)
autoscalerRef:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
name: podinfo
# the maximum time in seconds for the canary deployment
# to make progress before it is rolled back (default 600s)
progressDeadlineSeconds: 60
service:
# ClusterIP port number
port: 9898
# container port number or name (optional)
targetPort: 9898
analysis:
# schedule interval (default 60s)
interval: 30s
# max number of failed metric checks before rollback
threshold: 5
# max traffic percentage routed to canary
# percentage (0-100)
maxWeight: 50
# canary increment step
# percentage (0-100)
stepWeight: 5
# OSM Prometheus checks
metrics:
- name: request-success-rate
# minimum req success rate (non 5xx responses)
# percentage (0-100)
thresholdRange:
min: 99
interval: 1m
- name: request-duration
# maximum req duration P99
# milliseconds
thresholdRange:
max: 500
interval: 30s
# testing (optional)
webhooks:
- name: acceptance-test
type: pre-rollout
url: http://flagger-loadtester.test/
timeout: 30s
metadata:
type: bash
cmd: "curl -sd 'test' http://podinfo-canary.test:9898/token | grep token"
- name: load-test
type: rollout
url: http://flagger-loadtester.test/
timeout: 5s
metadata:
cmd: "hey -z 2m -q 10 -c 2 http://podinfo-canary.test:9898/"
```
Save the above resource as podinfo-canary.yaml and then apply it:
```bash
kubectl apply -f ./podinfo-canary.yaml
```
When the canary analysis starts, Flagger will call the pre-rollout webhooks before routing traffic to the canary.
The canary analysis will run for five minutes while validating the HTTP metrics and rollout hooks every half a minute.
After a couple of seconds Flagger will create the canary objects.
```bash
# applied
deployment.apps/podinfo
horizontalpodautoscaler.autoscaling/podinfo
ingresses.extensions/podinfo
canary.flagger.app/podinfo
# generated
deployment.apps/podinfo-primary
horizontalpodautoscaler.autoscaling/podinfo-primary
service/podinfo
service/podinfo-canary
service/podinfo-primary
trafficsplits.split.smi-spec.io/podinfo
```
After the boostrap, the `podinfo` deployment will be scaled to zero and the traffic to `podinfo.test` will be routed to the primary pods.
During the canary analysis, the `podinfo-canary.test` address can be used to target directly the canary pods.
## Automated Canary Promotion
Flagger implements a control loop that gradually shifts traffic to the canary while measuring key performance indicators like HTTP requests success rate, requests average duration and pod health.
Based on analysis of the KPIs a canary is promoted or aborted.
![Flagger Canary Stages](https://raw.githubusercontent.com/fluxcd/flagger/main/docs/diagrams/flagger-canary-steps.png)
Trigger a canary deployment by updating the container image:
```bash
kubectl -n test set image deployment/podinfo \
podinfod=stefanprodan/podinfo:3.1.1
```
Flagger detects that the deployment revision changed and starts a new rollout.
```text
kubectl -n test describe canary/podinfo
Status:
Canary Weight: 0
Failed Checks: 0
Phase: Succeeded
Events:
New revision detected! Scaling up podinfo.test
Waiting for podinfo.test rollout to finish: 0 of 1 updated replicas are available
Pre-rollout check acceptance-test passed
Advance podinfo.test canary weight 5
Advance podinfo.test canary weight 10
Advance podinfo.test canary weight 15
Advance podinfo.test canary weight 20
Advance podinfo.test canary weight 25
Waiting for podinfo.test rollout to finish: 1 of 2 updated replicas are available
Advance podinfo.test canary weight 30
Advance podinfo.test canary weight 35
Advance podinfo.test canary weight 40
Advance podinfo.test canary weight 45
Advance podinfo.test canary weight 50
Copying podinfo.test template spec to podinfo-primary.test
Waiting for podinfo-primary.test rollout to finish: 1 of 2 updated replicas are available
Promotion completed! Scaling down podinfo.test
```
**Note** that if you apply any new changes to the `podinfo` deployment during the canary analysis, Flagger will restart the analysis.
A canary deployment is triggered by changes in any of the following objects:
* Deployment PodSpec \(container image, command, ports, env, resources, etc\)
* ConfigMaps mounted as volumes or mapped to environment variables
* Secrets mounted as volumes or mapped to environment variables
You can monitor all canaries with:
```bash
watch kubectl get canaries --all-namespaces
NAMESPACE NAME STATUS WEIGHT LASTTRANSITIONTIME
test podinfo Progressing 15 2019-06-30T14:05:07Z
prod frontend Succeeded 0 2019-06-30T16:15:07Z
prod backend Failed 0 2019-06-30T17:05:07Z
```
## Automated Rollback
During the canary analysis you can generate HTTP 500 errors and high latency to test if Flagger pauses and rolls back the faulted version.
Trigger another canary deployment:
```bash
kubectl -n test set image deployment/podinfo \
podinfod=stefanprodan/podinfo:3.1.2
```
Exec into the load tester pod with:
```bash
kubectl -n test exec -it flagger-loadtester-xx-xx sh
```
Repeatedly generate HTTP 500 errors:
```bash
watch -n 1 curl http://podinfo-canary.test:9898/status/500
```
Repeatedly generate latency:
```bash
watch -n 1 curl http://podinfo-canary.test:9898/delay/1
```
When the number of failed checks reaches the canary analysis thresholds defined in the `podinfo` canary custom resource earlier, the traffic is routed back to the primary, the canary is scaled to zero and the rollout is marked as failed.
```text
kubectl -n test describe canary/podinfo
Status:
Canary Weight: 0
Failed Checks: 10
Phase: Failed
Events:
Starting canary analysis for podinfo.test
Pre-rollout check acceptance-test passed
Advance podinfo.test canary weight 5
Advance podinfo.test canary weight 10
Advance podinfo.test canary weight 15
Halt podinfo.test advancement success rate 69.17% < 99%
Halt podinfo.test advancement success rate 61.39% < 99%
Halt podinfo.test advancement success rate 55.06% < 99%
Halt podinfo.test advancement request duration 1.20s > 0.5s
Halt podinfo.test advancement request duration 1.45s > 0.5s
Rolling back podinfo.test failed checks threshold reached 5
Canary failed! Scaling down podinfo.test
```
## Custom Metrics
The canary analysis can be extended with Prometheus queries.
Let's a define a check for 404 not found errors.
Edit the canary analysis (`podinfo-canary.yaml` file) and add the following metric.
For more information on creating additional custom metrics using OSM metrics, please check the [metrics available in OSM](https://docs.openservicemesh.io/docs/guides/observability/metrics/#available-metrics).
```yaml
analysis:
metrics:
- name: "404s percentage"
threshold: 3
query: |
100 - (
sum(
rate(
osm_request_total{
destination_namespace="test",
destination_kind="Deployment",
destination_name="podinfo",
response_code!="404"
}[1m]
)
)
/
sum(
rate(
osm_request_total{
destination_namespace="test",
destination_kind="Deployment",
destination_name="podinfo"
}[1m]
)
) * 100
)
```
The above configuration validates the canary version by checking if the HTTP 404 req/sec percentage is below three percent of the total traffic.
If the 404s rate reaches the 3% threshold, then the analysis is aborted and the canary is marked as failed.
Trigger a canary deployment by updating the container image:
```bash
kubectl -n test set image deployment/podinfo \
podinfod=stefanprodan/podinfo:3.1.3
```
Exec into the load tester pod with:
```bash
kubectl -n test exec -it flagger-loadtester-xx-xx sh
```
Repeatedly generate 404s:
```bash
watch -n 1 curl http://podinfo-canary.test:9898/status/404
```
Watch Flagger logs to confirm successful canary rollback.
```text
kubectl -n osm-system logs deployment/flagger -f | jq .msg
Starting canary deployment for podinfo.test
Pre-rollout check acceptance-test passed
Advance podinfo.test canary weight 5
Halt podinfo.test advancement 404s percentage 6.20 > 3
Halt podinfo.test advancement 404s percentage 6.45 > 3
Halt podinfo.test advancement 404s percentage 7.22 > 3
Halt podinfo.test advancement 404s percentage 6.50 > 3
Halt podinfo.test advancement 404s percentage 6.34 > 3
Rolling back podinfo.test failed checks threshold reached 5
Canary failed! Scaling down podinfo.test
```

View File

@@ -6,7 +6,7 @@ This guide shows you how to use the [Skipper ingress controller](https://opensou
## Prerequisites
Flagger requires a Kubernetes cluster **v1.16** or newer and Skipper ingress **0.11.40** or newer.
Flagger requires a Kubernetes cluster **v1.19** or newer and Skipper ingress **v0.13** or newer.
Install Skipper ingress-controller using [upstream definition](https://opensource.zalando.com/skipper/kubernetes/ingress-controller/#install-skipper-as-ingress-controller).
@@ -36,7 +36,9 @@ kustomize build https://github.com/fluxcd/flagger/kustomize/kubernetes | kubectl
## Bootstrap
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler \(HPA\), then creates a series of objects \(Kubernetes deployments, ClusterIP services and canary ingress\). These objects expose the application outside the cluster and drive the canary analysis and promotion.
Flagger takes a Kubernetes deployment and optionally a horizontal pod autoscaler (HPA),
then creates a series of objects (Kubernetes deployments, ClusterIP services and canary ingress).
These objects expose the application outside the cluster and drive the canary analysis and promotion.
Create a test namespace:
@@ -60,7 +62,7 @@ helm upgrade -i flagger-loadtester flagger/loadtester \
Create an ingress definition \(replace `app.example.com` with your own domain\):
```yaml
apiVersion: networking.k8s.io/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: podinfo
@@ -71,12 +73,16 @@ metadata:
kubernetes.io/ingress.class: "skipper"
spec:
rules:
- host: app.example.com
- host: "app.example.com"
http:
paths:
- backend:
serviceName: podinfo
servicePort: 80
- pathType: Prefix
path: "/"
backend:
service:
name: podinfo
port:
number: 80
```
Save the above resource as podinfo-ingress.yaml and then apply it:
@@ -85,7 +91,7 @@ Save the above resource as podinfo-ingress.yaml and then apply it:
kubectl apply -f ./podinfo-ingress.yaml
```
Create a canary custom resource \(replace `app.example.com` with your own domain\):
Create a canary custom resource (replace `app.example.com` with your own domain):
```yaml
apiVersion: flagger.app/v1beta1
@@ -102,7 +108,7 @@ spec:
name: podinfo
# ingress reference
ingressRef:
apiVersion: networking.k8s.io/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
name: podinfo
# HPA reference (optional)
@@ -190,7 +196,9 @@ ingress.networking.k8s.io/podinfo-canary
## Automated canary promotion
Flagger implements a control loop that gradually shifts traffic to the canary while measuring key performance indicators like HTTP requests success rate, requests average duration and pod health. Based on analysis of the KPIs a canary is promoted or aborted, and the analysis result is published to Slack or MS Teams.
Flagger implements a control loop that gradually shifts traffic to the canary while measuring
key performance indicators like HTTP requests success rate, requests average duration and pod health.
Based on analysis of the KPIs a canary is promoted or aborted, and the analysis result is published to Slack or MS Teams.
![Flagger Canary Stages](https://raw.githubusercontent.com/fluxcd/flagger/main/docs/diagrams/flagger-canary-steps.png)
@@ -271,7 +279,8 @@ Generate latency:
watch -n 1 curl http://app.example.com/delay/1
```
When the number of failed checks reaches the canary analysis threshold, the traffic is routed back to the primary, the canary is scaled to zero and the rollout is marked as failed.
When the number of failed checks reaches the canary analysis threshold, the traffic is routed back to the primary,
the canary is scaled to zero and the rollout is marked as failed.
```text
kubectl -n flagger-system logs deploy/flagger -f | jq .msg
@@ -333,7 +342,8 @@ Edit the canary analysis and add the latency check:
interval: 1m
```
The threshold is set to 500ms so if the average request duration in the last minute goes over half a second then the analysis will fail and the canary will not be promoted.
The threshold is set to 500ms so if the average request duration in the last minute goes over half a second
then the analysis will fail and the canary will not be promoted.
Trigger a canary deployment by updating the container image:
@@ -367,4 +377,3 @@ Canary failed! Scaling down podinfo.test
```
If you have alerting configured, Flagger will send a notification with the reason why the canary failed.

View File

@@ -13,9 +13,17 @@ Install Traefik with Helm v3:
```bash
helm repo add traefik https://helm.traefik.io/traefik
kubectl create ns traefik
helm upgrade -i traefik traefik/traefik \
--namespace traefik \
--set additionalArguments="--metrics.prometheus=true"
cat <<EOF | helm upgrade -i traefik traefik/traefik --namespace traefik -f -
deployment:
podAnnotations:
prometheus.io/port: "9100"
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
metrics:
prometheus:
entryPoint: metrics
EOF
```
Install Flagger and the Prometheus add-on in the same namespace as Traefik:

View File

@@ -5,11 +5,22 @@ You can define a global alert provider at install time or configure alerts on a
## Global configuration
Flagger can be configured to send Slack notifications:
### Slack
#### Slack Configuration
Flagger requires a custom webhook integration from slack, instead of the new slack app system.
The webhook can be generated by following the [legacy slack documentation](https://api.slack.com/legacy/custom-integrations/messaging/webhooks)
#### Flagger configuration
Once the webhook has been generated. Flagger can be configured to send Slack notifications:
```bash
helm upgrade -i flagger flagger/flagger \
--set slack.url=https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK \
--set slack.proxy-url=my-http-proxy.com \ # optional http/s proxy
--set slack.channel=general \
--set slack.user=flagger
```
@@ -25,11 +36,14 @@ or if the analysis reached the maximum number of failed checks:
![Slack Notifications](https://raw.githubusercontent.com/fluxcd/flagger/main/docs/screens/slack-canary-failed.png)
### Microsoft Teams
Flagger can be configured to send notifications to Microsoft Teams:
```bash
helm upgrade -i flagger flagger/flagger \
--set msteams.url=https://outlook.office.com/webhook/YOUR/TEAMS/WEBHOOK
--set msteams.url=https://outlook.office.com/webhook/YOUR/TEAMS/WEBHOOK \
--set msteams.proxy-url=my-http-proxy.com # optional http/s proxy
```
Similar to Slack, Flagger alerts on canary analysis events:
@@ -59,6 +73,8 @@ spec:
username: flagger
# webhook address (ignored if secretRef is specified)
address: https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK
# optional http/s proxy
proxy: http://my-http-proxy.com
# secret containing the webhook address (optional)
secretRef:
name: on-call-url

View File

@@ -3,11 +3,11 @@
Flagger can run automated application analysis, promotion and rollback for the following deployment strategies:
* **Canary Release** \(progressive traffic shifting\)
* Istio, Linkerd, App Mesh, NGINX, Skipper, Contour, Gloo Edge, Traefik
* Istio, Linkerd, App Mesh, NGINX, Skipper, Contour, Gloo Edge, Traefik, Open Service Mesh
* **A/B Testing** \(HTTP headers and cookies traffic routing\)
* Istio, App Mesh, NGINX, Contour, Gloo Edge
* **Blue/Green** \(traffic switching\)
* Kubernetes CNI, Istio, Linkerd, App Mesh, NGINX, Contour, Gloo Edge
* Kubernetes CNI, Istio, Linkerd, App Mesh, NGINX, Contour, Gloo Edge, Open Service Mesh
* **Blue/Green Mirroring** \(traffic shadowing\)
* Istio

View File

@@ -244,7 +244,7 @@ status:
```
The `Promoted` status condition can have one of the following reasons:
Initialized, Waiting, Progressing, Promoting, Finalising, Succeeded or Failed.
Initialized, Waiting, Progressing, WaitingPromotion, Promoting, Finalising, Succeeded or Failed.
A failed canary will have the promoted status set to `false`,
the reason to `failed` and the last applied spec will be different to the last promoted one.

View File

@@ -46,8 +46,9 @@ metadata:
name: my-metric
spec:
provider:
type: # can be prometheus or datadog
type: # can be prometheus, datadog, etc
address: # API URL
insecureSkipVerify: # if set to true, disables the TLS cert validation
secretRef:
name: # name of the secret containing the API credentials
query: # metric query
@@ -401,3 +402,78 @@ Reference the template in the canary analysis:
max: 5
interval: 1m
```
## Graphite
You can create custom metric checks using the Graphite provider.
Graphite template example:
```yaml
apiVersion: flagger.app/v1beta1
kind: MetricTemplate
metadata:
name: graphite-request-success-rate
spec:
provider:
type: graphite
address: http://graphite.monitoring
query: |
target=summarize(
asPercent(
sumSeries(
stats.timers.httpServerRequests.app.{{target}}.exception.*.method.*.outcome.{CLIENT_ERROR,INFORMATIONAL,REDIRECTION,SUCCESS}.status.*.uri.*.count
),
sumSeries(
stats.timers.httpServerRequests.app.{{target}}.exception.*.method.*.outcome.*.status.*.uri.*.count
)
),
{{interval}},
'avg'
)
```
Reference the template in the canary analysis:
```yaml
analysis:
metrics:
- name: "success rate"
templateRef:
name: graphite-request-success-rate
thresholdRange:
min: 90
interval: 1min
```
## Graphite authentication
If your Graphite API requires basic authentication, you can create a secret in the same namespace
as the `MetricTemplate` with the basic-auth credentials:
```yaml
apiVersion: v1
kind: Secret
metadata:
name: graphite-basic-auth
namespace: flagger
data:
username: your-user
password: your-password
```
Then, reference the secret in the `MetricTemplate`:
```yaml
apiVersion: flagger.app/v1beta1
kind: MetricTemplate
metadata:
name: my-metric
namespace: flagger
spec:
provider:
type: graphite
address: http://graphite.monitoring
secretRef:
name: graphite-basic-auth
```

View File

@@ -16,6 +16,9 @@ There are several types of hooks:
* **rollout** hooks are executed during the analysis on each iteration before the metric checks.
If a rollout hook call fails the canary advancement is paused and eventfully rolled back.
* **confirm-traffic-increase** hooks are executed right before the weight on the canary is increased. The canary
advancement is paused until this hook returns HTTP 200.
* **confirm-promotion** hooks are executed before the promotion step.
The canary promotion is paused until the hooks return HTTP 200.
While the promotion is paused, Flagger will continue to run the metrics checks and rollout hooks.
@@ -51,6 +54,9 @@ Spec:
timeout: 15s
metadata:
cmd: "hey -z 1m -q 5 -c 2 http://podinfo-canary.test:9898/"
- name: "traffic increase gate"
type: confirm-traffic-increase
url: http://flagger-loadtester.test/gate/approve
- name: "promotion gate"
type: confirm-promotion
url: http://flagger-loadtester.test/gate/approve
@@ -347,7 +353,8 @@ the web-hook will try to call Concord before timing out (Default is 30s).
## Manual Gating
For manual approval of a canary deployment you can use the `confirm-rollout` and `confirm-promotion` webhooks.
The confirmation rollout hooks are executed before the pre-rollout hooks.
The confirmation rollout hooks are executed before the pre-rollout hooks. For manually approving traffic weight increase,
you can use the `confirm-traffic-increase` webhook.
Flagger will halt the canary traffic shifting and analysis until the confirm webhook returns HTTP status 200.
For manual rollback of a canary deployment you can use the `rollback` webhook.
@@ -370,6 +377,17 @@ The `/gate/halt` returns HTTP 403 thus blocking the rollout.
If you have notifications enabled, Flagger will post a message to
Slack or MS Teams if a canary rollout is waiting for approval.
The notifications can be disabled with:
```yaml
analysis:
webhooks:
- name: "gate"
type: confirm-rollout
url: http://flagger-loadtester.test/gate/halt
muteAlert: true
```
Change the URL to `/gate/approve` to start the canary analysis:
```yaml

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-icon</title>
<g id="flagger-icon" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M11.7870673,17.7791346 C10.7376442,17.0966346 10.7376442,15.5602885 11.7870673,14.8783654 L31.1659135,2.27951923 C31.4527085,2.09313128 31.7809164,2 32.109115,2 C32.1144833,2 32.1144833,30.6577081 32.1144833,30.6577081 C31.7844966,30.658555 31.4542722,30.565385 31.1659135,30.3779808 L11.7870673,17.7791346 Z" id="Fill-1" fill="#7BB09F"></path>
<path d="M1.78706731,24.2791346 C0.737644231,23.5966346 0.737644231,22.0602885 1.78706731,21.3783654 L21.1659135,8.77951923 C21.4527085,8.59313128 21.7809164,8.5 22.109147,8.5 C22.1144833,8.5 16.7504591,14.9302441 16.4621003,14.7428399 L1.78706731,24.2791346 Z" id="Fill-1-Copy" fill="#7BB09F"></path>
<path d="M32.1005414,32.7999243 C32.4314477,32.7984255 32.7627112,32.8915919 33.051875,33.0795192 L52.4312981,45.6783654 C53.4807212,46.3602885 53.4807212,47.8966346 52.4312981,48.5791346 L33.051875,61.1779808 C32.7723427,61.3596486 32.4534685,61.452763 32.1336066,61.4575 C32.1336066,61.4575 32.1005414,32.7999243 32.1005414,32.7999243 Z" id="Fill-1" fill="#7BB09F"></path>
<path d="M42.6594534,51.6821881 L62.4312981,39.1784411 C63.4807212,39.8603641 63.4807212,41.3967103 62.4312981,42.0792103 L43.051875,54.6780564 C42.7723427,54.8597243 42.4534685,54.9528387 42.1336066,54.9573995 C42.1336066,54.9573995 42.3702896,51.4942608 42.6594534,51.6821881 Z" id="Fill-1-Copy-2" fill="#7BB09F"></path>
<g id="Group" transform="translate(11.000000, 32.000000)" fill="#7BB09F">
<path d="M23.1648462,1.79890385 C22.7177486,1.57560653 21.9079818,0.775616463 21.12525,0.8 C20.4471662,0.8 20.1819808,1.07951923 19.08525,1.79890385 C20.6106346,2.45198077 26.2588846,4.40082692 27.8390769,4.83755769 C25.3252832,3.17403545 23.7672062,2.16115083 23.1648462,1.79890385 Z" id="Fill-5"></path>
<path d="M17.1629423,3.04898077 L15.4269808,4.17744231 C16.9371113,5.2881491 18.4473527,6.15609036 19.9577051,6.7812661 C23.0272183,8.05182074 26.9292047,8.86995809 27.8191154,9.08936538 C32.8706538,10.3349423 37.6418077,11.5107115 41.4783462,15.3478269 C41.6733462,15.54225 41.8562308,15.7407115 42.0373846,15.93975 C42.4308462,15.1880192 42.2335385,14.1957115 41.4466154,13.6845577 L33.8560385,8.74898077 C32.0133462,8.14090385 30.1360385,7.67590385 28.2806538,7.21898077 C26.5308462,6.78744231 23.5727919,6.02059898 21.9181765,5.49156052 C20.8150996,5.13886821 19.2300215,4.32467496 17.1629423,3.04898077 Z" id="Fill-7"></path>
<path d="M16.8750849,8.20483098 C15.6193488,7.62821266 14.2831279,6.83594208 12.8664221,5.82801923 L11.2119808,6.91782692 C12.8335577,8.16072333 14.2385577,9.07106402 15.4269808,9.648849 C17.2096154,10.5155265 24.0114808,12.3722308 24.4326346,12.4760769 C29.4841731,13.7210769 34.2553269,14.8968462 38.0924423,18.7339615 C38.0987885,18.7408846 38.1045577,18.7472308 38.1114808,18.7541538 L39.75225,17.6868462 C39.6524423,17.5824231 39.5584038,17.4751154 39.4545577,17.3718462 C35.2384038,13.1551154 29.9791731,11.8587692 24.8941731,10.6051154 C24.3137885,10.4620385 18.7586891,9.06975845 16.8750849,8.20483098 Z" id="Fill-11"></path>
<path d="M23.1650769,16.3935 C27.1175769,17.4140769 30.8341154,18.6342692 33.9823846,21.4381154 L35.6439231,20.3581154 C32.0465509,16.9762696 28.005918,15.3433009 23.4551919,14.4789663 C19.3757148,13.7041376 16.6984434,12.7436057 13.6520967,11.5324737 C11.621199,10.7250524 9.97648083,9.72718297 8.71794231,8.53886538 L7.04717308,9.62521154 C9.06194661,11.3700006 10.8411363,12.5664934 12.3847422,13.2146899 C14.4228927,14.0705575 18.0163376,15.1301608 23.1650769,16.3935 Z" id="Fill-17"></path>
<path d="M4.57875,11.2299231 L2.92990385,12.3018462 C2.98759615,12.3612692 3.04009615,12.423 3.09951923,12.4818462 C7.31625,16.6985769 12.5743269,17.9949231 17.6599038,19.2485769 C22.0641346,20.3337692 26.2543269,21.3687692 29.7989423,24.1581923 L31.4893269,23.0591538 C27.4958654,19.6968462 22.7385577,18.5158846 18.1214423,17.3781923 C13.1206731,16.1453077 8.39567308,14.9758846 4.57875,11.2299231" id="Fill-19"></path>
<path d="M1.07555769,14.5060962 C0.883442308,14.3139808 0.702865385,14.1184038 0.524019231,13.9216731 C-0.227711538,14.6745577 -0.139442308,15.9726346 0.80325,16.5853269 L6.50959615,20.2955192 C9.03536538,21.3409038 11.6765192,21.9945577 14.2738269,22.6349423 C18.3284423,23.6341731 22.2019038,24.5924423 25.5578654,26.9157115 L27.2834423,25.7930192 C23.4676731,22.9245577 19.0403654,21.8255192 14.7347885,20.7639808 C9.68382692,19.5189808 4.91267308,18.3432115 1.07555769,14.5060962" id="Fill-21"></path>
<path d="M19.6441154,28.8342692 C20.0243077,29.0188846 20.3998846,29.2133077 20.7691154,29.4221538 C21.2093077,29.5150385 21.6771923,29.4383077 22.0683462,29.1838846 L23.0260385,28.5613846 C19.9493077,26.5035 16.5287308,25.461 13.1196923,24.5927308 L19.6441154,28.8342692 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy" transform="translate(11.000000, 1.200000)" fill="#7BB09F">
<path d="M23.1648462,1.79890385 C22.7177486,1.57560653 21.9079818,0.775616463 21.12525,0.8 C20.4471662,0.8 20.1819808,1.07951923 19.08525,1.79890385 C20.6106346,2.45198077 26.2588846,4.40082692 27.8390769,4.83755769 C25.3252832,3.17403545 23.7672062,2.16115083 23.1648462,1.79890385 Z" id="Fill-5"></path>
<path d="M17.1629423,3.04898077 L15.4269808,4.17744231 C16.9371113,5.2881491 18.4473527,6.15609036 19.9577051,6.7812661 C23.0272183,8.05182074 26.9292047,8.86995809 27.8191154,9.08936538 C32.8706538,10.3349423 37.6418077,11.5107115 41.4783462,15.3478269 C41.6733462,15.54225 41.8562308,15.7407115 42.0373846,15.93975 C42.4308462,15.1880192 42.2335385,14.1957115 41.4466154,13.6845577 L33.8560385,8.74898077 C32.0133462,8.14090385 30.1360385,7.67590385 28.2806538,7.21898077 C26.5308462,6.78744231 23.5727919,6.02059898 21.9181765,5.49156052 C20.8150996,5.13886821 19.2300215,4.32467496 17.1629423,3.04898077 Z" id="Fill-7"></path>
<path d="M16.8750849,8.20483098 C15.6193488,7.62821266 14.2831279,6.83594208 12.8664221,5.82801923 L11.2119808,6.91782692 C12.8335577,8.16072333 14.2385577,9.07106402 15.4269808,9.648849 C17.2096154,10.5155265 24.0114808,12.3722308 24.4326346,12.4760769 C29.4841731,13.7210769 34.2553269,14.8968462 38.0924423,18.7339615 C38.0987885,18.7408846 38.1045577,18.7472308 38.1114808,18.7541538 L39.75225,17.6868462 C39.6524423,17.5824231 39.5584038,17.4751154 39.4545577,17.3718462 C35.2384038,13.1551154 29.9791731,11.8587692 24.8941731,10.6051154 C24.3137885,10.4620385 18.7586891,9.06975845 16.8750849,8.20483098 Z" id="Fill-11"></path>
<path d="M23.1650769,16.3935 C27.1175769,17.4140769 30.8341154,18.6342692 33.9823846,21.4381154 L35.6439231,20.3581154 C32.0465509,16.9762696 28.005918,15.3433009 23.4551919,14.4789663 C19.3757148,13.7041376 16.6984434,12.7436057 13.6520967,11.5324737 C11.621199,10.7250524 9.97648083,9.72718297 8.71794231,8.53886538 L7.04717308,9.62521154 C9.06194661,11.3700006 10.8411363,12.5664934 12.3847422,13.2146899 C14.4228927,14.0705575 18.0163376,15.1301608 23.1650769,16.3935 Z" id="Fill-17"></path>
<path d="M4.57875,11.2299231 L2.92990385,12.3018462 C2.98759615,12.3612692 3.04009615,12.423 3.09951923,12.4818462 C7.31625,16.6985769 12.5743269,17.9949231 17.6599038,19.2485769 C22.0641346,20.3337692 26.2543269,21.3687692 29.7989423,24.1581923 L31.4893269,23.0591538 C27.4958654,19.6968462 22.7385577,18.5158846 18.1214423,17.3781923 C13.1206731,16.1453077 8.39567308,14.9758846 4.57875,11.2299231" id="Fill-19"></path>
<path d="M1.07555769,14.5060962 C0.883442308,14.3139808 0.702865385,14.1184038 0.524019231,13.9216731 C-0.227711538,14.6745577 -0.139442308,15.9726346 0.80325,16.5853269 L6.50959615,20.2955192 C9.03536538,21.3409038 11.6765192,21.9945577 14.2738269,22.6349423 C18.3284423,23.6341731 22.2019038,24.5924423 25.5578654,26.9157115 L27.2834423,25.7930192 C23.4676731,22.9245577 19.0403654,21.8255192 14.7347885,20.7639808 C9.68382692,19.5189808 4.91267308,18.3432115 1.07555769,14.5060962" id="Fill-21"></path>
<path d="M19.6441154,28.8342692 C20.0243077,29.0188846 20.3998846,29.2133077 20.7691154,29.4221538 C21.2093077,29.5150385 21.6771923,29.4383077 22.0683462,29.1838846 L23.0260385,28.5613846 C19.9493077,26.5035 16.5287308,25.461 13.1196923,24.5927308 L19.6441154,28.8342692 Z" id="Fill-23"></path>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-stacked-black</title>
<g id="flagger-stacked-black" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M38.9874286,149.672 C42.6274286,149.672 45.7634286,148.384 47.9474286,145.92 L47.9474286,149 L52.1474286,149 L52.1474286,130.408 C52.1474286,123.856 47.4434286,121.28 41.6754286,121.28 C37.2514286,121.28 33.7794286,122.736 30.8674286,125.76 L32.8274286,128.672 C35.2354286,126.04 37.8674286,124.92 41.1154286,124.92 C45.0354286,124.92 47.9474286,126.992 47.9474286,130.576 L47.9474286,135.448 C45.7634286,132.984 42.6834286,131.808 38.9874286,131.808 C34.3954286,131.808 29.5794286,134.608 29.5794286,140.712 C29.5794286,146.592 34.4514286,149.672 38.9874286,149.672 Z M40.5554286,146.648 C36.5794286,146.648 33.8354286,144.184 33.8354286,140.712 C33.8354286,137.296 36.5794286,134.832 40.5554286,134.832 C43.4674286,134.832 46.3234286,135.952 47.9474286,138.136 L47.9474286,143.288 C46.3234286,145.528 43.4674286,146.648 40.5554286,146.648 Z M69.1817143,159.976 C75.7897143,159.976 82.1177143,157.176 82.1177143,148.608 L82.1177143,121.952 L77.9177143,121.952 L77.9177143,126.04 C75.7337143,123.072 72.4297143,121.28 68.7897143,121.28 C61.6777143,121.28 56.7497143,126.656 56.7497143,135.336 C56.7497143,144.072 61.7337143,149.336 68.7897143,149.336 C72.5977143,149.336 75.9017143,147.264 77.9177143,144.52 L77.9177143,148.608 C77.9177143,154.32 73.6617143,156.504 69.1817143,156.504 C65.3177143,156.504 62.6297143,155.496 60.3897143,152.864 L58.2617143,155.888 C61.5097143,159.08 64.6457143,159.976 69.1817143,159.976 Z M69.8537143,145.584 C64.3657143,145.584 61.1177143,141.272 61.1177143,135.336 C61.1177143,129.344 64.3657143,125.032 69.8537143,125.032 C73.1577143,125.032 76.4057143,127.048 77.9177143,129.344 L77.9177143,141.216 C76.4057143,143.568 73.1577143,145.584 69.8537143,145.584 Z M99.096,159.976 C105.704,159.976 112.032,157.176 112.032,148.608 L112.032,121.952 L107.832,121.952 L107.832,126.04 C105.648,123.072 102.344,121.28 98.704,121.28 C91.592,121.28 86.664,126.656 86.664,135.336 C86.664,144.072 91.648,149.336 98.704,149.336 C102.512,149.336 105.816,147.264 107.832,144.52 L107.832,148.608 C107.832,154.32 103.576,156.504 99.096,156.504 C95.232,156.504 92.544,155.496 90.304,152.864 L88.176,155.888 C91.424,159.08 94.56,159.976 99.096,159.976 Z M99.768,145.584 C94.28,145.584 91.032,141.272 91.032,135.336 C91.032,129.344 94.28,125.032 99.768,125.032 C103.072,125.032 106.32,127.048 107.832,129.344 L107.832,141.216 C106.32,143.568 103.072,145.584 99.768,145.584 Z M130.410286,149.672 C134.778286,149.672 138.418286,148.16 141.162286,145.472 L139.146286,142.728 C136.962286,144.968 133.882286,146.2 130.746286,146.2 C124.922286,146.2 121.394286,141.944 121.058286,136.848 L142.898286,136.848 L142.898286,135.784 C142.898286,127.664 138.082286,121.28 129.906286,121.28 C122.178286,121.28 116.578286,127.608 116.578286,135.448 C116.578286,143.904 122.346286,149.672 130.410286,149.672 Z M138.754286,133.712 L121.002286,133.712 C121.226286,129.624 124.082286,124.752 129.850286,124.752 C136.010286,124.752 138.698286,129.736 138.754286,133.712 Z M151.588571,149 L151.588571,129.848 C152.820571,127.664 156.348571,125.536 158.980571,125.536 C159.596571,125.536 160.100571,125.592 160.604571,125.648 L160.604571,121.336 C156.908571,121.336 153.772571,123.464 151.588571,126.264 L151.588571,121.952 L147.388571,121.952 L147.388571,149 L151.588571,149 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
<g id="flags" transform="translate(26.036697, 0.500000)">
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape" fill="#1A1A1A"></path>
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape" fill="#1A1A1A"></path>
<g id="Group-Copy" transform="translate(17.363303, 0.000000)" fill="#171818">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)" fill="#131415">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-stacked-color</title>
<g id="flagger-stacked-color" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M38.9874286,149.672 C42.6274286,149.672 45.7634286,148.384 47.9474286,145.92 L47.9474286,149 L52.1474286,149 L52.1474286,130.408 C52.1474286,123.856 47.4434286,121.28 41.6754286,121.28 C37.2514286,121.28 33.7794286,122.736 30.8674286,125.76 L32.8274286,128.672 C35.2354286,126.04 37.8674286,124.92 41.1154286,124.92 C45.0354286,124.92 47.9474286,126.992 47.9474286,130.576 L47.9474286,135.448 C45.7634286,132.984 42.6834286,131.808 38.9874286,131.808 C34.3954286,131.808 29.5794286,134.608 29.5794286,140.712 C29.5794286,146.592 34.4514286,149.672 38.9874286,149.672 Z M40.5554286,146.648 C36.5794286,146.648 33.8354286,144.184 33.8354286,140.712 C33.8354286,137.296 36.5794286,134.832 40.5554286,134.832 C43.4674286,134.832 46.3234286,135.952 47.9474286,138.136 L47.9474286,143.288 C46.3234286,145.528 43.4674286,146.648 40.5554286,146.648 Z M69.1817143,159.976 C75.7897143,159.976 82.1177143,157.176 82.1177143,148.608 L82.1177143,121.952 L77.9177143,121.952 L77.9177143,126.04 C75.7337143,123.072 72.4297143,121.28 68.7897143,121.28 C61.6777143,121.28 56.7497143,126.656 56.7497143,135.336 C56.7497143,144.072 61.7337143,149.336 68.7897143,149.336 C72.5977143,149.336 75.9017143,147.264 77.9177143,144.52 L77.9177143,148.608 C77.9177143,154.32 73.6617143,156.504 69.1817143,156.504 C65.3177143,156.504 62.6297143,155.496 60.3897143,152.864 L58.2617143,155.888 C61.5097143,159.08 64.6457143,159.976 69.1817143,159.976 Z M69.8537143,145.584 C64.3657143,145.584 61.1177143,141.272 61.1177143,135.336 C61.1177143,129.344 64.3657143,125.032 69.8537143,125.032 C73.1577143,125.032 76.4057143,127.048 77.9177143,129.344 L77.9177143,141.216 C76.4057143,143.568 73.1577143,145.584 69.8537143,145.584 Z M99.096,159.976 C105.704,159.976 112.032,157.176 112.032,148.608 L112.032,121.952 L107.832,121.952 L107.832,126.04 C105.648,123.072 102.344,121.28 98.704,121.28 C91.592,121.28 86.664,126.656 86.664,135.336 C86.664,144.072 91.648,149.336 98.704,149.336 C102.512,149.336 105.816,147.264 107.832,144.52 L107.832,148.608 C107.832,154.32 103.576,156.504 99.096,156.504 C95.232,156.504 92.544,155.496 90.304,152.864 L88.176,155.888 C91.424,159.08 94.56,159.976 99.096,159.976 Z M99.768,145.584 C94.28,145.584 91.032,141.272 91.032,135.336 C91.032,129.344 94.28,125.032 99.768,125.032 C103.072,125.032 106.32,127.048 107.832,129.344 L107.832,141.216 C106.32,143.568 103.072,145.584 99.768,145.584 Z M130.410286,149.672 C134.778286,149.672 138.418286,148.16 141.162286,145.472 L139.146286,142.728 C136.962286,144.968 133.882286,146.2 130.746286,146.2 C124.922286,146.2 121.394286,141.944 121.058286,136.848 L142.898286,136.848 L142.898286,135.784 C142.898286,127.664 138.082286,121.28 129.906286,121.28 C122.178286,121.28 116.578286,127.608 116.578286,135.448 C116.578286,143.904 122.346286,149.672 130.410286,149.672 Z M138.754286,133.712 L121.002286,133.712 C121.226286,129.624 124.082286,124.752 129.850286,124.752 C136.010286,124.752 138.698286,129.736 138.754286,133.712 Z M151.588571,149 L151.588571,129.848 C152.820571,127.664 156.348571,125.536 158.980571,125.536 C159.596571,125.536 160.100571,125.592 160.604571,125.648 L160.604571,121.336 C156.908571,121.336 153.772571,123.464 151.588571,126.264 L151.588571,121.952 L147.388571,121.952 L147.388571,149 L151.588571,149 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
<g id="flags" transform="translate(26.036697, 0.500000)" fill="#7BB09F">
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="160px" height="160px" viewBox="0 0 160 160" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-stacked-white</title>
<g id="flagger-stacked-white" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M10.1931429,149 L10.1931429,125.648 L15.6811429,125.648 L15.6811429,121.952 L10.1931429,121.952 L10.1931429,119.88 C10.1931429,116.408 11.7051429,114.56 14.5051429,114.56 C15.5131429,114.56 16.2411429,114.784 16.9131429,115.176 L17.9771429,111.984 C16.8571429,111.368 15.4571429,111.088 13.8331429,111.088 C9.18514286,111.088 5.99314286,114.28 5.99314286,119.88 L5.99314286,121.952 L1.51314286,121.952 L1.51314286,125.648 L5.99314286,125.648 L5.99314286,149 L10.1931429,149 Z M24.9211429,149 L24.9211429,111.648 L20.7211429,111.648 L20.7211429,149 L24.9211429,149 Z M38.9874286,149.672 C42.6274286,149.672 45.7634286,148.384 47.9474286,145.92 L47.9474286,149 L52.1474286,149 L52.1474286,130.408 C52.1474286,123.856 47.4434286,121.28 41.6754286,121.28 C37.2514286,121.28 33.7794286,122.736 30.8674286,125.76 L32.8274286,128.672 C35.2354286,126.04 37.8674286,124.92 41.1154286,124.92 C45.0354286,124.92 47.9474286,126.992 47.9474286,130.576 L47.9474286,135.448 C45.7634286,132.984 42.6834286,131.808 38.9874286,131.808 C34.3954286,131.808 29.5794286,134.608 29.5794286,140.712 C29.5794286,146.592 34.4514286,149.672 38.9874286,149.672 Z M40.5554286,146.648 C36.5794286,146.648 33.8354286,144.184 33.8354286,140.712 C33.8354286,137.296 36.5794286,134.832 40.5554286,134.832 C43.4674286,134.832 46.3234286,135.952 47.9474286,138.136 L47.9474286,143.288 C46.3234286,145.528 43.4674286,146.648 40.5554286,146.648 Z M69.1817143,159.976 C75.7897143,159.976 82.1177143,157.176 82.1177143,148.608 L82.1177143,121.952 L77.9177143,121.952 L77.9177143,126.04 C75.7337143,123.072 72.4297143,121.28 68.7897143,121.28 C61.6777143,121.28 56.7497143,126.656 56.7497143,135.336 C56.7497143,144.072 61.7337143,149.336 68.7897143,149.336 C72.5977143,149.336 75.9017143,147.264 77.9177143,144.52 L77.9177143,148.608 C77.9177143,154.32 73.6617143,156.504 69.1817143,156.504 C65.3177143,156.504 62.6297143,155.496 60.3897143,152.864 L58.2617143,155.888 C61.5097143,159.08 64.6457143,159.976 69.1817143,159.976 Z M69.8537143,145.584 C64.3657143,145.584 61.1177143,141.272 61.1177143,135.336 C61.1177143,129.344 64.3657143,125.032 69.8537143,125.032 C73.1577143,125.032 76.4057143,127.048 77.9177143,129.344 L77.9177143,141.216 C76.4057143,143.568 73.1577143,145.584 69.8537143,145.584 Z M99.096,159.976 C105.704,159.976 112.032,157.176 112.032,148.608 L112.032,121.952 L107.832,121.952 L107.832,126.04 C105.648,123.072 102.344,121.28 98.704,121.28 C91.592,121.28 86.664,126.656 86.664,135.336 C86.664,144.072 91.648,149.336 98.704,149.336 C102.512,149.336 105.816,147.264 107.832,144.52 L107.832,148.608 C107.832,154.32 103.576,156.504 99.096,156.504 C95.232,156.504 92.544,155.496 90.304,152.864 L88.176,155.888 C91.424,159.08 94.56,159.976 99.096,159.976 Z M99.768,145.584 C94.28,145.584 91.032,141.272 91.032,135.336 C91.032,129.344 94.28,125.032 99.768,125.032 C103.072,125.032 106.32,127.048 107.832,129.344 L107.832,141.216 C106.32,143.568 103.072,145.584 99.768,145.584 Z M130.410286,149.672 C134.778286,149.672 138.418286,148.16 141.162286,145.472 L139.146286,142.728 C136.962286,144.968 133.882286,146.2 130.746286,146.2 C124.922286,146.2 121.394286,141.944 121.058286,136.848 L142.898286,136.848 L142.898286,135.784 C142.898286,127.664 138.082286,121.28 129.906286,121.28 C122.178286,121.28 116.578286,127.608 116.578286,135.448 C116.578286,143.904 122.346286,149.672 130.410286,149.672 Z M138.754286,133.712 L121.002286,133.712 C121.226286,129.624 124.082286,124.752 129.850286,124.752 C136.010286,124.752 138.698286,129.736 138.754286,133.712 Z M151.588571,149 L151.588571,129.848 C152.820571,127.664 156.348571,125.536 158.980571,125.536 C159.596571,125.536 160.100571,125.592 160.604571,125.648 L160.604571,121.336 C156.908571,121.336 153.772571,123.464 151.588571,126.264 L151.588571,121.952 L147.388571,121.952 L147.388571,149 L151.588571,149 Z" id="fflagger" fill="#FFFFFF" fill-rule="nonzero"></path>
<g id="flags" transform="translate(26.036697, 0.500000)" fill="#FFFFFF">
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="359px" height="106px" viewBox="0 0 359 106" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-vertical-black</title>
<g id="flagger-vertical-black" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M178.902,78.924 C183.907,78.924 188.219,77.153 191.222,73.765 L191.222,78 L196.997,78 L196.997,52.436 C196.997,43.427 190.529,39.885 182.598,39.885 C176.515,39.885 171.741,41.887 167.737,46.045 L170.432,50.049 C173.743,46.43 177.362,44.89 181.828,44.89 C187.218,44.89 191.222,47.739 191.222,52.667 L191.222,59.366 C188.219,55.978 183.984,54.361 178.902,54.361 C172.588,54.361 165.966,58.211 165.966,66.604 C165.966,74.689 172.665,78.924 178.902,78.924 Z M181.058,74.766 C175.591,74.766 171.818,71.378 171.818,66.604 C171.818,61.907 175.591,58.519 181.058,58.519 C185.062,58.519 188.989,60.059 191.222,63.062 L191.222,70.146 C188.989,73.226 185.062,74.766 181.058,74.766 Z M223.562,93.092 C232.648,93.092 241.349,89.242 241.349,77.461 L241.349,40.809 L235.574,40.809 L235.574,46.43 C232.571,42.349 228.028,39.885 223.023,39.885 C213.244,39.885 206.468,47.277 206.468,59.212 C206.468,71.224 213.321,78.462 223.023,78.462 C228.259,78.462 232.802,75.613 235.574,71.84 L235.574,77.461 C235.574,85.315 229.722,88.318 223.562,88.318 C218.249,88.318 214.553,86.932 211.473,83.313 L208.547,87.471 C213.013,91.86 217.325,93.092 223.562,93.092 Z M224.486,73.303 C216.94,73.303 212.474,67.374 212.474,59.212 C212.474,50.973 216.94,45.044 224.486,45.044 C229.029,45.044 233.495,47.816 235.574,50.973 L235.574,67.297 C233.495,70.531 229.029,73.303 224.486,73.303 Z M267.837,93.092 C276.923,93.092 285.624,89.242 285.624,77.461 L285.624,40.809 L279.849,40.809 L279.849,46.43 C276.846,42.349 272.303,39.885 267.298,39.885 C257.519,39.885 250.743,47.277 250.743,59.212 C250.743,71.224 257.596,78.462 267.298,78.462 C272.534,78.462 277.077,75.613 279.849,71.84 L279.849,77.461 C279.849,85.315 273.997,88.318 267.837,88.318 C262.524,88.318 258.828,86.932 255.748,83.313 L252.822,87.471 C257.288,91.86 261.6,93.092 267.837,93.092 Z M268.761,73.303 C261.215,73.303 256.749,67.374 256.749,59.212 C256.749,50.973 261.215,45.044 268.761,45.044 C273.304,45.044 277.77,47.816 279.849,50.973 L279.849,67.297 C277.77,70.531 273.304,73.303 268.761,73.303 Z M314.037,78.924 C320.043,78.924 325.048,76.845 328.821,73.149 L326.049,69.376 C323.046,72.456 318.811,74.15 314.499,74.15 C306.491,74.15 301.64,68.298 301.178,61.291 L331.208,61.291 L331.208,59.828 C331.208,48.663 324.586,39.885 313.344,39.885 C302.718,39.885 295.018,48.586 295.018,59.366 C295.018,70.993 302.949,78.924 314.037,78.924 Z M325.51,56.979 L301.101,56.979 C301.409,51.358 305.336,44.659 313.267,44.659 C321.737,44.659 325.433,51.512 325.51,56.979 Z M346.3,78 L346.3,51.666 C347.994,48.663 352.845,45.737 356.464,45.737 C357.311,45.737 358.004,45.814 358.697,45.891 L358.697,39.962 C353.615,39.962 349.303,42.888 346.3,46.738 L346.3,40.809 L340.525,40.809 L340.525,78 L346.3,78 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
<g id="flags" transform="translate(0.036697, 0.500000)" fill="#1A1A1A">
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="359px" height="106px" viewBox="0 0 359 106" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-vertical-color</title>
<g id="flagger-vertical-color" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M178.902,78.924 C183.907,78.924 188.219,77.153 191.222,73.765 L191.222,78 L196.997,78 L196.997,52.436 C196.997,43.427 190.529,39.885 182.598,39.885 C176.515,39.885 171.741,41.887 167.737,46.045 L170.432,50.049 C173.743,46.43 177.362,44.89 181.828,44.89 C187.218,44.89 191.222,47.739 191.222,52.667 L191.222,59.366 C188.219,55.978 183.984,54.361 178.902,54.361 C172.588,54.361 165.966,58.211 165.966,66.604 C165.966,74.689 172.665,78.924 178.902,78.924 Z M181.058,74.766 C175.591,74.766 171.818,71.378 171.818,66.604 C171.818,61.907 175.591,58.519 181.058,58.519 C185.062,58.519 188.989,60.059 191.222,63.062 L191.222,70.146 C188.989,73.226 185.062,74.766 181.058,74.766 Z M223.562,93.092 C232.648,93.092 241.349,89.242 241.349,77.461 L241.349,40.809 L235.574,40.809 L235.574,46.43 C232.571,42.349 228.028,39.885 223.023,39.885 C213.244,39.885 206.468,47.277 206.468,59.212 C206.468,71.224 213.321,78.462 223.023,78.462 C228.259,78.462 232.802,75.613 235.574,71.84 L235.574,77.461 C235.574,85.315 229.722,88.318 223.562,88.318 C218.249,88.318 214.553,86.932 211.473,83.313 L208.547,87.471 C213.013,91.86 217.325,93.092 223.562,93.092 Z M224.486,73.303 C216.94,73.303 212.474,67.374 212.474,59.212 C212.474,50.973 216.94,45.044 224.486,45.044 C229.029,45.044 233.495,47.816 235.574,50.973 L235.574,67.297 C233.495,70.531 229.029,73.303 224.486,73.303 Z M267.837,93.092 C276.923,93.092 285.624,89.242 285.624,77.461 L285.624,40.809 L279.849,40.809 L279.849,46.43 C276.846,42.349 272.303,39.885 267.298,39.885 C257.519,39.885 250.743,47.277 250.743,59.212 C250.743,71.224 257.596,78.462 267.298,78.462 C272.534,78.462 277.077,75.613 279.849,71.84 L279.849,77.461 C279.849,85.315 273.997,88.318 267.837,88.318 C262.524,88.318 258.828,86.932 255.748,83.313 L252.822,87.471 C257.288,91.86 261.6,93.092 267.837,93.092 Z M268.761,73.303 C261.215,73.303 256.749,67.374 256.749,59.212 C256.749,50.973 261.215,45.044 268.761,45.044 C273.304,45.044 277.77,47.816 279.849,50.973 L279.849,67.297 C277.77,70.531 273.304,73.303 268.761,73.303 Z M314.037,78.924 C320.043,78.924 325.048,76.845 328.821,73.149 L326.049,69.376 C323.046,72.456 318.811,74.15 314.499,74.15 C306.491,74.15 301.64,68.298 301.178,61.291 L331.208,61.291 L331.208,59.828 C331.208,48.663 324.586,39.885 313.344,39.885 C302.718,39.885 295.018,48.586 295.018,59.366 C295.018,70.993 302.949,78.924 314.037,78.924 Z M325.51,56.979 L301.101,56.979 C301.409,51.358 305.336,44.659 313.267,44.659 C321.737,44.659 325.433,51.512 325.51,56.979 Z M346.3,78 L346.3,51.666 C347.994,48.663 352.845,45.737 356.464,45.737 C357.311,45.737 358.004,45.814 358.697,45.891 L358.697,39.962 C353.615,39.962 349.303,42.888 346.3,46.738 L346.3,40.809 L340.525,40.809 L340.525,78 L346.3,78 Z" id="fflagger" fill="#1A1A1A" fill-rule="nonzero"></path>
<g id="flags" transform="translate(0.036697, 0.500000)" fill="#7BB09F">
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="359px" height="106px" viewBox="0 0 359 106" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>flagger-vertical-white</title>
<g id="flagger-vertical-white" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<path d="M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M136.167,78 L136.167,45.891 L143.713,45.891 L143.713,40.809 L136.167,40.809 L136.167,37.96 C136.167,33.186 138.246,30.645 142.096,30.645 C143.482,30.645 144.483,30.953 145.407,31.492 L146.87,27.103 C145.33,26.256 143.405,25.871 141.172,25.871 C134.781,25.871 130.392,30.26 130.392,37.96 L130.392,40.809 L124.232,40.809 L124.232,45.891 L130.392,45.891 L130.392,78 L136.167,78 Z M156.418,78 L156.418,26.641 L150.643,26.641 L150.643,78 L156.418,78 Z M178.902,78.924 C183.907,78.924 188.219,77.153 191.222,73.765 L191.222,78 L196.997,78 L196.997,52.436 C196.997,43.427 190.529,39.885 182.598,39.885 C176.515,39.885 171.741,41.887 167.737,46.045 L170.432,50.049 C173.743,46.43 177.362,44.89 181.828,44.89 C187.218,44.89 191.222,47.739 191.222,52.667 L191.222,59.366 C188.219,55.978 183.984,54.361 178.902,54.361 C172.588,54.361 165.966,58.211 165.966,66.604 C165.966,74.689 172.665,78.924 178.902,78.924 Z M181.058,74.766 C175.591,74.766 171.818,71.378 171.818,66.604 C171.818,61.907 175.591,58.519 181.058,58.519 C185.062,58.519 188.989,60.059 191.222,63.062 L191.222,70.146 C188.989,73.226 185.062,74.766 181.058,74.766 Z M223.562,93.092 C232.648,93.092 241.349,89.242 241.349,77.461 L241.349,40.809 L235.574,40.809 L235.574,46.43 C232.571,42.349 228.028,39.885 223.023,39.885 C213.244,39.885 206.468,47.277 206.468,59.212 C206.468,71.224 213.321,78.462 223.023,78.462 C228.259,78.462 232.802,75.613 235.574,71.84 L235.574,77.461 C235.574,85.315 229.722,88.318 223.562,88.318 C218.249,88.318 214.553,86.932 211.473,83.313 L208.547,87.471 C213.013,91.86 217.325,93.092 223.562,93.092 Z M224.486,73.303 C216.94,73.303 212.474,67.374 212.474,59.212 C212.474,50.973 216.94,45.044 224.486,45.044 C229.029,45.044 233.495,47.816 235.574,50.973 L235.574,67.297 C233.495,70.531 229.029,73.303 224.486,73.303 Z M267.837,93.092 C276.923,93.092 285.624,89.242 285.624,77.461 L285.624,40.809 L279.849,40.809 L279.849,46.43 C276.846,42.349 272.303,39.885 267.298,39.885 C257.519,39.885 250.743,47.277 250.743,59.212 C250.743,71.224 257.596,78.462 267.298,78.462 C272.534,78.462 277.077,75.613 279.849,71.84 L279.849,77.461 C279.849,85.315 273.997,88.318 267.837,88.318 C262.524,88.318 258.828,86.932 255.748,83.313 L252.822,87.471 C257.288,91.86 261.6,93.092 267.837,93.092 Z M268.761,73.303 C261.215,73.303 256.749,67.374 256.749,59.212 C256.749,50.973 261.215,45.044 268.761,45.044 C273.304,45.044 277.77,47.816 279.849,50.973 L279.849,67.297 C277.77,70.531 273.304,73.303 268.761,73.303 Z M314.037,78.924 C320.043,78.924 325.048,76.845 328.821,73.149 L326.049,69.376 C323.046,72.456 318.811,74.15 314.499,74.15 C306.491,74.15 301.64,68.298 301.178,61.291 L331.208,61.291 L331.208,59.828 C331.208,48.663 324.586,39.885 313.344,39.885 C302.718,39.885 295.018,48.586 295.018,59.366 C295.018,70.993 302.949,78.924 314.037,78.924 Z M325.51,56.979 L301.101,56.979 C301.409,51.358 305.336,44.659 313.267,44.659 C321.737,44.659 325.433,51.512 325.51,56.979 Z M346.3,78 L346.3,51.666 C347.994,48.663 352.845,45.737 356.464,45.737 C357.311,45.737 358.004,45.814 358.697,45.891 L358.697,39.962 C353.615,39.962 349.303,42.888 346.3,46.738 L346.3,40.809 L340.525,40.809 L340.525,78 L346.3,78 Z" id="fflagger" fill="#FFFFFF" fill-rule="nonzero"></path>
<g id="flags" transform="translate(0.036697, 0.500000)" fill="#FFFFFF">
<path d="M53.9358922,0.7 L53.9361614,0.7149 L53.9361614,0.7149 L53.9369368,0.9336 C53.9370203,0.972 53.9371029,1.015 53.9371847,1.0625 L53.9378977,1.6088 C53.9379744,1.6824 53.9380503,1.7602 53.9381254,1.8421 L53.9389868,3.0153 C53.9390554,3.1284 53.9391232,3.2452 53.9391903,3.3656 L53.9399577,4.9768 C53.9400186,5.1244 53.9400788,5.2752 53.9401383,5.4291 L53.9409762,7.9576 C53.9410285,8.14 53.9410802,8.325 53.9411311,8.5125 L53.9419772,12.1359 C53.9420204,12.3498 53.9420629,12.5656 53.9421048,12.7832 L53.9429968,18.3 C53.9430294,18.54 53.9430615,18.781 53.943093,19.0229 L53.943952,27.1992 C53.9439728,27.4488 53.9439933,27.6982 53.9440133,27.9473 L53.9449541,50.7 L53.9449541,50.7 C53.3879217,50.7014777 52.830488,50.538921 52.3437254,50.211951 L19.6313575,28.2303499 C19.498497,28.1410415 19.375601,28.0433533 19.2626695,27.9385428 L1.40077569,39.7 C-0.466925231,38.5321603 -0.466925231,35.903287 1.40077569,34.7364344 L33.206,14.047 L52.3437254,1.18768595 C52.8278484,0.862489056 53.3818782,0.7 53.9358922,0.7 Z" id="Combined-Shape"></path>
<path d="M53.9449541,53.7 C54.518545,53.6973849 55.0927551,53.8599359 55.5939898,54.1878202 L89.1239541,76.1279689 L105.632086,65.7 C107.358112,66.8668656 107.358112,69.4957682 105.632086,70.663621 L73.3882295,91.6036587 C73.3686858,91.6168729 73.348778,91.6191194 73.3286088,91.6113313 L55.5939898,103.212312 C55.1094503,103.529275 54.5567157,103.691735 54.0022691,103.7 L54.0020013,103.4664 C54.0019573,103.428 54.001908,103.385 54.0018535,103.3375 L54.0009599,102.5579 C54.000866,102.476 54.0007674,102.39 54.0006643,102.3 L53.9999912,101.7128 C53.9953913,97.7 53.9845014,88.2 53.9736116,78.7 L53.9718931,77.2008 C53.9627374,69.2136 53.9538164,61.4312 53.9488864,57.1304 L53.9480097,56.3656 C53.9475957,56.0044 53.9472188,55.6756 53.9468821,55.3819 L53.9459959,54.6088 C53.9459115,54.5352 53.945832,54.4658 53.9457573,54.4007 L53.9449541,53.7 L53.9449541,53.7 Z" id="Combined-Shape"></path>
<g id="Group-Copy" transform="translate(17.363303, 0.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
<g id="Group-Copy-2" transform="translate(17.363303, 53.000000)">
<path d="M40.0825271,2.57811824 C39.3101975,2.18406772 37.9113821,0.772333321 36.5592679,0.815362703 C35.3879258,0.815362703 34.9298365,1.30862747 33.0353111,2.57811824 C35.6703059,3.73059649 45.4272614,7.16970562 48.1569327,7.9404 C43.8145304,5.00479909 41.1230619,3.21737183 40.0825271,2.57811824 Z" id="Fill-5"></path>
<path d="M29.6177773,4.85830684 L26.6147653,6.81885893 C29.4750473,8.76729329 32.2115554,10.2845904 34.8242897,11.3707502 C40.1341913,13.5781702 46.8841749,14.9995752 48.423617,15.3807663 C57.1621923,17.5447908 65.4157347,19.5875337 72.0525009,26.2540122 C72.3898283,26.5917965 72.7061975,26.9365971 73.0195726,27.2824 C73.7002154,25.9763676 73.358896,24.2523647 71.9976104,23.3643028 L58.8667933,14.7893932 C55.6791495,13.7329403 52.4316251,12.9250645 49.222025,12.1312213 C46.1950608,11.3814806 41.0779702,10.0491921 38.2156776,9.13005801 C36.3074826,8.51730196 33.4415158,7.0933849 29.6177773,4.85830684 Z" id="Fill-7"></path>
<path d="M29.7315665,14.094497 C27.5581473,13.0954401 25.1789914,11.566935 22.5940987,9.50898164 L19.7614089,11.4291886 C22.680354,13.872933 25.1682837,15.5953444 27.225198,16.5964226 C30.3105695,18.09804 42.0831903,21.3149916 42.8121204,21.4949169 C51.5552876,23.6520212 59.5365954,25.256157 66.1778478,31.9045231 C66.1888316,31.9163913 68.9772132,30.2313417 68.797477,30.052416 C61.5001876,22.7464498 52.4120302,20.425361 43.6109479,18.253263 C42.6064223,18.005366 32.9916953,15.5930823 29.7315665,14.094497 Z" id="Fill-11"></path>
<path d="M40.2748943,27.6858128 C47.2416777,29.4577639 53.792549,31.5762923 59.3417736,36.4444 L62.2704462,34.569277 C55.9296207,28.6976319 48.8074918,25.8624309 40.7862587,24.3617515 C33.595662,23.0164746 28.8766311,21.3487752 23.507058,19.2459776 C19.9273426,17.8441125 17.1081118,16.3021039 15.0493654,14.6199518 L12.1044223,16.5060931 C15.496129,19.1544049 18.552383,21.0412683 21.2731845,22.1666833 C24.8656838,23.6526619 31.1995871,25.4923718 40.2748943,27.6858128 Z" id="Fill-17"></path>
<path d="M5.18885131,21.1343855 C5.29067424,21.2373258 5.38333311,21.3442637 5.48821073,21.4462046 C12.9304487,28.7509644 21.8300234,30.8575975 30.8057147,33.0293369 C38.5788773,34.9092456 45.6427477,36.4683588 51.8987485,41.3005539 L54.8844037,39.3547126 C47.8362204,33.5300936 39.7691873,31.7600736 31.6202982,29.7892176 C22.7942865,27.6534573 14.8355558,25.7666967 8.09895067,19.2774634 L5.18885131,21.1343855 Z" id="Fill-19"></path>
<path d="M1.86538962,23.4720365 C0.558922248,24.8286618 0.712329392,27.1676708 2.35067758,28.271683 L12.2679982,34.9570906 C16.6576484,36.8407725 20.0248373,37.7569569 24.5388174,38.9108681 C31.5855194,40.7113852 38.2525371,42.1959537 44.0850166,46.38226 L46.9264812,44.4396723 C40.2948809,39.2709822 32.8228032,37.452366 25.3399436,35.5395764 C16.5616459,33.2962069 9.49263239,31.439221 2.82393361,24.5251104 C2.49004747,24.178937 2.17621456,23.8265263 1.86538962,23.4720365 Z" id="Fill-21"></path>
<path d="M34.1645854,49.6645268 C34.893506,50.0634031 35.1425612,50.5086988 36.1796702,50.7 C36.9305233,50.7 37.7585832,50.659873 38.4352738,50.23418 L40.0920678,49.1926318 C34.7693674,45.7494414 29.2447004,43.7586502 23.3471124,42.3058883 L34.1645854,49.6645268 Z" id="Fill-23"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -1,71 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="900px" height="900px" viewBox="0 0 900 900" enable-background="new 0 0 900 900" xml:space="preserve">
<g>
<defs>
<rect id="SVGID_1_" width="900" height="900"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M356.003,268.915L586.001,63.471c-18.262-14.35-38.76-25.978-60.934-34.188
L356.003,180.298V268.915z"/>
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M289.914,239.333l-62.307,55.655c5.674,23.087,14.884,44.774,27.05,64.454
l35.257-31.493V239.333z"/>
<path clip-path="url(#SVGID_2_)" fill="#40C6F1" d="M479.023,70.412V17.631c-10.554-1.513-21.329-2.338-32.302-2.338
c-11.484,0-22.764,0.871-33.787,2.527v111.626L479.023,70.412z"/>
<path clip-path="url(#SVGID_2_)" fill="#40C6F1" d="M479.023,380.863V159.029l-66.089,59.033v246.046
c11.023,1.655,22.303,2.526,33.787,2.526c13.449,0,26.601-1.244,39.404-3.5l176.98-158.086c6.01-20.321,9.287-41.815,9.287-64.085
c0-10.488-0.774-20.79-2.159-30.898L479.023,380.863z"/>
<path clip-path="url(#SVGID_2_)" fill="#F04E27" d="M479.023,315.734l177.305-158.376c-8.446-21.157-19.978-40.739-34.079-58.175
L479.023,227.118V315.734z"/>
<path clip-path="url(#SVGID_2_)" fill="#F04E27" d="M412.935,286.152l-56.931,50.854V34.328
c-24.657,10.841-46.992,25.96-66.09,44.426v324.42c14.897,14.403,31.742,26.797,50.147,36.688l72.874-65.094V286.152z"/>
<polygon clip-path="url(#SVGID_2_)" fill="#33324B" points="175.804,603.774 207.413,485.167 249.859,485.167 202.897,650.136
152.926,650.136 124.93,539.054 96.933,650.136 46.961,650.136 0,485.167 42.446,485.167 74.055,603.774 105.362,485.167
144.497,485.167 "/>
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M406.409,595.948c-4.816,32.812-30.103,56.293-73.452,56.293
c-46.059,0-80.076-27.695-80.076-83.686c0-56.293,35.222-85.495,80.076-85.495c49.67,0,75.861,36.426,75.861,85.191v8.73H295.025
c0,18.365,7.526,41.543,37.328,41.543c16.558,0,29.502-8.127,32.814-23.479L406.409,595.948z M365.77,547.784
c-1.506-22.88-16.256-31.308-33.114-31.308c-19.266,0-34.017,11.738-36.124,31.308H365.77z"/>
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M530.318,543.269v-5.721c0-12.944-5.42-21.374-29.803-21.374
c-30.404,0-31.308,16.859-31.308,22.58h-39.134c0-24.386,10.234-55.693,71.646-55.693c58.702,0,69.238,29.201,69.238,52.982v90.912
c0,6.624,0.301,12.041,0.903,16.256l1.204,6.925h-41.544v-16.557c-11.739,11.738-27.995,18.662-51.176,18.662
c-32.511,0-57.196-18.965-57.196-51.777c0-37.93,35.824-46.059,50.273-48.465L530.318,543.269z M530.318,574.275l-15.955,2.406
c-8.73,1.506-19.267,3.011-25.588,4.215c-6.925,1.205-12.945,2.71-17.46,6.321c-4.215,3.313-6.321,7.829-6.321,13.546
c0,4.818,1.806,19.87,24.385,19.87c13.243,0,24.984-4.816,31.307-11.14c8.128-8.127,9.633-18.362,9.633-26.49V574.275z"/>
<polygon clip-path="url(#SVGID_2_)" fill="#33324B" points="687.764,650.136 632.675,650.136 578.488,485.167 623.041,485.167
660.972,611.303 699.203,485.167 742.552,485.167 "/>
<path clip-path="url(#SVGID_2_)" fill="#33324B" d="M897.591,595.948c-4.816,32.812-30.103,56.293-73.452,56.293
c-46.059,0-80.075-27.695-80.075-83.686c0-56.293,35.222-85.495,80.075-85.495c49.67,0,75.861,36.426,75.861,85.191v8.73H786.208
c0,18.365,7.526,41.543,37.328,41.543c16.558,0,29.502-8.127,32.812-23.479L897.591,595.948z M856.952,547.784
c-1.506-22.88-16.256-31.308-33.114-31.308c-19.266,0-34.017,11.738-36.124,31.308H856.952z"/>
</g>
<g id="flagger1">
<path id="fagger" fill="#566991" d="M138.27,737.32h-30.625v113.925H87.8V737.32H64.77v-16.905H87.8v-22.05
c0-18.62,11.515-29.89,32.095-29.89c8.575,0,20.09,0.489,20.09,0.489v17.15c-1.225,0-10.535-0.245-13.965-0.245
c-10.535,0-18.375,1.225-18.375,14.945v19.6h30.625V737.32z M179.675,851.245h-20.09v-181.3h20.09V851.245z M293.519,800.285
V785.34c0,0-28.42,3.675-42.875,5.88c-13.965,1.96-25.235,6.615-25.235,22.051c0,12.984,8.82,22.784,26.705,22.784
C276.858,836.055,293.519,821.845,293.519,800.285z M239.618,776.521c12.495-2.45,53.9-7.351,53.9-7.351v-7.104
c0-18.13-7.84-26.705-30.87-26.705c-24.745,0-31.605,11.27-32.585,24.5h-20.09c0-16.905,9.555-41.16,52.185-41.16
c44.835,0,51.45,23.275,51.45,44.1v67.375c0,6.125,0.245,15.926,1.715,21.07h-20.335c0,0-0.49-7.105-0.49-17.64
c-6.37,8.33-19.11,19.354-45.815,19.354c-25.235,0-44.1-14.7-44.1-39.2C204.583,786.565,226.388,779.215,239.618,776.521z
M338.271,782.646c0-42.386,24.99-63.945,55.86-63.945c22.295,0,36.015,10.535,40.425,20.58v-18.865h19.845V850.51
c0,25.235-12.25,49.49-58.31,49.49c-34.3,0-55.125-13.72-55.86-42.63h20.335c0,14.945,10.535,25.97,36.015,25.97
c29.399,0,37.729-13.475,37.729-35.035v-22.784c-4.41,10.045-18.62,20.58-40.915,20.58
C362.527,846.101,338.271,825.03,338.271,782.646z M434.312,782.4c0-33.32-14.7-46.55-38.22-46.55
c-20.825,0-37.485,11.76-37.485,46.305s16.66,46.795,37.485,46.795C419.611,828.95,434.312,815.72,434.312,782.4z M478.575,782.646
c0-42.386,24.99-63.945,55.859-63.945c22.296,0,36.016,10.535,40.426,20.58v-18.865h19.845V850.51
c0,25.235-12.25,49.49-58.311,49.49c-34.3,0-55.125-13.72-55.859-42.63h20.335c0,14.945,10.535,25.97,36.015,25.97
c29.4,0,37.73-13.475,37.73-35.035v-22.784c-4.41,10.045-18.62,20.58-40.915,20.58C502.83,846.101,478.575,825.03,478.575,782.646z
M574.615,782.4c0-33.32-14.7-46.55-38.221-46.55c-20.824,0-37.484,11.76-37.484,46.305s16.66,46.795,37.484,46.795
C559.915,828.95,574.615,815.72,574.615,782.4z M714.674,806.165l20.335,0.245c-2.695,23.03-18.62,46.55-56.105,46.55
c-34.79,0-60.025-23.765-60.025-66.885c0-40.67,24.99-67.375,59.78-67.375c36.75,0,57.085,27.439,57.085,70.56h-96.285
c0.49,24.745,10.78,46.795,39.69,46.795C700.463,836.055,712.958,822.825,714.674,806.165z M640.193,773.335h73.745
c-1.96-27.685-17.885-37.729-35.771-37.729C658.078,735.605,642.644,749.08,640.193,773.335z M829.497,740.995h-8.82
c-23.521,0-39.936,8.085-39.936,38.955v71.295h-20.09v-130.83h19.846v22.54c8.574-16.66,25.97-22.54,39.689-22.54h9.311V740.995z"
/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

21
go.mod
View File

@@ -1,21 +1,20 @@
module github.com/fluxcd/flagger
go 1.14
go 1.16
require (
github.com/Masterminds/semver/v3 v3.0.3
github.com/aws/aws-sdk-go v1.36.20
github.com/aws/aws-sdk-go v1.37.32
github.com/davecgh/go-spew v1.1.1
github.com/go-logr/zapr v0.3.0
github.com/google/go-cmp v0.5.2
github.com/prometheus/client_golang v1.5.1
github.com/stretchr/testify v1.6.1
github.com/google/go-cmp v0.5.5
github.com/prometheus/client_golang v1.11.0
github.com/stretchr/testify v1.7.0
go.uber.org/zap v1.14.1
golang.org/x/tools v0.1.0 // indirect
gopkg.in/h2non/gock.v1 v1.0.15
k8s.io/api v0.20.1
k8s.io/apimachinery v0.20.1
k8s.io/client-go v0.20.1
k8s.io/code-generator v0.20.1
k8s.io/klog/v2 v2.4.0
k8s.io/api v0.21.1
k8s.io/apimachinery v0.21.1
k8s.io/client-go v0.21.1
k8s.io/code-generator v0.21.1
k8s.io/klog/v2 v2.8.0
)

191
go.sum
View File

@@ -1,6 +1,5 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
@@ -24,11 +23,9 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw=
github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg=
github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
@@ -44,11 +41,11 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
github.com/aws/aws-sdk-go v1.36.20 h1:IQr81xegCd40Xq21ZjFToKw9llaCzO1LRE75CgnvJ1Q=
github.com/aws/aws-sdk-go v1.36.20/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go v1.37.32 h1:gLEASuX1phzqb00APUZU/xVIqf13IoA250RlgQ9rz28=
github.com/aws/aws-sdk-go v1.37.32/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
@@ -59,11 +56,10 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
@@ -75,23 +71,19 @@ github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc=
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/zapr v0.3.0 h1:iyiCRZ29uPmbO7mWIjOEiYMXrTxZWTyK4tCatLyGpUY=
github.com/go-logr/zapr v0.3.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU=
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
@@ -99,13 +91,13 @@ github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -117,9 +109,7 @@ github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFU
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
@@ -129,20 +119,20 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -153,7 +143,6 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -161,6 +150,7 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
@@ -176,33 +166,34 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -211,9 +202,12 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
@@ -221,7 +215,6 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -230,44 +223,41 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -292,8 +282,9 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -312,7 +303,6 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
@@ -322,12 +312,12 @@ golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ=
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -345,32 +335,30 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 h1:OgUuv8lsRpBibGNbSizVwKWlysjaNzmC9gYMhPVfqFM=
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -386,38 +374,43 @@ golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY=
golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -434,7 +427,6 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -452,13 +444,12 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200616133436-c1934b75d054 h1:HHeAlu5H9b71C+Fx0K+1dGgVFN1DM1/wz4aoGOA5qS8=
golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -473,9 +464,7 @@ google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
@@ -514,14 +503,15 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1 h1:7QnIQpGRHE5RnLKnESfDoxm2dTapTZua5a0kS0A+VXQ=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
@@ -532,49 +522,46 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.20.1 h1:ud1c3W3YNzGd6ABJlbFfKXBKXO+1KdGfcgGGNgFR03E=
k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
k8s.io/apimachinery v0.20.1 h1:LAhz8pKbgR8tUwn7boK+b2HZdt7MiTu2mkYtFMUjTRQ=
k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
k8s.io/client-go v0.20.1 h1:Qquik0xNFbK9aUG92pxHYsyfea5/RPO9o9bSywNor+M=
k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
k8s.io/code-generator v0.20.1 h1:kre3GNich5gbO3d1FyTT8fHI4ZJezZV217yFdWlQaRQ=
k8s.io/code-generator v0.20.1/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
k8s.io/api v0.21.1 h1:94bbZ5NTjdINJEdzOkpS4vdPhkb1VFpTYC9zh43f75c=
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
k8s.io/apimachinery v0.21.1 h1:Q6XuHGlj2xc+hlMCvqyYfbv3H7SRGn2c8NycxJquDVs=
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
k8s.io/client-go v0.21.1 h1:bhblWYLZKUu+pm50plvQF8WpY6TXdRRtcS/K9WauOj4=
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
k8s.io/code-generator v0.21.1 h1:jvcxHpVu5dm/LMXr3GOj/jroiP8+v2YnJE9i2OVRenk=
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20201113003025-83324d819ded h1:JApXBKYyB7l9xx+DK7/+mFjC7A9Bt5A93FPvFD0HIFE=
k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027 h1:Uusb3oh8XcdzDF/ndlI4ToKTYVlkCSJP39SRY2mfRAw=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c=
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts=
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0=
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=

View File

@@ -30,7 +30,7 @@ chmod +x ${CODEGEN_PKG}/generate-groups.sh
${CODEGEN_PKG}/generate-groups.sh all \
github.com/fluxcd/flagger/pkg/client github.com/fluxcd/flagger/pkg/apis \
"flagger:v1beta1 appmesh:v1beta2 appmesh:v1beta1 istio:v1alpha3 smi:v1alpha1 smi:v1alpha2 gloo:v1 projectcontour:v1 traefik:v1alpha1" \
"flagger:v1beta1 appmesh:v1beta2 appmesh:v1beta1 istio:v1alpha3 smi:v1alpha1 smi:v1alpha2 smi:v1alpha3 gloo/gloo:v1 gloo/gateway:v1 projectcontour:v1 traefik:v1alpha1" \
--output-base "${TEMP_DIR}" \
--go-header-file ${SCRIPT_ROOT}/hack/boilerplate.go.txt

View File

@@ -31,7 +31,16 @@ Install Flagger for Linkerd:
kustomize build https://github.com/fluxcd/flagger/kustomize/linkerd?ref=main | kubectl apply -f -
```
This deploys Flagger in the `linkerd` namespace and sets the metrics server URL to Linkerd's Prometheus instance.
This deploys Flagger in the `linkerd` namespace and sets the metrics server URL to linkerd-viz extension's Prometheus instance
which lives under `linkerd-viz` namespace by default.
Install Flagger for Open Service Mesh:
```bash
kustomize build https://github.com/fluxcd/flagger/kustomize/osm?ref=main | kubectl apply -f -
```
This deploys Flagger in the `osm-system` namespace and sets the metrics server URL to OSM's Prometheus instance.
If you want to install a specific Flagger release, add the version number to the URL:
@@ -67,7 +76,7 @@ metadata:
name: app
namespace: test
spec:
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo
# can be: kubernetes, istio, linkerd, appmesh, nginx, skipper, gloo, osm
# use the kubernetes provider for Blue/Green style deployments
provider: nginx
```

View File

@@ -13,7 +13,7 @@ spec:
- -mesh-provider=appmesh
- -metrics-server=http://appmesh-prometheus:9090
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger

View File

@@ -129,6 +129,21 @@ spec:
- Ingress
name:
type: string
upstreamRef:
description: Gloo Upstream selector
type: object
required: [ "apiVersion", "kind", "name" ]
properties:
apiVersion:
type: string
kind:
type: string
enum:
- Upstream
name:
type: string
namespace:
type: string
service:
description: Kubernetes Service spec
type: object
@@ -940,6 +955,10 @@ spec:
- post-rollout
- event
- rollback
- confirm-traffic-increase
muteAlert:
description: Mute all alerts for the webhook
type: boolean
url:
description: URL address of this webhook
type: string
@@ -966,6 +985,7 @@ spec:
- Initialized
- Waiting
- Progressing
- WaitingPromotion
- Promoting
- Finalising
- Succeeded
@@ -1086,6 +1106,7 @@ spec:
- datadog
- cloudwatch
- newrelic
- graphite
address:
description: API address of this provider
type: string
@@ -1101,6 +1122,9 @@ spec:
region:
description: Region of the provider
type: string
insecureSkipVerify:
description: Disable SSL certificate validation for the provider address
type: boolean
query:
description: Query of this metric template
type: string
@@ -1167,6 +1191,7 @@ spec:
- msteams
- discord
- rocket
- gchat
channel:
description: Alert channel for this provider
type: string
@@ -1176,6 +1201,9 @@ spec:
address:
description: Hook URL address of this provider
type: string
proxy:
description: Http/s proxy of this provider
type: string
secretRef:
description: Kubernetes secret reference containing the provider address
type: object

View File

@@ -9,4 +9,4 @@ resources:
images:
- name: ghcr.io/fluxcd/flagger
newName: ghcr.io/fluxcd/flagger
newTag: 1.6.3
newTag: 1.13.0

View File

@@ -1,4 +1,4 @@
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: flagger
@@ -182,7 +182,7 @@ rules:
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger

View File

@@ -1,4 +1,4 @@
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: flagger-prometheus
@@ -18,7 +18,7 @@ rules:
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger-prometheus

View File

@@ -13,7 +13,7 @@ spec:
- -mesh-provider=istio
- -metrics-server=http://prometheus:9090
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger

View File

@@ -11,9 +11,9 @@ spec:
- -log-level=info
- -include-label-prefix=app.kubernetes.io
- -mesh-provider=linkerd
- -metrics-server=http://linkerd-prometheus:9090
- -metrics-server=http://prometheus.linkerd-viz:9090
---
apiVersion: rbac.authorization.k8s.io/v1beta1
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger

View File

@@ -0,0 +1,5 @@
namespace: osm-system
bases:
- ../base/flagger/
patchesStrategicMerge:
- patch.yaml

27
kustomize/osm/patch.yaml Normal file
View File

@@ -0,0 +1,27 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: flagger
spec:
template:
spec:
containers:
- name: flagger
args:
- -log-level=info
- -include-label-prefix=app.kubernetes.io
- -mesh-provider=osm
- -metrics-server=http://osm-prometheus.osm-system.svc:7070
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: flagger
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flagger
subjects:
- kind: ServiceAccount
name: flagger
namespace: osm-system

View File

@@ -15,6 +15,7 @@ spec:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
openservicemesh.io/inbound-port-exclusion-list: "80, 8080"
spec:
containers:
- name: loadtester

View File

@@ -64,6 +64,10 @@ type AlertProviderSpec struct {
// +optional
Address string `json:"address,omitempty"`
// HTTP/S address of the proxy
// +optional
Proxy string `json:"proxy,omitempty"`
// Secret reference containing the provider webhook URL
// +optional
SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"`

View File

@@ -77,6 +77,11 @@ type CanarySpec struct {
// +optional
IngressRef *CrossNamespaceObjectReference `json:"ingressRef,omitempty"`
// Reference to Gloo Upstream resource. Upstream config is copied from
// the referenced upstream to the upstreams generated by flagger.
// +optional
UpstreamRef *CrossNamespaceObjectReference `json:"upstreamRef,omitempty"`
// Service defines how ClusterIP services, service mesh or ingress routing objects are generated
Service CanaryService `json:"service"`
@@ -314,6 +319,8 @@ const (
EventHook HookType = "event"
// RollbackHook rollback canary analysis if webhook returns HTTP 200
RollbackHook HookType = "rollback"
// ConfirmTrafficIncreaseHook increases traffic weight if webhook returns HTTP 200
ConfirmTrafficIncreaseHook = "confirm-traffic-increase"
)
// CanaryWebhook holds the reference to external checks used for canary analysis
@@ -327,6 +334,9 @@ type CanaryWebhook struct {
// URL address of this webhook
URL string `json:"url"`
// MuteAlert mutes all alerts generated from this webhook, if any
MuteAlert bool `json:"muteAlert"`
// Request timeout for this webhook
Timeout string `json:"timeout,omitempty"`

View File

@@ -74,6 +74,10 @@ type MetricTemplateProvider struct {
// Region of the provider
// +optional
Region string `json:"region,omitempty"`
// InsecureSkipVerify disables certificate verification for the provider
// +optional
InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"`
}
// MetricTemplateModel is the query template model

View File

@@ -11,4 +11,5 @@ const (
KubernetesProvider string = "kubernetes"
SkipperProvider string = "skipper"
TraefikProvider string = "traefik"
OsmProvider string = "osm"
)

View File

@@ -47,6 +47,8 @@ const (
CanaryPhaseWaiting CanaryPhase = "Waiting"
// CanaryPhaseProgressing means the canary analysis is underway
CanaryPhaseProgressing CanaryPhase = "Progressing"
// CanaryPhaseWaitingPromotion means the canary promotion is paused (waiting for confirmation to proceed)
CanaryPhaseWaitingPromotion CanaryPhase = "WaitingPromotion"
// CanaryPhasePromoting means the canary analysis is finished and the primary spec has been updated
CanaryPhasePromoting CanaryPhase = "Promoting"
// CanaryPhaseFinalising means the canary promotion is finished and traffic has been routed back to primary

View File

@@ -411,6 +411,11 @@ func (in *CanarySpec) DeepCopyInto(out *CanarySpec) {
*out = new(CrossNamespaceObjectReference)
**out = **in
}
if in.UpstreamRef != nil {
in, out := &in.UpstreamRef, &out.UpstreamRef
*out = new(CrossNamespaceObjectReference)
**out = **in
}
in.Service.DeepCopyInto(&out.Service)
if in.Analysis != nil {
in, out := &in.Analysis, &out.Analysis

View File

@@ -8,7 +8,7 @@ import (
)
// SchemeGroupVersion is group version used to register these objects
var SchemeGroupVersion = schema.GroupVersion{Group: gloo.GroupName, Version: "v1"}
var SchemeGroupVersion = schema.GroupVersion{Group: gloo.GatewayGroupName, Version: "v1"}
// Kind takes an unqualified kind and returns back a Group qualified GroupKind
func Kind(kind string) schema.GroupKind {

Some files were not shown because too many files have changed in this diff Show More