Migrating from cvmanager
to Foreman Ansible Modules¶
cvmanager is a tool to automate Content View management workflows. It hasn’t been updated in a long time and users are encouraged to migrate to Ansible and the Foreman Ansible Modules.
This document documents how the various workflows can be translated into Ansible playbooks.
Please note that cvmanager
configuration refers to Content Views by their labels, while Ansible uses the names of the Content Views for that.
Cleanup of old Content Views¶
To ease cleanup of old Content Views, we ship the content_view_version_cleanup
role which will identify unused Content View Versions and remove them, much like cvmanager
did:
- hosts: localhost
roles:
- role: theforeman.foreman.content_view_version_cleanup
vars:
server_url: https://foreman.example.com
username: "admin"
password: "changeme"
organization: "Default Organization"
content_view_version_cleanup_keep: 10
Automated Updates¶
When cvmanager
was initially written, Composite Content Views did not support setting individual components to latest
and thus this feature was implemented inside cvmanager
.
As Composite Content Views gained latest
support since then, the “Automated Updates” feature of cvmanager
is not really needed anymore and users are encouraged to configure their Composite Content Views accordingly.
If, for example, the old cvmanager
configuration contained the following entries:
:ccv:
ccv-RHEL7-automated:
cv-RHEL7: 23.0
cv-tools: latest
You can achieve the same using the content_view
module:
- name: "Create ccv-RHEL7-automated Composite Content View"
theforeman.foreman.content_view:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
name: "ccv-RHEL7-automated"
composite: true
components:
- content_view: cv-RHEL7
content_view_version: 23.0
- content_view: cv-tools
latest: true
Configurations that also used the :cv
entry, which resulted in all Composite Content Views that contained entries from :cv
being updated,
will need to be migrated to a more declarative approach as seen above.
Using the latest
feature in Composite Content Views with multiple componets set to latest: true
will result in automatic publishes whenever one of the components is updated.
This might be not desired if the components are updated in bulk, thus generating multiple publishes.
To avoid that, you still can use individual versions instead of latest: true
by looking up the latest version using the resource_info
module:
- name: "Get info about cv-tools Content View"
theforeman.foreman.resource_info:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
resource: content_views
search: 'name="cv-tools"'
register: cv_tools
- name: "Create/Update ccv-RHEL7-automated Composite Content View"
theforeman.foreman.content_view:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
name: "ccv-RHEL7-automated"
composite: true
components:
- content_view: cv-RHEL7
content_view_version: 23.0
- content_view: cv-tools
content_view_version: "{{ cv_tools.resources[0].latest_version }}"
register: ccv_rhel
- name: "Publish ccv-RHEL7-automated Composite Content View"
theforeman.foreman.content_view_version:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
content_view: "ccv-RHEL7-automated"
when:
- ccv_rhel.changed
Automated Publishes¶
Since the inception of cvmanager
, Composite Content Views gained the “Auto Publish” feature, which means that Composite Content Views will automatically be published whenever a component (that is configured as latest
) is published.
To configure this using Ansible, add auto_publish: true
to the content_view
module invocation:
- name: "Create ccv-RHEL7-automated Composite Content View"
theforeman.foreman.content_view:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
name: "ccv-RHEL7-automated"
composite: true
auto_publish: true
components:
- content_view: cv-RHEL7
content_view_version: 23.0
- content_view: cv-tools
latest: true
cvmanager
also supports automating publishing for regular Content Views, by inspecting the history of the included Repositories to decide whether a publish is necessary or not.
As the underlying logic is too fragile, there is no equivalent for doing conditional publish using Ansible. Non-conditional publishes can be done using the content_view_version
module:
- name: "Publish cv-tools Content View, not idempotent"
theforeman.foreman.content_view_version:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
content_view: "cv-tools"
Automated Promotes¶
To not have clients attached to “Library”, cvmanager
has an “Automated Promotes” feature which essentially ensures that a given (Composite) Content View has the same version in “Library” and another user-selected Lifecycle Environment.
The same can be achieved using the content_view_version
module:
- name: "Ensure ccv-RHEL7-automated is the same version in Library and Dev"
theforeman.foreman.content_view_version:
username: "admin"
password: "changeme"
server_url: "https://foreman.example.com"
organization: "Default Organization"
content_view: "ccv-RHEL7-automated"
current_lifecycle_environment: Library
lifecycle_environments:
- Dev