{"id":30265,"date":"2022-06-14T19:42:00","date_gmt":"2022-06-14T19:42:00","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=30265"},"modified":"2022-12-23T05:52:46","modified_gmt":"2022-12-23T05:52:46","slug":"project-sync-windows-syncwindow-in-argocd","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/project-sync-windows-syncwindow-in-argocd\/","title":{"rendered":"Project sync windows (SyncWindow) in ArgoCD"},"content":{"rendered":"\n<ul class=\"wp-block-list\"><li>Sync windows are configurable windows of time where syncs will either be blocked or allowed.<\/li><li>These are defined by a kind, which can be either allow or deny, a schedule in cron format and a duration along with one or more of either applications, namespaces and clusters.<\/li><li>Wildcards are supported.<\/li><li>These windows affect the running of both manual and automated syncs but allow an override for manual syncs which is useful if you are only interested in preventing automated syncs or if you need to temporarily override a window to perform a sync.<\/li><\/ul>\n\n\n\n<p><strong>The windows work in the following way.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>If there are no windows matching an application then all syncs are allowed.<\/li><li>If there are any allow windows matching an application then syncs will only be allowed when there is an active allow windows.<\/li><li>If there are any deny windows matching an application then all syncs will be denied when the deny windows are active.<\/li><li>If there is an active matching allow and an active matching deny then syncs will be denied as deny windows override allow windows.<\/li><\/ul>\n\n\n\n<p>The UI and the CLI will both display the state of the sync windows. The UI has a panel which will display different colours depending on the state. The colours are as follows. Red: sync denied, Orange: manual allowed and Green: sync allowed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-24-1024x447.png\" alt=\"\" class=\"wp-image-30266\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-24-1024x447.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-24-300x131.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-24-768x335.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-24.png 1429w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"287\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-25-1024x287.png\" alt=\"\" class=\"wp-image-30267\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-25-1024x287.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-25-300x84.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-25-768x215.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-25-1536x430.png 1536w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-25.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How to apply Sync Windows<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ argocd proj windows add devopsschool \\\n    --kind allow \\\n    --schedule <span class=\"hljs-string\">\"0 22 * * *\"<\/span> \\\n    --duration <span class=\"hljs-number\">1<\/span>h \\\n    --applications <span class=\"hljs-string\">\"*\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"410\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-26-1024x410.png\" alt=\"\" class=\"wp-image-30268\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-26-1024x410.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-26-300x120.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-26-768x308.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-26-1536x616.png 1536w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-26.png 1567w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"355\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-27-1024x355.png\" alt=\"\" class=\"wp-image-30269\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-27-1024x355.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-27-300x104.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-27-768x266.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-27-1536x532.png 1536w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2022\/06\/image-27.png 1779w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Alternatively, they can be created directly in the&nbsp;<code>AppProject<\/code>&nbsp;manifest:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">apiVersion: argoproj.io\/v1alpha1\n<span class=\"hljs-attr\">kind<\/span>: AppProject\n<span class=\"hljs-attr\">metadata<\/span>:\n  name: <span class=\"hljs-keyword\">default<\/span>\n<span class=\"hljs-attr\">spec<\/span>:\n  syncWindows:\n  - kind: allow\n    <span class=\"hljs-attr\">schedule<\/span>: <span class=\"hljs-string\">'10 1 * * *'<\/span>\n    <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-number\">1<\/span>h\n    <span class=\"hljs-attr\">applications<\/span>:\n    - <span class=\"hljs-string\">'*-prod'<\/span>\n    <span class=\"hljs-attr\">manualSync<\/span>: <span class=\"hljs-literal\">true<\/span>\n  - kind: deny\n    <span class=\"hljs-attr\">schedule<\/span>: <span class=\"hljs-string\">'0 22 * * *'<\/span>\n    <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-number\">1<\/span>h\n    <span class=\"hljs-attr\">namespaces<\/span>:\n    - <span class=\"hljs-keyword\">default<\/span>\n   - kind: allow\n     <span class=\"hljs-attr\">schedule<\/span>: <span class=\"hljs-string\">'0 23 * * *'<\/span>\n     <span class=\"hljs-attr\">duration<\/span>: <span class=\"hljs-number\">1<\/span>h\n     <span class=\"hljs-attr\">clusters<\/span>:\n     - <span class=\"hljs-keyword\">in<\/span>-cluster\n     - cluster1<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">To allow manual syncs using the CLI, UI <span class=\"hljs-keyword\">or<\/span> directly in the AppProject manifest:\r\n$ argocd proj windows enable-manual-sync PROJECT ID\r\n\r\nTo disable\r\n$ argocd proj windows disable-manual-sync PROJECT ID\r\n\r\nWindows can be listed using the CLI <span class=\"hljs-keyword\">or<\/span> viewed in the UI:\r\n$ argocd proj windows <span class=\"hljs-keyword\">list<\/span> PROJECT<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Sync windows are configurable windows of time where syncs will either be blocked or allowed. These are defined by a kind, which can be either allow or deny, a schedule in cron format and a duration along with one or more of either applications, namespaces and clusters. Wildcards are supported. These windows affect the running&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-30265","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/30265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=30265"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/30265\/revisions"}],"predecessor-version":[{"id":30271,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/30265\/revisions\/30271"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=30265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=30265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=30265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}