Chapter 13. Managing Custom File Type Content

In Satellite, you might require methods of managing and distributing SSH keys and source code files or larger files such as virtual machine images and ISO files. To achieve this, custom Products in Red Hat Satellite include repositories for custom file types. This provides a generic method to incorporate arbitrary files in a product.

You can upload files to the repository and synchronize files from an upstream Satellite Server. When you add files to a custom file type repository, you can use the normal Satellite management functions such as adding a specific version to a Content View to provide version control and making the repository of files available on various Capsule Servers. Clients must download the files over HTTP or HTTPS using curl -O.

You can create a file type repository in Satellite Server only in a custom Product, but there is flexibility in how you create the repository source. You can create an independent repository source in a directory on Satellite Server, or on a remote HTTP server, and then synchronize the contents of that directory into Satellite. This method is useful when you have multiple files to add to a Satellite repository.

13.1. Creating a Local Source for a Custom File Type Repository

You can create a custom file type repository source, from a directory of files, on the base system where Satellite is installed using Pulp Manifest. You can then synchronize the files into a repository and manage the custom file type content like any other content type.

Use this procedure to configure a repository in a directory on the base system where Satellite is installed. To create a file type repository in a directory on a remote server, see Section 13.2, “Creating a Remote Source for a Custom File Type Repository”.

Procedure

  1. Ensure the Utils repository is enabled:

    # subscription-manager repos \
    --enable=rhel-8-for-x86_64-appstream-rpms \
    --enable=rhel-8-for-x86_64-baseos-rpms \
    --enable=satellite-utils-6.12-for-rhel-8-x86_64-rpms
  2. Enable the satellite-utils module:

    # dnf module enable satellite-utils
  3. Install the Pulp Manifest package:

    # satellite-maintain packages install python39-pulp_manifest

    Note that this command stops the Satellite service and re-runs satellite-installer. Alternatively, to prevent downtime caused by stopping the service, you can use the following:

    # satellite-maintain packages unlock
    # dnf install python39-pulp_manifest
    # satellite-maintain packages lock
  4. Create a directory that you want to use as the file type repository, such as:

    # mkdir -p /var/lib/pulp/local_repos/my_file_repo
  5. Add the parent folder into allowed import paths:

    # satellite-installer --foreman-proxy-content-pulpcore-additional-import-paths /var/lib/pulp/local_repos
  6. Add files to the directory or create a test file:

    # touch /var/lib/pulp/local_repos/my_file_repo/test.txt
  7. Run the Pulp Manifest command to create the manifest:

    # pulp-manifest /var/lib/pulp/local_repos/my_file_repo
  8. Verify the manifest was created:

    # ls /var/lib/pulp/local_repos/my_file_repo
    PULP_MANIFEST test.txt

Now, you can import your local source as a custom file type repository. Use the file:// URL scheme and the name of the directory to specify an Upstream URL, such as file:///my_file_repo. For more information, see Section 13.3, “Creating a Custom File Type Repository”.

If you update the contents of your directory, re-run Pulp Manifest and sync the repository in Satellite. For more information, see Section 4.6, “Synchronizing Repositories”.

13.2. Creating a Remote Source for a Custom File Type Repository

You can create a custom file type repository source from a directory of files that is external to Satellite Server using Pulp Manifest. You can then synchronize the files into a repository on Satellite Server over HTTP or HTTPS and manage the custom file type content like any other content type.

Use this procedure to configure a repository in a directory on a remote server. To create a file type repository in a directory on the base system where Satellite Server is installed, see Section 13.1, “Creating a Local Source for a Custom File Type Repository”.

Prerequisites

  • You have a server running Red Hat Enterprise Linux 8 registered to your Satellite or the Red Hat CDN.
  • Your server has an entitlement to the Red Hat Enterprise Linux Server and Red Hat Satellite Utils repositories.
  • You have installed an HTTP server. For more information about configuring a web server, see Setting up the Apache HTTP web server in Deploying different types of servers.

