The Wombelix Post - terraformhttps://dominik.wombacher.cc/2022-03-08T00:00:00+01:00Uyuni Test Environment with sumaform on local libvirt host (openSUSE Tumbleweed)2022-03-08T00:00:00+01:002022-03-08T00:00:00+01:00Dominik Wombachertag:dominik.wombacher.cc,2022-03-08:/posts/uyuni_test_environment_with_sumaform_on_local_libvirt_host_opensuse_tumbleweed.html<!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher <dominik@wombacher.cc> -->
<!-- -->
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
<p>A convenient way to quickly setup a local Uyuni Instance inclusive Clients, either for Development or Testing, is sumaform.
It supports different backends and provides a ton of options, check ... <a class="read-more" href="/posts/uyuni_test_environment_with_sumaform_on_local_libvirt_host_opensuse_tumbleweed.html"> [read more]</a></p><!-- SPDX-FileCopyrightText: 2023 Dominik Wombacher <dominik@wombacher.cc> -->
<!-- -->
<!-- SPDX-License-Identifier: CC-BY-SA-4.0 -->
<p>A convenient way to quickly setup a local Uyuni Instance inclusive Clients, either for Development or Testing, is sumaform.
It supports different backends and provides a ton of options, check it out: <a class="reference external" href="https://github.com/uyuni-project/sumaform">https://github.com/uyuni-project/sumaform</a></p>
<p>I just want to run a Uyuni Server and a few Clients (openSUSE, EL, Debian) on my Laptop so I can verify reported bugs,
try some configs as well as deploy and test changes during development, without investing much time.</p>
<p>Following a overview of the, in my case, relevant steps, examples of my config and some Ansible snippets.</p>
<p><strong>Setup</strong></p>
<pre class="code text literal-block">
sudo zypper addrepo http://download.opensuse.org/repositories/systemsmanagement:/sumaform/openSUSE_Tumbleweed/systemsmanagement:sumaform.repo
sudo zypper install git-core
sudo zypper install --from systemsmanagement_sumaform terraform terraform-provider-libvirt
git clone https://github.com/uyuni-project/sumaform.git
</pre>
<p>Follow the <em>First-time configuration (libvirt)</em> instructions in the
<a class="reference external" href="https://github.com/uyuni-project/sumaform/blob/2082e344b9cdde5c3befb11fc358d80eb50de346/backend_modules/libvirt/README.md">README</a>,
but use the uyuni example file instead: <code>copy main.tf.uyuni.example to main.tf</code></p>
<p><strong>Config & Deployment</strong></p>
<pre class="code text literal-block">
vim main.tf
terraform init
terraform validate
terraform apply
</pre>
<p><strong>My terraform main.cf based on the uyuni example file</strong></p>
<pre class="code shell literal-block">
terraform<span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">required_version</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"1.0.10"</span><span class="pygments-w">
</span>required_providers<span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">libvirt</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">version</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"0.6.3"</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span>provider<span class="pygments-w"> </span><span class="pygments-s2">"libvirt"</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span>module<span class="pygments-w"> </span><span class="pygments-s2">"base"</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">cc_username</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">""</span><span class="pygments-w">
</span><span class="pygments-nv">cc_password</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">""</span><span class="pygments-w">
</span><span class="pygments-nv">images</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-o">[</span><span class="pygments-s2">"centos7"</span>,<span class="pygments-w"> </span><span class="pygments-s2">"opensuse153o"</span>,<span class="pygments-w"> </span><span class="pygments-s2">"ubuntu1804"</span><span class="pygments-o">]</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span>module<span class="pygments-w"> </span><span class="pygments-s2">"server"</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">base_configuration</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span>module.base.configuration<span class="pygments-w">
</span><span class="pygments-nv">product_version</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"uyuni-master"</span><span class="pygments-w">
</span><span class="pygments-nv">name</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"server"</span><span class="pygments-w">
</span><span class="pygments-nv">image</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"opensuse153o"</span><span class="pygments-w">
</span><span class="pygments-nv">use_os_released_updates</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">true</span><span class="pygments-w">
</span><span class="pygments-nv">create_first_user</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">auto_accept</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">skip_changelog_import</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">mgr_sync_autologin</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">create_sample_channel</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">create_sample_activation_key</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">create_sample_bootstrap_script</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">publish_private_ssl_key</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">false</span><span class="pygments-w">
</span><span class="pygments-nv">java_debugging</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">true</span><span class="pygments-w">
</span><span class="pygments-nv">provider_settings</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">memory</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-m">8192</span><span class="pygments-w">
</span><span class="pygments-nv">vcpu</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-m">4</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span>module<span class="pygments-w"> </span><span class="pygments-s2">"redhat-minion"</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">base_configuration</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span>module.base.configuration<span class="pygments-w">
</span><span class="pygments-nv">product_version</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"uyuni-master"</span><span class="pygments-w">
</span><span class="pygments-nv">name</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"minion-centos7"</span><span class="pygments-w">
</span><span class="pygments-nv">image</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"centos7"</span><span class="pygments-w">
</span><span class="pygments-nv">server_configuration</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span>module.server.configuration<span class="pygments-w">
</span><span class="pygments-nv">provider_settings</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">memory</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-m">1024</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span><span class="pygments-nv">auto_connect_to_master</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">true</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span>module<span class="pygments-w"> </span><span class="pygments-s2">"debian-minion"</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">base_configuration</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span>module.base.configuration<span class="pygments-w">
</span><span class="pygments-nv">product_version</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"uyuni-master"</span><span class="pygments-w">
</span><span class="pygments-nv">name</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"minion-ubuntu1804"</span><span class="pygments-w">
</span><span class="pygments-nv">image</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-s2">"ubuntu1804"</span><span class="pygments-w">
</span><span class="pygments-nv">server_configuration</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span>module.server.configuration<span class="pygments-w">
</span><span class="pygments-nv">provider_settings</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-o">{</span><span class="pygments-w">
</span><span class="pygments-nv">memory</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-m">1024</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span><span class="pygments-nv">auto_connect_to_master</span><span class="pygments-w"> </span><span class="pygments-o">=</span><span class="pygments-w"> </span><span class="pygments-nb">true</span><span class="pygments-w">
</span><span class="pygments-o">}</span><span class="pygments-w">
</span>
</pre>
<p><strong>Ansible Snippets for the Setup steps</strong></p>
<pre class="code yaml literal-block">
<span class="pygments-p-Indicator">-</span><span class="pygments-w"> </span><span class="pygments-nt">name</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">Import systemsmanagement:/sumaform RPM Key</span><span class="pygments-w">
</span><span class="pygments-nt">rpm_key</span><span class="pygments-p">:</span><span class="pygments-w">
</span><span class="pygments-nt">key</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">https://download.opensuse.org/repositories/systemsmanagement:/sumaform/openSUSE_Tumbleweed/repodata/repomd.xml.key</span><span class="pygments-w">
</span><span class="pygments-nt">state</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">present</span><span class="pygments-w">
</span><span class="pygments-p-Indicator">-</span><span class="pygments-w"> </span><span class="pygments-nt">name</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">Add systemsmanagement:/sumaform RPM Repository</span><span class="pygments-w">
</span><span class="pygments-nt">community.general.zypper_repository</span><span class="pygments-p">:</span><span class="pygments-w">
</span><span class="pygments-nt">name</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">systemsmanagement_sumaform</span><span class="pygments-w">
</span><span class="pygments-nt">description</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">Using Terraform to create a SUSE Manager test environment (openSUSE_Tumbleweed)</span><span class="pygments-w">
</span><span class="pygments-nt">repo</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">https://download.opensuse.org/repositories/systemsmanagement:/sumaform/openSUSE_Tumbleweed/</span><span class="pygments-w">
</span><span class="pygments-nt">priority</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">90</span><span class="pygments-w">
</span><span class="pygments-nt">state</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">present</span><span class="pygments-w">
</span><span class="pygments-nt">ignore_errors</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">true</span><span class="pygments-w">
</span><span class="pygments-p-Indicator">-</span><span class="pygments-w"> </span><span class="pygments-nt">name</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">Package Installation (Uyuni Development - sumaform)</span><span class="pygments-w">
</span><span class="pygments-nt">community.general.zypper</span><span class="pygments-p">:</span><span class="pygments-w">
</span><span class="pygments-nt">name</span><span class="pygments-p">:</span><span class="pygments-w">
</span><span class="pygments-p-Indicator">-</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">terraform</span><span class="pygments-w">
</span><span class="pygments-p-Indicator">-</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">terraform-provider-libvirt</span><span class="pygments-w">
</span><span class="pygments-p-Indicator">-</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">git-core</span><span class="pygments-w">
</span><span class="pygments-nt">allow_vendor_change</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">true</span><span class="pygments-w">
</span><span class="pygments-nt">force_resolution</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">true</span><span class="pygments-w">
</span><span class="pygments-nt">force</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">true</span><span class="pygments-w">
</span><span class="pygments-nt">state</span><span class="pygments-p">:</span><span class="pygments-w"> </span><span class="pygments-l-Scalar-Plain">latest</span><span class="pygments-w">
</span>
</pre>