Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Kogito-2195] Kogito examples with ansible automation #258

Open
wants to merge 41 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
1e07b99
Release of version 0.10.0
cristianonicolai Apr 21, 2020
654af19
Kogito examples with ansible automation
desmax74 May 15, 2020
f3971c0
changes requested by reviewer
desmax74 May 18, 2020
4dee7f9
changes requested by reviewer
desmax74 May 18, 2020
7c027cd
changes requested by reviewer
desmax74 May 25, 2020
73d1f78
changes requested by reviewer
desmax74 May 25, 2020
5eb0cda
versions come from release/tag files
desmax74 May 26, 2020
48847f8
specified exact amount of ram and added pretask to remove hardcoded v…
desmax74 May 26, 2020
85b42af
enabled the tag and ram input
desmax74 May 26, 2020
a0cc19a
Kogito examples with ansible automation
desmax74 May 15, 2020
d78b179
changes requested by reviewer
desmax74 May 18, 2020
b188a30
changes requested by reviewer
desmax74 May 18, 2020
d157a97
changes requested by reviewer
desmax74 May 25, 2020
8eb988a
changes requested by reviewer
desmax74 May 25, 2020
2df8866
versions come from release/tag files
desmax74 May 26, 2020
baba573
specified exact amount of ram and added pretask to remove hardcoded v…
desmax74 May 26, 2020
b77023d
enabled the tag and ram input
desmax74 May 26, 2020
31ac8dd
Merge branch 'kogito-2195' of github.com:desmax74/kogito-examples int…
desmax74 Jun 9, 2020
cd77312
removed ubuntu support until we found a workaround to the loal user f…
desmax74 Jun 9, 2020
cd487d7
update
Jun 16, 2020
2c80cf1
Merge branch 'kogito-2195' of github.com:desmax74/kogito-examples int…
Jun 16, 2020
fa52112
update
Jun 16, 2020
be88c25
Kogito examples with ansible automation
desmax74 May 15, 2020
35f6e3a
changes requested by reviewer
desmax74 May 18, 2020
da2fcb6
changes requested by reviewer
desmax74 May 18, 2020
e76eb8e
changes requested by reviewer
desmax74 May 25, 2020
260aa18
changes requested by reviewer
desmax74 May 25, 2020
5489c7b
versions come from release/tag files
desmax74 May 26, 2020
1fae857
specified exact amount of ram and added pretask to remove hardcoded v…
desmax74 May 26, 2020
78f4018
enabled the tag and ram input
desmax74 May 26, 2020
18c5e10
Kogito examples with ansible automation
desmax74 May 15, 2020
da06eff
update
Jun 16, 2020
bb7c906
changes requested by reviewer
desmax74 May 18, 2020
4df8df3
changes requested by reviewer
desmax74 May 25, 2020
f904f2c
changes requested by reviewer
desmax74 May 25, 2020
0f04340
versions come from release/tag files
desmax74 May 26, 2020
ebd0d10
specified exact amount of ram and added pretask to remove hardcoded v…
desmax74 May 26, 2020
87eb4ff
update
desmax74 Jun 16, 2020
7762734
fix versions
desmax74 Jun 16, 2020
fc05cff
fix versions
desmax74 Jun 16, 2020
7138182
fix poms
desmax74 Jun 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,8 @@ shows timers (intermediate and boundary) that allows to introduce delays in proc
Every example has a directory named `operator` including the YAML files to deploy it using the Kogito Operator in an OpenShift cluster.
Please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#chap_kogito-deploying-on-openshift)
of how to install the operator to your environment in order to try it there.

## Deploying the Kogito example applications on OpenShift CRC using Ansible playbooks
danielezonca marked this conversation as resolved.
Show resolved Hide resolved

In the [Kogito Ansible folder](kogito-ansible/README.md) you find the documentation plus some external videos about how to
setup Openshift locally (CRC) and deploy the kogito examples using ansible, with few commands
57 changes: 57 additions & 0 deletions kogito-ansible/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Openshift (CRC) Kogito ansible automation

Ansible scripts to automate creation of CRC cluster and the deploy of one of the Kogito examples with just one command line.

CRC 1.10.0, and Ansible must be installed.
No previous CRC setup (no /home/{user}/.crc folder), otherwise the create script will fail, delete .crc if you want run more than once the create playbook
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make this optional. User may want to use his already CRC deployed cluster. It is probably not good to force user to remove all his previous CRC setup.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok


