Skip to content

Commit e86ff7c

Browse files
authored
Add handling for signed packages (#7)
* add SUSE package fact (Molecule) * handle digests for versions older than 23.3.2.12 * fix linting (breaking-change!) * use prober variable name prefixes * ensure that signed packages are only installed if appropriate version is given
1 parent ccf4e98 commit e86ff7c

File tree

9 files changed

+69
-37
lines changed

9 files changed

+69
-37
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ No requirements.
1010

1111
| Variable | Default | Description |
1212
| -------- | ------- | ----------- |
13-
| `sentinelone_filename` | *(empty)* | Package file to install |
14-
| `sentinelone_token` | *(empty)* | Group/Site token |
15-
| `sentinelone_gpgkey` | *(empty)* | GPG signing key to import |
13+
| `sentinelone_client_filename` | *(empty)* | Package file to install |
14+
| `sentinelone_client_token` | *(empty)* | Group/Site token |
15+
| `sentinelone_client_gpgkey` | *(empty)* | GPG signing key to import |
1616

1717
## Dependencies
1818

@@ -24,8 +24,8 @@ No dependencies.
2424
- hosts: clients
2525
roles:
2626
- role: stdevel.sentinelone_client
27-
sentinelone_filename: SentinelAgent_linux_v21_10_3_3.rpm
28-
sentinelone_token: trustno1
27+
sentinelone_client_filename: SentinelAgent_linux_v21_10_3_3.rpm
28+
sentinelone_client_token: trustno1
2929
```
3030
3131
Repository installation:
@@ -34,8 +34,8 @@ Repository installation:
3434
- hosts: clients
3535
roles:
3636
- role: stdevel.sentinelone_client
37-
sentinelone_filename: https://simone.giertz.dev/SentinelAgent_linux_v13_37.deb
38-
sentinelone_token: trustno1
37+
sentinelone_client_filename: https://simone.giertz.dev/SentinelAgent_linux_v13_37.deb
38+
sentinelone_client_token: trustno1
3939
```
4040
4141
## Development / testing

defaults/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
---
2-
sentinelone_token: ''
3-
sentinelone_gpgkey: ''
2+
sentinelone_client_token: ''
3+
sentinelone_client_gpgkey: ''

molecule/default/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ In order to test the role you'll need Ansible, Molecule and a supported provider
55
If you also want to test registration, add the following line to [`converge.yml`](converge.yml):
66

77
```yml
8-
sentinelone_token: "..."
8+
sentinelone_client_token: "..."
99
```
1010
1111
Copy the SentinelONE installation files (`sentinelone_latest.deb`, `sentinelone_latest.rpm`) into this directory and run `molecule`:

molecule/default/converge.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@
1212
file_sentinelone: sentinelone_latest.rpm
1313
when: ansible_os_family == 'RedHat'
1414

15+
- name: Set SentinelONE client installation file (SUSE)
16+
ansible.builtin.set_fact:
17+
file_sentinelone: sentinelone_latest.rpm
18+
when: ansible_os_family == 'Suse'
19+
1520
roles:
1621
- role: stdevel.sentinelone_client
17-
sentinelone_filename: "{{ file_sentinelone }}"
18-
# sentinelone_token: '...'
19-
# sentinelone_gpgkey: '...'
22+
sentinelone_client_filename: "{{ file_sentinelone }}"
23+
# sentinelone_client_token: '...'
24+
# sentinelone_client_gpgkey: '...'

tasks/digest.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
- name: Gather RPM package version
3+
ansible.builtin.command: "rpm -qp --queryformat '%{VERSION}' /tmp/{{ sentinelone_client_filename | basename }}"
4+
register: sentinelone_client_rpm_version
5+
changed_when: false
6+
7+
- name: Set nodigest flag, if required
8+
ansible.builtin.set_fact:
9+
sentinelone_client_digest: '--nodigest'
10+
when:
11+
- "sentinelone_client_rpm_version.stdout is version('23.3.2.12', '<')"

tasks/install_debian.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
22
- name: Import GPG key
33
ansible.builtin.apt_key:
4-
url: "{{ sentinelone_gpgkey }}"
4+
url: "{{ sentinelone_client_gpgkey }}"
55
become: true
6-
when: sentinelone_gpgkey
6+
when: sentinelone_client_gpgkey
77

88
- name: Install package
99
ansible.builtin.apt:
10-
deb: "/tmp/{{ sentinelone_filename | basename }}"
10+
deb: "/tmp/{{ sentinelone_client_filename | basename }}"
1111
update_cache: true
1212
become: true

tasks/install_redhat.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
---
22
- name: Import GPG key
33
ansible.builtin.rpm_key:
4-
key: "{{ sentinelone_gpgkey }}"
4+
key: "{{ sentinelone_client_gpgkey }}"
55
become: true
6-
when: sentinelone_gpgkey
6+
when: sentinelone_client_gpgkey
77

8-
# Yep, we really need to use rpm directly as yum/dnf
9-
# won't install packages without digests
10-
- name: Install package
11-
ansible.builtin.command: "rpm -ivh --nodigest /tmp/{{ sentinelone_filename | basename }}"
8+
- name: Include digest tasks
9+
ansible.builtin.include_tasks: digest.yml
10+
11+
- name: Install package (digest)
12+
ansible.builtin.command: "rpm -ivh --nodigest /tmp/{{ sentinelone_client_filename | basename }}"
1213
register: rpmout
1314
changed_when:
1415
- "'Updating / installing' in rpmout.stdout"
@@ -17,3 +18,10 @@
1718
- "'is already installed' not in rpmout.stderr"
1819
ignore_errors: true
1920
become: true
21+
when: sentinelone_client_digest is defined
22+
23+
- name: Install package
24+
ansible.builtin.yum:
25+
name: "/tmp/{{ sentinelone_client_filename | basename }}"
26+
become: true
27+
when: sentinelone_client_digest is not defined

tasks/install_suse.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
---
22
- name: Import GPG key
33
ansible.builtin.rpm_key:
4-
key: "{{ sentinelone_gpgkey }}"
4+
key: "{{ sentinelone_client_gpgkey }}"
55
become: true
6-
when: sentinelone_gpgkey
6+
when: sentinelone_client_gpgkey
77

8-
# Yep, we really need to use rpm directly as zypper
9-
# won't install packages without digests
10-
- name: Install package
11-
ansible.builtin.command: "rpm -ivh --nodigest /tmp/{{ sentinelone_filename | basename }}"
8+
- name: Include digest tasks
9+
ansible.builtin.include_tasks: digest.yml
10+
11+
- name: Install package (digest)
12+
ansible.builtin.command: "rpm -ivh --nodigest /tmp/{{ sentinelone_client_filename | basename }}"
1213
register: rpmout
1314
changed_when:
1415
- "'Updating / installing' in rpmout.stdout"
@@ -17,3 +18,10 @@
1718
- "'is already installed' not in rpmout.stderr"
1819
ignore_errors: true
1920
become: true
21+
when: sentinelone_client_digest is defined
22+
23+
- name: Install package
24+
community.general.zypper:
25+
name: "/tmp/{{ sentinelone_client_filename | basename }}"
26+
become: true
27+
when: sentinelone_client_digest is not defined

tasks/main.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,33 @@
1616

1717
- name: Download installation package
1818
ansible.builtin.get_url:
19-
url: "{{ sentinelone_filename }}"
20-
dest: "/tmp/{{ sentinelone_filename | basename }}"
19+
url: "{{ sentinelone_client_filename }}"
20+
dest: "/tmp/{{ sentinelone_client_filename | basename }}"
2121
mode: 0644
22-
when: "'http' in sentinelone_filename"
22+
when: "'http' in sentinelone_client_filename"
2323

2424
- name: Copy installation package
2525
ansible.builtin.copy:
26-
src: "{{ sentinelone_filename }}"
27-
dest: "/tmp/{{ sentinelone_filename | basename }}"
26+
src: "{{ sentinelone_client_filename }}"
27+
dest: "/tmp/{{ sentinelone_client_filename | basename }}"
2828
mode: '0644'
29-
when: "'http' not in sentinelone_filename"
29+
when: "'http' not in sentinelone_client_filename"
3030

3131
- name: Include installation tasks
3232
ansible.builtin.include_tasks: "install_{{ ansible_os_family | regex_replace(' ', '_') | lower }}.yml"
3333

3434
- name: Remove installation package
3535
ansible.builtin.file:
36-
path: "/tmp/{{ sentinelone_filename | basename }}"
36+
path: "/tmp/{{ sentinelone_client_filename | basename }}"
3737
state: absent
3838

3939
- name: Set Group/Site token
40-
ansible.builtin.command: "/opt/sentinelone/bin/sentinelctl management token set {{ sentinelone_token }}"
40+
ansible.builtin.command: "/opt/sentinelone/bin/sentinelctl management token set {{ sentinelone_client_token }}"
4141
args:
4242
creates: /opt/sentinelone/.INITIALIZATION_COMPLETE
4343
become: true
4444
notify: Create initialization file
45-
when: sentinelone_token is defined and sentinelone_token != ''
45+
when: sentinelone_client_token is defined and sentinelone_client_token != ''
4646

4747
- name: Start agent
4848
ansible.builtin.command: /opt/sentinelone/bin/sentinelctl control start

0 commit comments

Comments
 (0)