<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Wombelix Post - Backup</title><link href="https://dominik.wombacher.cc/" rel="alternate"/><link href="/feeds/tag_backup.atom.xml" rel="self"/><id>https://dominik.wombacher.cc/</id><updated>2023-07-12T00:00:00+02:00</updated><entry><title>Rancher on AWS, Backup to S3 with IRSA for Authentication</title><link href="https://dominik.wombacher.cc/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html" rel="alternate"/><published>2023-07-04T00:00:00+02:00</published><updated>2023-07-12T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2023-07-04:/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the second Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I'm going to demonstrate how to perform backups from Rancher to S3 by using IAM
Roles for  ... &lt;a class="read-more" href="/posts/rancher-on-aws-backup-to-s3-with-irsa-for-authentication.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;This is the second Article of the Series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;,
I'm going to demonstrate how to perform backups from Rancher to S3 by using IAM
Roles for Service Accounts (IRSA) instead of EC2 Instance IAM Roles or AWS access keys.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The recording of my talk
&lt;a class="reference external" href="https://events.opensuse.org/conferences/oSC23/program/proposals/4169"&gt;Rancher integration with AWS services: possibilities, challenges, outlook&lt;/a&gt;
(abstract and slide-deck) at openSUSE Conference 23 is online and covers parts of this article as well.&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://media.ccc.de/v/4169-rancher-integration-with-aws-services-possibilities-challenges-outlook"&gt;media.ccc.de&lt;/a&gt;
(includes options to download video and audio)&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://youtu.be/khIg5MT4WGs"&gt;youtube.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="contents local topic" id="contents"&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference internal" href="#terminology" id="toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#kubernetes-objects-and-annotations" id="toc-entry-2"&gt;Kubernetes objects and annotations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#helm-chart-repository-release" id="toc-entry-3"&gt;Helm chart, repository, release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#iam-role-and-irsa" id="toc-entry-4"&gt;IAM Role and IRSA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#rancher-backup" id="toc-entry-5"&gt;Rancher Backup&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="reference internal" href="#overview" id="toc-entry-6"&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#irsa-configuration" id="toc-entry-7"&gt;IRSA Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class="reference internal" href="#conclusion" id="toc-entry-8"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="terminology"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-1"&gt;Terminology&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="kubernetes-objects-and-annotations"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-2"&gt;Kubernetes objects and annotations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I assume you are aware what Kubernetes
&lt;a class="reference external" href="https://kubernetes.io/docs/concepts/overview/working-with-objects/"&gt;objects&lt;/a&gt;
and &lt;a class="reference external" href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/"&gt;annotations&lt;/a&gt;
are, if not, that's your chance to brush up your knowledge,
I will use these terms to explain the configuration of Rancher Backup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="helm-chart-repository-release"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-3"&gt;Helm chart, repository, release&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Again, I assume you are aware of &lt;a class="reference external" href="https://helm.sh"&gt;Helm&lt;/a&gt; in general and also what a
&lt;a class="reference external" href="https://helm.sh/docs/topics/charts/"&gt;chart&lt;/a&gt;,
&lt;a class="reference external" href="https://helm.sh/docs/topics/chart_repository/"&gt;repository&lt;/a&gt; and
&lt;a class="reference external" href="https://helm.sh/docs/glossary/#release"&gt;release&lt;/a&gt; is. I'm going to to use these terms later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="iam-role-and-irsa"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-4"&gt;IAM Role and IRSA&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To learn more about AWS IAM Roles and IRSA, I recommend to checkout the first Article of this series:
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="rancher-backup"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-5"&gt;Rancher Backup&lt;/a&gt;&lt;/h2&gt;
&lt;div class="section" id="overview"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-6"&gt;Overview&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Rancher provides the &lt;a class="reference external" href="https://github.com/rancher/backup-restore-operator"&gt;backup-restore-operator&lt;/a&gt;,
it can be used to perform &lt;em&gt;scheduled&lt;/em&gt; and &lt;em&gt;encrypted&lt;/em&gt; backups of all Rancher resources.
Amazon S3 is a supported target, which is a high available and resilient location for backups.
IRSA can be used for authentication by adding the &lt;em&gt;serviceAccount annotation&lt;/em&gt; during the installation.&lt;/p&gt;
&lt;p&gt;The official documentation about
&lt;a class="reference external" href="https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/back-up-rancher"&gt;Backing up Rancher&lt;/a&gt;
provides further information about the functionality and general setup.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="irsa-configuration"&gt;
&lt;h3&gt;&lt;a class="toc-backref" href="#toc-entry-7"&gt;IRSA Configuration&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The backup operator already supports IRSA but it's not covered in the official Rancher Documentation yet.
It's sufficient to add three additional lines as part of the installation to activate it:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;serviceAccount&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;annotations&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;eks.amazonaws.com/role-arn&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;arn:aws:iam::1234567890:role/my-rancher-backup-role&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The complete values file for Helm could look like this for example:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="pygments-nt"&gt;s3&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;bucketName&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;my-rancher-backup-bucket&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;credentialSecretName&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;''&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;credentialSecretNamespace&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-s"&gt;''&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;enabled&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;true&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;endpoint&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;s3.us-east-1.amazonaws.com&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;region&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;us-east-1&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-nt"&gt;serviceAccount&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
  &lt;/span&gt;&lt;span class="pygments-nt"&gt;annotations&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt;
    &lt;/span&gt;&lt;span class="pygments-nt"&gt;eks.amazonaws.com/role-arn&lt;/span&gt;&lt;span class="pygments-p"&gt;:&lt;/span&gt;&lt;span class="pygments-w"&gt; &lt;/span&gt;&lt;span class="pygments-l-Scalar-Plain"&gt;arn:aws:iam::1234567890:role/my-rancher-backup-role&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Besides the &lt;em&gt;serviceAccount annotation&lt;/em&gt;, the initial IRSA setup for the cluster and the creation