Procedure

  1. On your server, ensure that the right repositories are enabled:

    # subscription-manager repos \
    --enable=rhel-8-for-x86_64-appstream-rpms \
    --enable=rhel-8-for-x86_64-baseos-rpms \
    --enable=satellite-utils-6.12-for-rhel-8-x86_64-rpms
  2. Enable the satellite-utils module:

    # dnf module enable satellite-utils
  3. Install the Pulp Manifest package:

    # dnf install python39-pulp_manifest
  4. Create a directory that you want to use as the file type repository in the HTTP server’s public folder:

    # mkdir /var/www/html/pub/my_file_repo
  5. Add files to the directory or create a test file:

    # touch /var/www/html/pub/my_file_repo/test.txt
  6. Run the Pulp Manifest command to create the manifest:

    # pulp-manifest /var/www/html/pub/my_file_repo
  7. Verify the manifest was created:

    # ls /var/www/html/pub/my_file_repo
    PULP_MANIFEST test.txt

Now, you can import your remote source as a custom file type repository. Use the path to the directory to specify an Upstream URL, such as http://satellite.example.com/my_file_repo. For more information, see Section 13.3, “Creating a Custom File Type Repository”.

If you update the contents of your directory, re-run Pulp Manifest and sync the repository in Satellite. For more information, see Section 4.6, “Synchronizing Repositories”.

13.3. Creating a Custom File Type Repository

The procedure for creating a custom file type repository is the same as the procedure for creating any custom content, except that when you create the repository, you select the file type. You must create a product and then add a custom repository.

To use the CLI instead of the Satellite web UI, see the CLI procedure.

Procedure

  1. In the Satellite web UI, navigate to Content > Products.
  2. Select a product that you want to create a repository for.
  3. On the Repositories tab, click New Repository.
  4. In the Name field, enter a name for the repository. Satellite automatically completes the Label field based on the name.
  5. Optional: In the Description field, enter a description for the repository.
  6. From the Type list, select file as type of repository.
  7. Optional: In the Upstream URL field, enter the URL of the upstream repository to use as a source. If you do not enter an upstream URL, you can manually upload packages. For more information, see Section 13.4, “Uploading Files To a Custom File Type Repository”.
  8. Select the Verify SSL checkbox if you want to verify that the upstream repository’s SSL certificates are signed by a trusted CA.
  9. Optional: In the Upstream Username field, enter the user name for the upstream repository if required for authentication. Clear this field if the repository does not require authentication.
  10. Optional: In the Upstream Password field, enter the corresponding password for the upstream repository. Clear this field if the repository does not require authentication.
  11. Optional: In the Upstream Authentication Token field, provide the token of the upstream repository user for authentication. Leave this field empty if the repository does not require authentication.
  12. From the Mirroring Policy list, select the type of content synchronization Satellite Server performs. For more information, see Section 4.11, “Mirroring Policies Overview”.
  13. Optional: In the HTTP Proxy Policy field, select or deselect using a HTTP proxy. By default, it uses the Global Default HTTP proxy.
  14. Optional: You can clear the Unprotected checkbox to require a subscription entitlement certificate for accessing this repository. By default, the repository is published through HTTP.
  15. Optional: In the SSL CA Cert field, select the SSL CA Certificate for the repository.
  16. Optional: In the SSL Client Cert field, select the SSL Client Certificate for the repository.
  17. Optional: In the SSL Client Key field, select the SSL Client Key for the repository.
  18. Click Save to create the repository.