### Create an account on cloud.redhat.com
https://cloud.redhat.com/openshift/install and download or copy your Pull secret from the the laptop installation https://cloud.redhat.com/openshift/install/crc/installer-provisioned


### Install CRC
(If you haven't already installed)

Pre requisite on Debian/Ubuntu:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide version of Ubuntu and Debian on which you have tested these scripts.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok


Install libvirt libs on Debian/Ubuntu only:
```sh
sudo ansible-playbook ./playbook_libs.yaml
```


Download and copy CRC in the user's path (2GB),
change the app_name (my-kafka-project) in the file if you want different name
```sh
ansible-playbook ./playbook_crc.yaml
```

Configure etc/hosts (default is kafka_cluster_name: "my-cluster-kafka" and app_namespace: "my-kafka-project")
```sh
sudo ansible-playbook ./playbook_etc_hosts.yaml
```

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide setup also for Fedora.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll create two sections in the doc since is all for fedora and only the lib virt installation is the first step on ubuntu



### Install Kogito on CRC

The create playbook will create from scratch the crc setup, the project namespace, then download and install Kogito Operator and Kogito CLI.
The name of the Project to create and the Pull secret will be asked in the beginning of the run.
To use the default project name (my-kogito-project) just press enter.
```sh
ansible-playbook ./playbook_create.yaml
```
Note: The CRC start spent 10 minute on a laptop, cut to few seconds in the video recording

Video Duration: 1:39 min.
[![asciicast](https://asciinema.org/a/313700.png)](https://asciinema.org/a/313700)


To deploy one of the kogito examples, enter the name of one of the example,
at the end the browser show you the login page, the output of the deploy with the instructions to see
the logs from cli will be on the ansible output.
```sh
ansible-playbook ./playbook_deploy.yaml
```
Video Duration 27:sec
[![asciicast](https://asciinema.org/a/313703.png)](https://asciinema.org/a/313703)
55 changes: 55 additions & 0 deletions kogito-ansible/playbook_crc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
- name: Install CRC
hosts: localhost
gather_facts: true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this done by default?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, is disabled by default to save time, but to read the current user infos is needed


vars:
crc_version: "1.10.0"

tasks:

- name: Create .local/bin/
file:
path: /home/{{ansible_user_id}}/.local/bin/
state: directory

- name: Check if crc exists in /home/{{ansible_user_id}}/.local/bin/
stat:
path: "/home/{{ ansible_user_id }}/.local/bin/crc"
register: stat_result

- name: Check if crc-linux-{{crc_version}}-amd64/crc exists in /tmp/
stat:
path: "/tmp/crc-linux-{{crc_version}}-amd64/crc"
register: stat_result
when: stat_result.stat.exists == False

- name: "Download crc {{crc_version}} ~2GB, this takes time and depends on your connection speed"
get_url:
url: "https://mirror.openshift.com/pub/openshift-v4/clients/crc/{{crc_version}}/crc-linux-amd64.tar.xz"
dest: "/tmp/crc-linux-{{crc_version}}-amd64.tar.xz"
when: stat_result.stat.exists == False

- name: Extract crc-linux-{{crc_version}}-amd64.tar.xz into tmp
unarchive:
src: /tmp/crc-linux-{{crc_version}}-amd64.tar.xz
dest: /tmp
when: stat_result.stat.exists == False

- name: Check if crc-linux-{{crc_version}}-amd64/crc exists in /tmp/
stat:
path: "/tmp/crc-linux-{{crc_version}}-amd64/crc"
register: stat_result

- name: Check if crc exists in /home/{{ansible_user_id}}/.local/bin/
stat:
path: "/home/{{ ansible_user_id }}/.local/bin/crc"
register: stat_result
when: stat_result.stat.exists == True

- name: Move crc from /tmp/crc-linux-{{crc_version}}-amd64 to /home/{{ansible_user_id}}/.local/bin
command: "mv /tmp/crc-linux-{{crc_version}}-amd64/crc /home/{{ansible_user_id}}/.local/bin/"
when: stat_result.stat.exists == False

- name: crc libvirt group
shell: "crc config set skip-check-user-in-libvirt-group true"
131 changes: 131 additions & 0 deletions kogito-ansible/playbook_create.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
---
- name: Start CRC 1.10.0 and deploy Kogito Operator and CLI
hosts: localhost
gather_facts: true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need to explicitly run this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, was just to describe the version used, we could use a placeholder and print the version used instead to updated this on every update


vars:
kogito_tag: "0.10.0"
danielezonca marked this conversation as resolved.
Show resolved Hide resolved
ram: "16384" #MB
libvirt_version: "4.4.3"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this value hardcoded?

Copy link
Contributor Author

@desmax74 desmax74 May 25, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because is used in the path and you discover the version only when the crc is downloaded and unpacked, or readed from the lates json info

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've writed a version to use the latest kogito tag, but the 0.10.1 doesn't work because the cli and the operator aren't aligned (kogito 0.10.1 - kogito-cloud-operator 0.10.0)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mmm I expect this could happen in the future too so is it possible to add a kogito-operator variable to support also this use case?

ip_on_etc_hosts: 192.168.130.11
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please do not use this value which can probably change on different machine etc. It would be much better to use "virt" or "virt_net" modules to obtain info about IP address.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok

kube_password: "{{ lookup('file', '/home/{{ ansible_user_id }}/.crc/cache/crc_libvirt_{{ libvirt_version }}/kubeadmin-password') }}"

vars_prompt:
- name: "nameSpace"
default: "my-kogito-project"
prompt: "Insert your Project Name/ NameSpace"
private: "no"
- name: "PullSecret"
prompt: "Insert your Pull secret"

tasks:
- debug: msg="Project Name {{ nameSpace }}"

- name: Copy Kogito cli
get_url:
url: "https://github.com/kiegroup/kogito-cloud-operator/releases/download/{{ kogito_tag }}/kogito-cli-{{ kogito_tag }}-linux-amd64.tar.gz"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please specify variable for this with default value to make it configurable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok

dest: "/tmp/kogito-{{ kogito_tag }}-linux-amd64.tar.gz"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again please create variable for this temporary destination with default value. Or you can also consider to use "tempfile" module. https://docs.ansible.com/ansible/latest/modules/tempfile_module.html#tempfile-module

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok


- name: Extract Kogito cli archive
unarchive:
src: "/tmp/kogito-{{ kogito_tag }}-linux-amd64.tar.gz"
dest: "/tmp/"

- name: Check that oc exists in /home/{{ansible_user_id}}/.local/bin/
stat:
path: "/home/{{ ansible_user_id }}/.local/bin/kogito"
register: stat_result

- name: Creates user home kogito dir
file:
path: "/home/{{ ansible_user_id}}/.local/bin/"
state: directory
when: stat_result.stat.exists == False

- name: Move kogito from /tmp to /home/{{ansible_user_id}}/.local/bin
command: "mv /tmp/kogito /home/{{ansible_user_id}}/.local/bin/"
when: stat_result.stat.exists == False

- name: CRC setup
shell: "crc setup"
register: crc_result

- debug: msg="{{ crc_result }}"

- name: Write pull secret
copy:
content: "{{ PullSecret }}"
dest: "~/.crc/crc-pull-secret"

- name: Download Kogito Examples pom
get_url:
url: "https://raw.githubusercontent.com/kiegroup/kogito-examples/stable/pom.xml"
dest: "/tmp/examples_pom.xml"

- name: "Get Kogito Examples "
shell: xmllint --xpath '/*[local-name()="project"]/*[local-name()="modules"]' /tmp/examples_pom.xml > ~/.crc/quarkus_examples.txt
danielezonca marked this conversation as resolved.
Show resolved Hide resolved

- name: Replace modules tags
replace:
path: ~/.crc/quarkus_examples.txt
regexp: '<modules>'
replace: ''

- name: Replace module tags
replace:
path: ~/.crc/quarkus_examples.txt
regexp: '<module>'
replace: '- '

- name: Replace end module tags
replace:
path: ~/.crc/quarkus_examples.txt
regexp: '</module>'
replace: ''

- name: Replace end modules tags
replace:
path: ~/.crc/quarkus_examples.txt
regexp: '</modules>'
replace: '\n'

- name: Start CRC with {{ ram }}MB (~ 10 minutes)
shell: "crc start -m {{ ram }} -p ~/.crc/crc-pull-secret"

- name: Login crc
shell: "oc login -u kubeadmin -p {{ kube_password }} https://api.crc.testing:6443"

- name: Create {{ nameSpace }}
shell: "oc new-project {{ nameSpace }}"

- name: Use {{ nameSpace }} proect
shell: "oc project {{ nameSpace }}"

- name: Kogito use {{ nameSpace }}
shell: "kogito use-project {{ nameSpace }}"
register: kogito_use_project_result
ignore_errors: yes

- debug: msg="{{ kogito_use_project_result }}"

- name: Kogito install operator on {{ nameSpace }}
shell: "kogito install operator -p {{ nameSpace }}"
register: kogito_install_operator_result

- name: Check AvailableReplica on Kogito operator first on {{ nameSpace }}
shell: "kubectl get pods --selector=name=kogito-operator -o jsonpath='{.items[*].status.phase}'"
register: result_one

- debug: msg="{{ result_one }}"

- name: Check AvailableReplica on Kogito operator first on {{ nameSpace }} wait for up to 120 sec, poll every 10 sec, 12 times
shell: "kubectl get pods --selector=name=kogito-operator -o jsonpath='{.items[*].status.phase}'"
register: result
until: result.stdout.find("Running") != -1
async: 120
poll: 10
retries: 12

- debug: msg="Project Name {{ nameSpace }}"

- debug: msg="Your Kube Password is {{ kube_password }}"
55 changes: 55 additions & 0 deletions kogito-ansible/playbook_deploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
- name: Start CRC 1.10.0 and deploy kogito examples
hosts: localhost
gather_facts: true

vars:
libvirt_version: "4.4.3"
danielezonca marked this conversation as resolved.
Show resolved Hide resolved
ram: "16384" #MB
kube_password: "{{ lookup('file', '/home/{{ ansible_user_id }}/.crc/cache/crc_libvirt_{{ libvirt_version }}/kubeadmin-password') }}"
examples: "{{ lookup('file', '~/.crc/quarkus_examples.txt') }}"

vars_prompt:
- name: "nameSpace"
prompt: "Insert your Project Name/ NameSpace"
default: "my-kogito-project"
private: "no"

- name: "example"
prompt: "Choose the example to deploy"
default: "\n{{ examples }}"
danielezonca marked this conversation as resolved.
Show resolved Hide resolved
private: "no"

tasks:

- debug: msg="Project Name {{ nameSpace }}"

- name: Start CRC with {{ ram }}MB (~ 10 minutes)
shell: "crc start -m {{ ram }} -p ~/.crc/crc-pull-secret"

- name: Login crc
shell: "oc login -u kubeadmin -p {{ kube_password }} https://api.crc.testing:6443"
ignore_errors: yes

- name: Kogito use {{ nameSpace }}
shell: "kogito use-project {{ nameSpace }}"
register: kogito_use_project_result
ignore_errors: yes

- debug: msg="{{ kogito_use_project_result }}"

- name: Deploy {{ example }}
shell: "kogito deploy-service {{ example }} https://github.com/kiegroup/kogito-examples/ --context-dir={{ example }}"
register: install_drools_quarkus_example
ignore_errors: yes

- debug: msg="{{ install_drools_quarkus_example }}"

- debug: msg="Project Name {{ nameSpace }}"

- debug: msg="Your Kube Password is {{ kube_password }}"

- name: Open browser
shell: "crc console"


28 changes: 28 additions & 0 deletions kogito-ansible/playbook_etc_hosts.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
- name: Checks etc/hosts config
hosts: localhost

vars:
kafka_cluster_name: "my-cluster-kafka"
app_namespace: "my-kogito-project"
ip_on_etc_hosts: 192.168.130.11

tasks:

- name: Check api in hosts
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't DNS reconfigured by CRC itself.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have to check with the latest version, because with old version of crc without this manual addition on /etc/hosts the cluster was unreachable

lineinfile:
path: /etc/hosts
line: "{{ip_on_etc_hosts}} api.crc.testing"
create: yes

- name: Check oauth in hosts
lineinfile:
path: /etc/hosts
line: "{{ip_on_etc_hosts}} oauth-openshift.apps-crc.testing"
create: yes

- name: Check console in hosts
lineinfile:
path: /etc/hosts
line: "{{ip_on_etc_hosts}} console-openshift-console.apps-crc.testing"
create: yes
11 changes: 11 additions & 0 deletions kogito-ansible/playbook_libs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Install libs on Debian/Ubuntu
hosts: localhost
gather_facts: true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the reason for gather_facts here? As far as I know Ansible will gather facts automatically at start of the playbook.


tasks:

- name: install
shell: "sudo apt install qemu-kvm libvirt-daemon libvirt-daemon-system network-manager -y"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok

become: yes
when: ansible_os_family == 'Debian'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please check that os family is supported using assert module instead of silently skipping installation of libvirt libraries.
https://docs.ansible.com/ansible/latest/modules/assert_module.html#assert-module

Copy link
Contributor Author

@desmax74 desmax74 May 18, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok