Statistics View on GitHub Reload from mirrored respository
| Branch: | Tag: | Revision:
How to connect?

pulp_ansible @ master

Pulp Ansible

Use ``pulp_ansible`` to create a private Galaxy. It doesn't have a UI currently, but using an API
you can:

* Mirror a subset of roles on-premise
* Mirror all of Galaxy’s roles on-premise
* Store private Ansible roles on-premise
* Install Roles from pulp_ansible using the `ansible-galaxy` CLI
* Version Role content over time and rollback if necessary

Issues are tracked `in Redmine <;`_. You can file
a new issue or feature request `here <;`_.
You can also ask questions in the #pulp-ansible channel on
`Freenode <;`_.

Install ``pulp-ansible`` using Ansible

pulp_ansible can be installed using an Ansible playbook and roles provided by pulpcore
`here <;`_. See
`this 2-min video <;`_ showing that installer
installing pulp_ansible.

Install ``pulp-ansible`` From PyPI

.. code-block:: bash

sudo -u pulp -i
source ~/pulpvenv/bin/activate
pip install pulp-ansible

After installing the code, configure Pulp to connect to Redis and PostgreSQL with the `pulpcore
configuration instructions

Install ``pulp-ansible`` from source

.. code-block:: bash

sudo -u pulp -i
source ~/pulpvenv/bin/activate
git clone
cd pulp_ansible
pip install -e .

After installing the code, configure Pulp to connect to Redis and PostgreSQL with the `pulpcore
configuration instructions

Make and Run Migrations

.. code-block:: bash

pulp-manager makemigrations pulp_ansible
pulp-manager migrate pulp_ansible

Run Services

.. code-block:: bash

pulp-manager runserver
sudo systemctl restart pulp_resource_manager
sudo systemctl restart pulp_worker@1


All REST API examples bellow use `httpie <;`__ to perform the requests.
The ``httpie`` commands below assume that the user executing the commands has a ``.netrc`` file
in the home directory. The ``.netrc`` should have the following configuration:

.. code-block::

machine localhost
login admin
password admin

If you configured the ``admin`` user with a different password, adjust the configuration
accordingly. If you prefer to specify the username and password with each request, please see
``httpie`` documentation on how to do that.

This documentation makes use of the `jq library <;`_
to parse the json received from requests, in order to get the unique urls generated
when objects are created. To follow this documentation as-is please install the jq
library with:

``$ sudo dnf install jq``

Create a repository ``foo``

``$ http POST http://localhost:8000/pulp/api/v3/repositories/ name=foo``

.. code:: json

"_href": "http://localhost:8000/pulp/api/v3/repositories/1/&quot;,

``$ export REPO_HREF=$(http :8000/pulp/api/v3/repositories/ | jq -r '.results[] | select(.name == "foo") | ._href')``

Create a new remote ``bar``

``$ http POST :8000/pulp/api/v3/remotes/ansible/ name=bar url=';``

.. code:: json

"_href": "http://localhost:8000/pulp/api/v3/remotes/ansible/1/&quot;,

``$ export REMOTE_HREF=$(http :8000/pulp/api/v3/remotes/ansible/ | jq -r '.results[] | select(.name == "bar") | ._href')``

Sync repository ``foo`` using remote ``bar``

``$ http POST ':8000'$REMOTE_HREF'sync/' repository=$REPO_HREF``

Look at the new Repository Version created

``$ http GET ':8000'$REPO_HREF'versions/1/'``

.. code:: json

"_added_href": "http://localhost:8000/pulp/api/v3/repositories/1/versions/1/added_content/&quot;,
"_content_href": "http://localhost:8000/pulp/api/v3/repositories/1/versions/1/content/&quot;,
"_href": "http://localhost:8000/pulp/api/v3/repositories/1/versions/1/&quot;,
"_removed_href": "http://localhost:8000/pulp/api/v3/repositories/1/versions/1/removed_content/&quot;,
"content_summary": {
"ansible": 11
"created": "2018-03-12T19:23:31.000923Z",
"number": 1

Upload a Role to Pulp

Download a role version.

``curl -L -o pulp.tar.gz``

Create an Artifact by uploading the role version tarball to Pulp.

``$ export ARTIFACT_HREF=$(http --form POST http://localhost:8000/pulp/api/v3/artifacts/ | jq -r '._href')``

Create a Role content unit

Create an Ansible role in Pulp.

``$ export ROLE_HREF=$(http http://localhost:8000/pulp/api/v3/content/ansible/roles/ namespace=pulp name=pulp | jq -r '._href')``

Create a ``role version`` from the Role and Artifact

Create a content unit and point it to your Artifact and Role

``$ export CONTENT_HREF=$(http POST ':8000'${ROLE_HREF}versions/ version=0.0.1 artifact=$ARTIFACT_HREF | jq -r '._href')``

Add content to repository ``foo``

``$ http POST ':8000'$REPO_HREF'versions/' add_content_units:="[\"$CONTENT_HREF\"]"``

Create a Publication

``$ http POST :8000/pulp/api/v3/ansible/publications/ repository=$REPO_HREF``

.. code:: json

"task": "http://localhost:8000/pulp/api/v3/tasks/fd4cbecd-6c6a-4197-9cbe-4e45b0516309/&quot;

``$ export PUBLICATION_HREF=$(http :8000/pulp/api/v3/publications/ | jq -r '.results[0] | ._href')``

Create a Distribution for the Publication

``$ http POST http://localhost:8000/pulp/api/v3/distributions/ name='baz' base_path='dev' publication=$PUBLICATION_HREF``

.. code:: json

"_href": "http://localhost:8000/pulp/api/v3/distributions/1/&quot;,

Install the ansible kubernetes Role

Using a direct path

To install your role using a link to the direct tarball, do the following:

``$ ansible-galaxy install http://localhost:8000/pulp/content/dev/elastic/elasticsearch/6.2.4.tar.gz,,elastic.elasticsearch``

Using the Pulp Galaxy API

Alternatively, Pulp offers a built-in Galaxy API. To use this, set up your distribution in your
ansible config (e.g. ``~/.ansible.cfg`` or ``/etc/ansible/ansible.cfg``):

.. code::

server: http://localhost:8000/pulp_ansible/galaxy/dev

Then install your role using namespace and name:

.. code::

$ ansible-galaxy install elastic.elasticsearch
- downloading role 'elasticsearch', owned by elastic
- downloading role from http://localhost:8000/pulp/content/dev/elastic/elasticsearch/6.2.4.tar.gz
- extracting elastic.elasticsearch to /home/vagrant/.ansible/roles/elastic.elasticsearch
- elastic.elasticsearch (6.2.4) was installed successfully

View all revisions | View revisions

Also available in: Atom