CLI procedure

  1. Create a custom Product:

    # hammer product create \
    --description "My_Files" \
    --name "My_File_Product" \
    --organization "My_Organization" \
    --sync-plan "My_Sync_Plan"

    Table 13.1. Optional Parameters for the hammer product create Command

    OptionDescription

    --gpg-key-id gpg_key_id

    GPG key numeric identifier

    --sync-plan-id sync_plan_id

    Sync plan numeric identifier

    --sync-plan sync_plan_name

    Sync plan name to search by

  2. Create a file type repository:

    # hammer repository create \
    --content-type "file" \
    --name "My_Files" \
    --organization "My_Organization" \
    --product "My_File_Product"

    Table 13.2. Optional Parameters for the hammer repository create Command

    OptionDescription

    --checksum-type sha_version

    Repository checksum, currently 'sha1' & 'sha256' are supported

    --download-policy policy_name

    Download policy for yum repos (either 'immediate' or 'on_demand').

    --gpg-key-id gpg_key_id

    GPG key numeric identifier

    --gpg-key gpg_key_name

    Key name to search by

    --mirror-on-sync boolean

    Must this repo be mirrored from the source, and stale RPMs removed, when synced? Set to true or false, yes or no, 1 or 0.

    --publish-via-http boolean

    Must this also be published using HTTP? Set to true or false, yes or no, 1 or 0.

    --upstream-password repository_password

    Password for the upstream repository user

    --upstream-username repository_username

    Upstream repository user, if required for authentication

    --url source_repo_url

    URL of the Source repository

    --verify-ssl-on-sync boolean

    Must Katello verify that the upstream URL’s SSL certificates are signed by a trusted CA? Set to true or false, yes or no, 1 or 0.

13.4. Uploading Files To a Custom File Type Repository

Use this procedure to upload files to a custom file type repository.

Procedure

  1. In the Satellite web UI, navigate to Content > Products.
  2. Select a custom Product by name.
  3. Select a file type repository by name.
  4. Click Browse to search and select the file you want to upload.
  5. Click Upload to upload the selected file to Satellite Server.
  6. Visit the URL where the repository is published to see the file.

CLI procedure

# hammer repository upload-content \
--id repo_ID \
--organization "My_Organization" \
--path example_file

The --path option can indicate a file, a directory of files, or a glob expression of files. Globs must be escaped by single or double quotes.

13.5. Downloading Files to a Host From a Custom File Type Repository

You can download files to a client over HTTPS using curl -O, and optionally over HTTP if the Unprotected option for repositories is selected.

Prerequisites

Procedure

  1. In the Satellite web UI, navigate to Content > Products.
  2. Select a custom Product by name.
  3. Select a file type repository by name.
  4. Ensure to select the Unprotected checkbox to access the repository published through HTTP.
  5. Copy the URL where the repository is published.

CLI procedure

  1. List the file type repositories.

    # hammer repository list --content-type file
    ---|------------|-------------------|--------------|----
    ID | NAME       | PRODUCT           | CONTENT TYPE | URL
    ---|------------|-------------------|--------------|----
    7  | My_Files   | My_File_Product   | file         |
    ---|------------|-------------------|--------------|----
  2. Display the repository information.

    # hammer repository info \
    --name "My_Files" \
    --organization-id My_Organization_ID \
    --product "My_File_Product"

    If Unprotected is enabled, the output is similar to this:

    Publish Via HTTP: yes
    Published At:       https://satellite.example.com/pulp/content/My_Organization_Label/Library/custom/My_File_Product_Label/My_Files_Label/

    If Unprotected is not enabled, the output is similar to this:

    Publish Via HTTP: no
    Published At:       https://satellite.example.com/pulp/content/My_Organization_Label/Library/custom/My_File_Product_Label/My_Files_Label/
  3. On the client, enter a command in the appropriate format for HTTP or HTTPS:

    For HTTP:

    # curl -O http://satellite.example.com/pulp/content/My_Organization_Label/Library/custom/My_File_Product_Label/My_Files_Label/my_file

    For HTTPS:

    # curl -O --cert ./_My-Organization-key-cert.pem_ --cacert katello-server-ca.crt https://satellite.example.com/pulp/content/My_Organization_Label/Library/custom/My_File_Product_Label/My_Files_Label/my_file