How to sign an Ansible project?

From a non-signed to a GPG-signed Ansible project.

I'm going to show you a live Playbook with some simple Ansible code.

I'm Luca Berton, and welcome to today's episode of Ansible Pilot.

ansible-sign

  • available since 2022
  • GPG signature
  • command line

The ansible-sign command has been available since 2022 for installation in the most modern operating system.

It is a command line tool so simplify the Project signing process using your terminal.

Using the ansible-sign command, you sign a project using a GPG signature.

Playbook

  • GPG sign a project

I'm going to show you how to sign an Ansible project using the ansible-sign command line utility.

At the beginning of this example, we start with a project with all our Ansible files without any GPG signature files.

By the end of this Playbook, you are obtaining a GPG-signed project directory.

Project directory files:

  • playbooks/ping.yml

``yaml

---

  • name: ping module Playbook

hosts: all

tasks:

- name: test connection

ansible.builtin.ping:

`

  • inventory

`ini

localhost ansible_connection=local

`

  • MANIFEST.in

`ini

recursive-exclude .git *

include inventory

recursive-include playbooks *.yml

`

1. install ansible-sign

Verify if the ansible-sign command is available in your terminal. When you obtain a command not found error, you should install it.

`bash

$ ansible-sign

command not found: ansible-sign

`

When the package is not available on our favorite package manager (apt, DNF, yum, zypper, brew, conda), we can rely on the PIP Python package manager:

$ pip3 install ansible-sign

Expected output:

`bash

$ pip3 install ansible-sign

Collecting ansible-sign

Downloading ansible_sign-0.1.1-py3-none-any.whl (15 kB)

Requirement already satisfied: distlib in /opt/homebrew/lib/python3.10/site-packages (from ansible-sign) (0.3.6)

Requirement already satisfied: python-gnupg in /opt/homebrew/lib/python3.10/site-packages (from ansible-sign) (0.5.0)

Installing collected packages: ansible-sign

Successfully installed ansible-sign-0.1.1

`

By the end of this step, the command will be available with the following output:

`bash

$ ansible-sign

usage: ansible-sign [-h] [--version] [--debug] [--nocolor] CONTENT_TYPE ...

ansible-sign: error: the following arguments are required: CONTENT_TYPE

`

2. create a MANIFEST.in file

When the MANIFEST.in file is not present, we obtain the following message on the screen:

`bash

$ ansible-sign project gpg-sign .

[ERROR] Could not find a MANIFEST.in file in the specified project.

[NOTE ] If you are attempting to sign a project, please create this file.

[NOTE ] See the ansible-sign documentation for more information.

`

When some parts of the MANIFEST.in file is not correct; we obtain the following error on the screen:

``bash

[ERROR] An error was encountered while parsing MANIFEST.in: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

[NOTE ] You can use the --de