diff --git a/roles/add-launchpad-credentials/README.rst b/roles/add-launchpad-credentials/README.rst
new file mode 100644
index 000000000..68236b3e8
--- /dev/null
+++ b/roles/add-launchpad-credentials/README.rst
@@ -0,0 +1,20 @@
+Add launchpadlib credentials and launchpadlib to a host
+
+**Role Variables**
+
+.. zuul:rolevar:: lp_creds
+
+   Complex argument which contains the information needed to log in
+   to Launchpad. It is expected that this argument comes from a `Secret`.
+
+  .. zuul:rolevar:: access_token
+
+     Launchpad access token
+
+  .. zuul:rolevar:: access_secret
+
+     Launchpad access secret
+
+  .. zuul:rolevar:: consumer_key
+
+     Launchpad consumer key
diff --git a/roles/add-launchpad-credentials/tasks/main.yaml b/roles/add-launchpad-credentials/tasks/main.yaml
new file mode 100644
index 000000000..3f1cdf345
--- /dev/null
+++ b/roles/add-launchpad-credentials/tasks/main.yaml
@@ -0,0 +1,16 @@
+- name: Ensure launchpadlib directory
+  file:
+    path: ~/.launchpadlib
+    state: directory
+
+- name: Write credentials
+  template:
+    path: ~/.launchpadlib/creds
+    mode: 0600
+    src: creds.j2
+
+- name: Install launchpadlib
+  package:
+    name: python-launchpadlib
+    state: present
+  become: yes
diff --git a/roles/add-launchpad-credentials/templates/creds.j2 b/roles/add-launchpad-credentials/templates/creds.j2
new file mode 100644
index 000000000..89fc22fc6
--- /dev/null
+++ b/roles/add-launchpad-credentials/templates/creds.j2
@@ -0,0 +1,5 @@
+[1]
+access_token = {{ lp_creds.access_token }}
+access_secret = {{ lp_creds.access_secret }}
+consumer_key = {{ lp_creds.consumer_key }}
+consumer_secret =
diff --git a/roles/remove-launchpad-credentials/README.rst b/roles/remove-launchpad-credentials/README.rst
new file mode 100644
index 000000000..fd0376060
--- /dev/null
+++ b/roles/remove-launchpad-credentials/README.rst
@@ -0,0 +1,7 @@
+Remove launchpadlib credentials from a host
+
+**Role Variables**
+
+.. zuul:rolevar:: launchpadlib_credentials
+
+   Path to the file containing the credentials.
diff --git a/roles/remove-launchpad-credentials/tasks/main.yaml b/roles/remove-launchpad-credentials/tasks/main.yaml
new file mode 100644
index 000000000..c8b11286e
--- /dev/null
+++ b/roles/remove-launchpad-credentials/tasks/main.yaml
@@ -0,0 +1,7 @@
+- name: Remove the launchpadlib credentials
+  command: shred ~/.launchpadlib/creds
+
+- name: Remove launchpadlib directory
+  file:
+    path: ~/.launchpadlib
+    state: absent