Skip to content

Commit f164730

Browse files
update ci pipeline for ansible
1 parent 6843bbc commit f164730

10 files changed

+167
-64
lines changed

cicd/ansible/kustomization.yaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ kind: Kustomization
44
namespace: "cicd-ansible"
55
resources:
66
- https://api.hub.tekton.dev/v1/resource/tekton/task/git-clone/0.9/raw
7-
- task-ssh-key-generate.yaml
8-
- task-ssh-key-sign.yaml
9-
- task-ansible-run-playbook.yaml
10-
- pipeline.yaml
117
- namespace.yaml
128
- rbac.yaml
9+
- tekton-task-vault-login.yaml
10+
- tekton-task-ssh-key-generate.yaml
11+
- tekton-task-ssh-key-sign.yaml
12+
- tekton-task-ansible-run-playbook.yaml
13+
- tekton-pipeline.yaml

cicd/ansible/task-ansible-run-playbook.yaml

Lines changed: 0 additions & 31 deletions
This file was deleted.

cicd/ansible/task-ssh-key-generate.yaml

Lines changed: 0 additions & 18 deletions
This file was deleted.

cicd/ansible/pipeline.yaml renamed to cicd/ansible/tekton-pipeline.yaml

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ kind: Pipeline
44
metadata:
55
name: "ansible"
66
spec:
7-
description: "This pipeline clones a github repo, builds it and uploads assets."
7+
description: |
8+
Clones Ansible playbooks, roles and inventory repositories, authenticates against Vault, generates SSH
9+
key pair, signs them and finally runs Ansible playbooks.
810
params:
911
- name: "ansible-repo-clone-url"
1012
type: "string"
@@ -30,12 +32,27 @@ spec:
3032
- description: "Vault Kubernetes auth mount"
3133
name: "vault-kubernetes-auth-mount"
3234
type: "string"
35+
- description: "The playbook to run"
36+
name: "playbook"
37+
type: "string"
3338
workspaces:
3439
- name: "shared-data"
3540
description: "This workspace contains the cloned repo files, so they can be read by the next task."
3641
- name: "ssh-creds"
3742
description: "Workspace containing the SSH keys to clone from GitHub"
43+
- name: "ansible-config"
44+
- name: "ansible-ssh-config"
3845
tasks:
46+
- name: "vault-login"
47+
taskRef:
48+
name: "vault-login"
49+
params:
50+
- name: "vault-address"
51+
value: $(params.vault-address)
52+
- name: "auth-role"
53+
value: $(params.vault-kubernetes-auth-role)
54+
- name: "auth-mount"
55+
value: $(params.vault-kubernetes-auth-mount)
3956
- name: "git-clone-ansible"
4057
taskRef:
4158
name: "git-clone"
@@ -80,20 +97,27 @@ spec:
8097
params:
8198
- name: "vault-address"
8299
value: $(params.vault-address)
100+
- name: "vault-token"
101+
value: $(tasks.vault-login.results.vault_token)
83102
- name: "vault-ssh-role"
84103
value: $(params.vault-ssh-role)
85104
- name: "vault-ssh-mount"
86105
value: $(params.vault-ssh-mount)
87-
- name: "vault-kubernetes-auth-role"
88-
value: $(params.vault-kubernetes-auth-role)
89-
- name: "vault-kubernetes-auth-mount"
90-
value: $(params.vault-kubernetes-auth-mount)
91106
- name: "ansible-run-playbook"
92-
runAfter: ["git-clone-ansible", "git-clone-ansible-inventory", "ssh-key-sign"]
107+
runAfter: ["vault-login", "git-clone-ansible", "git-clone-ansible-inventory", "ssh-key-sign"]
93108
taskRef:
94109
name: "ansible-run-playbook"
95110
workspaces:
96111
- name: "source"
97112
workspace: "shared-data"
98113
- name: "keypair"
99114
workspace: "shared-data"
115+
- name: "ansible-config"
116+
workspace: "ansible-config"
117+
- name: "ansible-ssh-config"
118+
workspace: "ansible-ssh-config"
119+
params:
120+
- name: "vault-token"
121+
value: $(tasks.vault-login.results.vault_token)
122+
- name: "playbook"
123+
value: $(params.playbook)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
apiVersion: tekton.dev/v1
3+
kind: Task
4+
metadata:
5+
name: "ansible-run-playbook"
6+
spec:
7+
description: "Runs an Ansible playbook"
8+
workspaces:
9+
- name: "source"
10+
- name: "keypair"
11+
- name: "ansible-config"
12+
mountPath: "/etc/ansible"
13+
- name: "ansible-ssh-config"
14+
params:
15+
- name: "vault-token"
16+
description: "Vault token to use for KMS decryption of SOPS secrets"
17+
type: "string"
18+
default: ""
19+
- name: "playbook"
20+
description: "Path of playbook to run"
21+
type: "string"
22+
- name: "tags"
23+
description: "Run only tasks with the given tags"
24+
type: "string"
25+
default: "all"
26+
- name: "skip-tags"
27+
description: "Run only tasks that don't contain the given tags"
28+
type: "string"
29+
default: ""
30+
steps:
31+
- name: "ansible"
32+
image: "cr.svc.ez.soeren.cloud/ansible"
33+
imagePullPolicy: "IfNotPresent"
34+
env:
35+
- name: "VAULT_TOKEN"
36+
value: $(params.vault-token)
37+
- name: "ANSIBLE_INVENTORY"
38+
value: $(workspaces.source.path)/inventory/inventory.yml
39+
script: |
40+
set -e
41+
if [ "$(workspaces.ansible-ssh-config.bound)" == "true" ] ; then
42+
mkdir /home/ansible/.ssh
43+
cp -v $(workspaces.ansible-ssh-config.path)/* /home/ansible/.ssh/
44+
fi
45+
46+
ansible-playbook --tags=$(params.tags) --skip-tags=$(params.skip-tags) -e ansible_ssh_private_key_file=$(workspaces.keypair.path)/key $(workspaces.source.path)/ansible/playbooks/$(params.playbook)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
apiVersion: tekton.dev/v1
3+
kind: Task
4+
metadata:
5+
name: "ssh-key-generate"
6+
spec:
7+
description: "Generates a ssh public key pair"
8+
workspaces:
9+
- name: "keypair"
10+
params:
11+
- name: "key-type"
12+
description: "The type of the SSH key"
13+
type: "string"
14+
default: "ed25519"
15+
steps:
16+
- name: "generate-ssh-key"
17+
image: "cr.svc.ez.soeren.cloud/ansible"
18+
imagePullPolicy: IfNotPresent
19+
env:
20+
- name: "HOME"
21+
value: "/tmp"
22+
script: |-
23+
ssh-keygen -t $(params.key-type) -f $(workspaces.keypair.path)/key -N ""

cicd/ansible/task-ssh-key-sign.yaml renamed to cicd/ansible/tekton-task-ssh-key-sign.yaml

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,47 @@ spec:
1111
- description: "Endpoint of Vault API"
1212
name: "vault-address"
1313
type: "string"
14+
- name: "vault-token"
15+
type: string
16+
default: ""
17+
description: "The Vault token"
1418
- description: "Vault SSH role"
1519
name: "vault-ssh-role"
1620
type: "string"
1721
- description: "Vault SSH mount"
1822
name: "vault-ssh-mount"
1923
type: "string"
2024
default: "ssh"
25+
- name: "vault-ssh-ttl"
26+
description: "Desired TTL of the Vault signature"
27+
type: "string"
28+
default: "30m"
2129
- description: "Vault Kubernetes auth role"
2230
name: "vault-kubernetes-auth-role"
2331
type: "string"
32+
default: ""
2433
- description: "Vault Kubernetes auth mount"
2534
name: "vault-kubernetes-auth-mount"
2635
type: "string"
2736
default: "kubernetes"
2837
steps:
2938
- name: "sign-ssh-key"
30-
image: "ghcr.io/soerenschneider/vault-ssh-cli:1.9.1"
31-
imagePullPolicy: IfNotPresent
39+
image: "cr.svc.ez.soeren.cloud/vault-ssh-cli"
40+
#image: "ghcr.io/soerenschneider/vault-ssh-cli:1.9.1"
41+
imagePullPolicy: Always
3242
env:
3343
- name: "HOME"
3444
value: "/tmp"
45+
- name: "VAULT_TOKEN"
46+
value: $(params.vault-token)
3547
args:
3648
- "--vault-address=$(params.vault-address)"
49+
- "--vault-auth-token=$(params.vault-token)"
3750
- "sign-user-key"
3851
- "--pub-key-file=$(workspaces.keypair.path)/key.pub"
3952
- "--signed-key-file=$(workspaces.keypair.path)/key-cert.pub"
4053
- "--vault-ssh-role=$(params.vault-ssh-role)"
4154
- "--vault-ssh-mount=$(params.vault-ssh-mount)"
42-
- "--vault-auth-kubernetes-role=$(params.vault-kubernetes-auth-role)"
43-
- "--vault-auth-kubernetes-mount=$(params.vault-kubernetes-auth-mount)"
55+
- "--ttl=$(params.vault-ssh-ttl)"
56+
# - "--vault-auth-kubernetes-role=$(params.vault-kubernetes-auth-role)"
57+
# - "--vault-auth-kubernetes-mount=$(params.vault-kubernetes-auth-mount)"
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
apiVersion: tekton.dev/v1
3+
kind: Task
4+
metadata:
5+
name: "vault-login"
6+
spec:
7+
description: "Authenticates against Vault and saves the Vault token"
8+
params:
9+
- description: "Endpoint of Vault API"
10+
name: "vault-address"
11+
type: "string"
12+
- description: "Method of Vault authentication"
13+
name: "auth-method"
14+
type: "string"
15+
default: "kubernetes"
16+
- description: "Mount point of Vault authentication method"
17+
name: "auth-mount"
18+
type: "string"
19+
default: "kubernetes"
20+
- description: "Mount point of Vault authentication method"
21+
name: "auth-role"
22+
type: "string"
23+
results:
24+
- description: "Vault token"
25+
name: "vault_token"
26+
type: "string"
27+
steps:
28+
- name: "vault-login"
29+
image: "cr.svc.ez.soeren.cloud/vault-login"
30+
imagePullPolicy: Always
31+
env:
32+
- name: "HOME"
33+
value: "/tmp"
34+
- name: "VAULT_ADDR"
35+
value: $(params.vault-address)
36+
- name: "VAULT_AUTH_TYPE"
37+
value: $(params.auth-method)
38+
- name: "VAULT_AUTH_MOUNT"
39+
value: $(params.auth-mount)
40+
- name: "VAULT_AUTH_ROLE"
41+
value: $(params.auth-role)
42+
- name: "VAULT_AUTH_OUTPUT_TYPE"
43+
value: "file"
44+
- name: "VAULT_AUTH_OUTPUT_SECRET_NAME"
45+
value: $(results.vault_token.path)

clusters/common/cicd/kustomization.yaml renamed to clusters/common/cicd/github-releases/kustomization.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@ kind: Kustomization
44
namespace: cicd
55
resources:
66
- ../../../cicd/github-release
7-
- external-secret-github.yaml
87
- namespace.yaml
File renamed without changes.

0 commit comments

Comments
 (0)