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

feat: Testservice now deployed via Ansible #3265

Merged
merged 7 commits into from
Jan 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions testservice/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.jar
21 changes: 21 additions & 0 deletions testservice/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
FROM --platform=linux/amd64 eclipse-temurin:17-jdk

# disable prompts from the txdata
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
build-essential \
cargo \
gcc \
software-properties-common \
unzip \
clang \
curl \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY . .

RUN ./gradlew clean
RUN ./gradlew :testservice:shadowJar
30 changes: 8 additions & 22 deletions testservice/Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,14 @@ pipeline {
expression { return sh(returnStdout: true, script: 'uname -s').contains('Linux') }
}
steps {
// Remove old files
sh "rm -rf ${HOME}/.testservice/"
sh "mkdir -p ${HOME}/.config/systemd/user/"
sh """printf \\
'[Unit]
Description=kalium-testservice
After=network.target
[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=8
WorkingDirectory=${WORKSPACE}
Environment="PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=java -Djava.library.path=${WORKSPACE}/native/libs/ -jar ${WORKSPACE}/testservice/build/libs/testservice-0.0.1-SNAPSHOT-all.jar server ${WORKSPACE}/testservice/config.yml
Restart=always
[Install]
WantedBy=default.target
' \\
> ${HOME}/.config/systemd/user/kalium-testservice.service"""
sh 'systemctl --user daemon-reload'
sh 'systemctl --user restart kalium-testservice'
ansiblePlaybook(
credentialsId: 'callingservice_debian',
disableHostKeyChecking: true,
forks: 2,
inventory: 'ansible/hosts.ini',
playbook: 'ansible/site.yml',
extras: '-verbose'
)
}
}
stage('Deploy on macOS') {
Expand Down
43 changes: 11 additions & 32 deletions testservice/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,41 +24,20 @@ java -jar testservice/build/libs/testservice-*-all.jar server testservice/config

## Installation

### Linux

Create log directory and give it the right user permissions:
```
mkdir -p /var/log/kalium-testservice
chmod <user>:<user> /var/log/kalium-testservice
```

Install systemd service as user:
```
mkdir -p ${HOME}/.config/systemd/user/
Build inside container:
```shell
docker build --platform linux/arm64 -t testservice_build_env -f testservice/Dockerfile .
docker create --name temp_container testservice_build_env
docker cp temp_container:/app/testservice/build/libs/testservice-0.0.1-SNAPSHOT-all.jar ./testservice/testservice-0.0.1-SNAPSHOT-all.jar
(optional) docker cp temp_container:/app/native/libs ./native/
docker rm temp_container
```

Create file `${HOME}/.config/systemd/user/kalium-testservice.service` with following content:
```
[Unit]
Description=kalium-testservice
After=network.target
[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=8
WorkingDirectory=${WORKSPACE}
Environment="PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=java -Djava.library.path=${WORKSPACE}/native/libs/ -jar ${WORKSPACE}/testservice/build/libs/testservice-0.0.1-SNAPSHOT-all.jar server ${WORKSPACE}/testservice/config.yml
Restart=always
[Install]
WantedBy=default.target
```
Run Ansible script with:

Restart service:
```
systemctl --user daemon-reload
systemctl --user restart kalium-testservice
```shell
cd testservice/ansible
ansible-playbook -i hosts.ini site.yml --diff
```

## Random number generation
Expand Down
5 changes: 5 additions & 0 deletions testservice/ansible/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Ansible playbook for kalium testservice

Execute with: `ansible-playbook -i hosts.ini site.yml --diff`

Run only on individual nodes: `ansible-playbook -i hosts.ini -l node018 site.yml --diff`
2 changes: 2 additions & 0 deletions testservice/ansible/hosts.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[node018]
192.168.2.18
4 changes: 4 additions & 0 deletions testservice/ansible/roles/common/files/20auto-upgrades
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
Unattended-Upgrade::OnlyOnACPower "false";
5 changes: 5 additions & 0 deletions testservice/ansible/roles/common/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- name: "Restart sshd"
service:
name: ssh
state: restarted

37 changes: 37 additions & 0 deletions testservice/ansible/roles/common/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
- name: Update package repository
when:
- ansible_facts['distribution'] == "Debian"
apt:
update_cache: true

- name: Install java and other useful packages
when:
- ansible_facts['distribution'] == "Debian"
package:
name:
- openjdk-17-jre-headless
- vim
- curl
- jq
- git
- intel-microcode
- unattended-upgrades
state: present

- name: Disallow SSH root login
lineinfile:
dest: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
state: present
validate: sshd -t -f %s
notify:
- Restart sshd

- name: Configure unattended upgrades
copy:
src: 20auto-upgrades
dest: /etc/apt/apt.conf.d/20auto-upgrades
mode: 0644
owner: root
group: root
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[Unit]
Description=kalium-testservice
After=network.target

[Service]
User=kalium
Group=kalium
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=8
WorkingDirectory=/usr/local/kalium-testservice
Environment="PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=java -Djava.library.path=/usr/local/kalium-testservice/native/libs/ -jar /usr/local/kalium-testservice/testservice.jar server /usr/local/kalium-testservice/config.yml
Restart=always

[Install]
WantedBy=default.target
88 changes: 88 additions & 0 deletions testservice/ansible/roles/kalium-testservice/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
- name: Install java and other useful packages
when:
- ansible_facts['distribution'] == "Debian"
package:
name:
- haveged
- openjdk-17-jre-headless
- libc6
state: present

- name: Enable service for random number generation
systemd:
name: haveged
daemon_reload: true
enabled: true
state: restarted

- name: Create user account
user:
name: kalium
shell: /bin/bash
state: present
groups: audio, video

- name: Ensure logs directory exists
file:
path: /var/log/kalium-testservice/
state: directory
owner: kalium
group: kalium
mode: '0755'

- name: Create directory for runtime files
file:
path: /usr/local/kalium-testservice/
state: directory
owner: kalium
group: kalium
mode: '0755'

- name: Deploy config
copy:
src: ../config.yml
dest: /usr/local/kalium-testservice/config.yml
owner: kalium
group: kalium
mode: '0644'

# Native libraries are not external anymore with core crypto
#- name: Create directory for native libs
# file:
# path: /usr/local/kalium-testservice/native/libs/
# state: directory
# owner: kalium
# group: kalium
# mode: '0755'
#
#- name: Deploy native libraries
# copy:
# src: ../../native/libs/
# dest: /usr/local/kalium-testservice/native/libs/
# owner: kalium
# group: kalium
# mode: '0644'

- name: Deploy jar
copy:
src: ../testservice-0.0.1-SNAPSHOT-all.jar
dest: /usr/local/kalium-testservice/testservice.jar
owner: kalium
group: kalium
mode: '0644'

- name: Deploy service
copy:
src: kalium-testservice.service
dest: /etc/systemd/system/kalium-testservice.service
owner: kalium
group: kalium
mode: '0644'

- name: Enable and start service
systemd:
name: kalium-testservice
daemon_reload: true
enabled: true
state: restarted

13 changes: 13 additions & 0 deletions testservice/ansible/site.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
- hosts: all
become: yes
become_user: root
gather_facts: yes
roles:
- role: common

- hosts: node018
become: yes
become_user: root
gather_facts: yes
roles:
- role: kalium-testservice
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ class InstanceService(
File.separator + ".testservice" + File.separator + instanceId
log.info("Instance $instanceId: Creating $instancePath")
val kaliumConfigs = KaliumConfigs(
encryptProteusStorage = true,
developmentApiEnabled = instanceRequest.developmentApiEnabled ?: false
)
val coreLogic = CoreLogic(instancePath, kaliumConfigs, userAgent)
Expand Down
Loading