of the IAM Role, with a link to the service account, used by the Rancher backup operator, is required.&lt;/p&gt;
&lt;p&gt;The default service account name is &lt;code&gt;rancher-backup&lt;/code&gt; in the namespace &lt;code&gt;cattle-resources-system&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Further information can be found in
&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;&lt;a class="toc-backref" href="#toc-entry-8"&gt;Conclusion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;At first it was a little tricky to figure out if and how the Rancher backup operator supports IRSA,
as I realized that the necessary code change was already merged a while ago, I was surprised,
it's not mentioned in the documentation yet.&lt;/p&gt;
&lt;p&gt;The actual configuration was then quite straight forward and similar as in examples I found in the
&lt;a class="reference external" href="https://docs.aws.amazon.com/eks/latest/userguide/pod-configuration.html"&gt;Amazon EKS documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;By default, long-term access key credentials are used by Rancher, which I would recommend to avoid, use
short-term tokes as provided via IRSA instead, I outlined the &lt;em&gt;why&lt;/em&gt; already in the first article of this series ;)&lt;/p&gt;
&lt;p&gt;In the next article of this series, I will show you how to push log files from Rancher to CloudWatch and
- again - to authenticate with IRSA instead of EC2 Instance IAM Roles or access keys.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;Article series &lt;strong&gt;Integrate Rancher with AWS services&lt;/strong&gt;:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/what-is-aws-iam-roles-for-service-accounts-irsa.html"&gt;What is IAM Roles for Service Accounts (IRSA) and Amazon EKS Pod Identity Webhook?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rancher on AWS, Backup to S3 with IRSA for Authentication&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="https://dominik.wombacher.cc/posts/rancher-on-aws-logging-to-cloudwatch-with-irsa-for-authentication.html"&gt;Rancher on AWS, Logging to CloudWatch with IRSA for Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rancher on AWS, SAML Authentication with AWS IAM Identity Center as SAML IdP (coming soon)&lt;/li&gt;
&lt;li&gt;Rancher on AWS, GitOps with Fleet and AWS CodeCommit (coming soon)&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><category term="Container"/><category term="AWS"/><category term="EKS"/><category term="IRSA"/><category term="IAM"/><category term="Kubernetes"/><category term="Amazon"/><category term="Rancher"/><category term="Backup"/><category term="S3"/></entry><entry><title>SUSE Manager / Uyuni - Database Backup with "smdba" fails on symlink</title><link href="https://dominik.wombacher.cc/posts/suse-manager-uyuni-database-backup-with-smdba-fails-on-symlink.html" rel="alternate"/><published>2021-08-31T00:00:00+02:00</published><updated>2021-08-31T00:00:00+02:00</updated><author><name>Dominik Wombacher</name></author><id>tag:dominik.wombacher.cc,2021-08-31:/posts/suse-manager-uyuni-database-backup-with-smdba-fails-on-symlink.html</id><summary type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I performed a Upgrade of our SUSE Manager Instance at work to Version 4.2 and in parallel adjusted the disk layout a bit.&lt;/p&gt;
&lt;p&gt;The exact details about all the  ... &lt;a class="read-more" href="/posts/suse-manager-uyuni-database-backup-with-smdba-fails-on-symlink.html"&gt; [read more]&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher &lt;dominik@wombacher.cc&gt; --&gt;
&lt;!--  --&gt;
&lt;!-- SPDX-License-Identifier: CC-BY-SA-4.0 --&gt;
&lt;p&gt;I performed a Upgrade of our SUSE Manager Instance at work to Version 4.2 and in parallel adjusted the disk layout a bit.&lt;/p&gt;
&lt;p&gt;The exact details about all the changes are not that interesting, more the fact which issue I faced after changing &lt;em&gt;/var/spacewalk/db-backup&lt;/em&gt; to be a symlink into a sub-folder of a new mountpoint.&lt;/p&gt;
&lt;p&gt;Backups are created and handled by the smdba tool, which performs an Owner and Permission check as soon a Backup was started.
The path is defined by the argument &amp;quot;--backup-dir&amp;quot;, default as mentioned in the official docs is &lt;em&gt;/var/spacewalk/db-backup&lt;/em&gt;, but as of today it doesn't follow symlinks.&lt;/p&gt;
&lt;p&gt;So what happens: It will check the owner and permissions of the symlink instead the target folder.
Due to the limitations that chmod can't be performed on symlinks, it stays 777, smdba will always fail when comparing with &lt;em&gt;/var/lib/pgsql/data&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;To solve this issue and make smdba symlink aware, some small adjustments on the code of &lt;em&gt;/usr/lib/python3.6/site-packages/smdba/postgresqlgate.py&lt;/em&gt; are required.&lt;/p&gt;
&lt;p&gt;I created a &lt;a class="reference external" href="https://github.com/SUSE/smdba/issues/51"&gt;GitHub Issue&lt;/a&gt;
(Archive: &lt;a class="reference external" href="https://web.archive.org/web/20210928140221/https://github.com/SUSE/smdba/issues/51"&gt;[1]&lt;/a&gt;,
&lt;a class="reference external" href="https://archive.today/2021.09.28-140140/https://github.com/SUSE/smdba/issues/51"&gt;[2]&lt;/a&gt;)
to report my findings and discuss a solution.&lt;/p&gt;
&lt;p&gt;Based on the feedback and suggestions from Victor and Michael, I created a &lt;a class="reference external" href="https://github.com/SUSE/smdba/pull/52"&gt;Pull Request&lt;/a&gt; to get the fix hopefully included in a future release :)&lt;/p&gt;
&lt;pre class="code diff literal-block"&gt;
&lt;span class="pygments-gh"&gt;diff --git a/src/smdba/postgresqlgate.py b/src/smdba/postgresqlgate.py&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gh"&gt;index 5bcb86e..e28b8f2 100644&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gd"&gt;--- a/src/smdba/postgresqlgate.py&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+++ b/src/smdba/postgresqlgate.py&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gu"&gt;&amp;#64;&amp;#64; -767,6 +767,11 &amp;#64;&amp;#64; def do_backup_hot(self, *opts: str, **args: str) -&amp;gt; None:  # pylint: disable=W06&lt;/span&gt;&lt;span class="pygments-w"&gt;
 &lt;/span&gt;        if 'enable' in args.keys():&lt;span class="pygments-w"&gt;
 &lt;/span&gt;            # Check destination only in case user is enabling the backup&lt;span class="pygments-w"&gt;
 &lt;/span&gt;            if args.get('enable') == 'on':&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                # Save original value in temporary variable to re-assign after Permission Check&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                args_backup_dir_orig = args['backup-dir']&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                # If backup-dir is Symlink, use target instead&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                while os.path.islink(args['backup-dir']):&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                    args['backup-dir'] = os.readlink(args_backup_dir_orig)&lt;/span&gt;&lt;span class="pygments-w"&gt;
 &lt;/span&gt;                # Same owner?&lt;span class="pygments-w"&gt;
 &lt;/span&gt;                if os.lstat(args['backup-dir']).st_uid != os.lstat(self.config['pcnf_pg_data']).st_uid \&lt;span class="pygments-w"&gt;
 &lt;/span&gt;                       or os.lstat(args['backup-dir']).st_gid != os.lstat(self.config['pcnf_pg_data']).st_gid:&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gu"&gt;&amp;#64;&amp;#64; -777,6 +782,8 &amp;#64;&amp;#64; def do_backup_hot(self, *opts: str, **args: str) -&amp;gt; None:  # pylint: disable=W06&lt;/span&gt;&lt;span class="pygments-w"&gt;
 &lt;/span&gt;                if oct(os.lstat(args['backup-dir']).st_mode &amp;amp; 0o777) != oct(os.lstat(self.config['pcnf_pg_data']).st_mode &amp;amp; 0o777):&lt;span class="pygments-w"&gt;
 &lt;/span&gt;                    raise GateException(&amp;quot;The \&amp;quot;%s\&amp;quot; directory must have the same permissions as \&amp;quot;%s\&amp;quot; directory.&amp;quot;&lt;span class="pygments-w"&gt;
 &lt;/span&gt;                                        % (args['backup-dir'], self.config['pcnf_pg_data']))&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                # Avoid issues at a later point due to different paths by setting original value&lt;/span&gt;&lt;span class="pygments-w"&gt;
&lt;/span&gt;&lt;span class="pygments-gi"&gt;+                args['backup-dir'] = args_backup_dir_orig&lt;/span&gt;&lt;span class="pygments-w"&gt;
 &lt;/span&gt;            self._perform_enable_backups(**args)&lt;span class="pygments-w"&gt;

 &lt;/span&gt;        if 'source' in args.keys():&lt;span class="pygments-w"&gt;
&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;I know that I could also use a different path in the &amp;quot;--backup-dir&amp;quot; argument, which already points to the new location.
But in my opinion it's helpful to stick with paths that are mentioned in the official documentation when there are multiple administrators.&lt;/p&gt;
&lt;p&gt;Doesn't matter how good your internal KB is, in case of an issues or when new people takeover, project / vendor guides mostly have a higher precedence.&lt;/p&gt;
&lt;p&gt;Also supporting Symlinks avoid that configured backup cronjobs silently failing in case someone has the idea to move the folder away and configure a symlink, like me ;)&lt;/p&gt;
</content><category term="Linux"/><category term="SUSE Manager"/><category term="Uyuni"/><category term="Database"/><category term="Backup"/></entry></feed>