Compare commits

...

11 Commits

Author SHA1 Message Date
Paolo Asperti 73a1a0ed64
Fix: ini_file always returns "changed"
continuous-integration/drone/push Build is passing Details
2020-04-07 22:41:40 +02:00
Paolo Asperti 48f3dee82f
version bump
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2020-04-05 18:52:59 +02:00
Paolo Asperti 3b8eec9981
playbook split + added ntp 2020-04-05 18:50:00 +02:00
Paolo Asperti 3230e28bc6
per-host log files
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2020-04-02 01:24:30 +02:00
Paolo Asperti 89758cb050
version bump
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2020-03-08 10:27:25 +01:00
Paolo Asperti 7fadae6fe6
fix for re-adoption 2020-03-07 23:46:52 +01:00
Paolo Asperti 294295fd41
version bump
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2020-03-07 20:58:01 +01:00
Paolo Asperti 773c4c8dd4
updated readme 2020-03-07 20:53:59 +01:00
Paolo Asperti debd737d85
added some required packages 2020-03-07 20:51:26 +01:00
Paolo Asperti 20f51f3aba
fix re-adoption 2020-03-07 20:51:07 +01:00
Paolo Asperti 31d6f096cf
merge wip
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
- added client shell
- fixed amgmt user creation
- fix creation of httpd config
2020-03-01 22:22:28 +01:00
12 changed files with 168 additions and 60 deletions

View File

@ -51,33 +51,3 @@ steps:
file_exists: skip
when:
event: tag
- name: repo_upload
image: appleboy/drone-scp
settings:
source: out/*.noarch.rpm
target: /vhosts/repo.libreschool.org/https/nethserver/7/devel/x86_64/Packages/
host: repo.libreschool.org
strip_components: 1
username:
from_secret: ssh_username
key:
from_secret: ssh_key
when:
event: tag
repo: LibreSchool/libreschool-client-manager
- name: repo_upload_srpms
image: appleboy/drone-scp
settings:
source: out/*.src.rpm
target: /vhosts/repo.libreschool.org/https/nethserver/7/devel/Source/SPackages/
host: repo.libreschool.org
strip_components: 1
username:
from_secret: ssh_username
key:
from_secret: ssh_key
when:
event: tag
repo: LibreSchool/libreschool-client-manager

View File

@ -5,37 +5,82 @@ This software uses Ansible Playbooks to configure all connected clients.
## Available Events
Adopt a machine (which should already exist in the *hosts* db):
# signal-event client-adopt pc-99 username password
```bash
# signal-event client-adopt pc-99 username password
```
Reboot a machine:
# signal-event client-reboot pc-01
```bash
# signal-event client-reboot pc-01
```
Reboot all machines:
# signal-event client-reboot-all
```bash
# signal-event client-reboot-all
```
Force reconfiguration of a machine:
# signal-event client-reconfigure pc-02
```bash
# signal-event client-reconfigure pc-02
```
Force reconfiguration of all machines:
# signal-event client-reconfigure-all
```bash
# signal-event client-reconfigure-all
```
Shutdown a machine:
# signal-event client-shutdown pc-02
```bash
# signal-event client-shutdown pc-02
```
Shutdown all machines:
# signal-event client-shutdown-all
```bash
# signal-event client-shutdown-all
```
Update source configuration timestamp:
# signal-event client-update-lastconfig
```bash
# signal-event client-update-lastconfig
```
Wakeup a machine:
# signal-event client-wake pc-02
```bash
# signal-event client-wake pc-02
```
Wakeup all machines:
# signal-event client-wake-all
```bash
# signal-event client-wake-all
```
### Support for a group of machines
If you defined a group of machines, you can send signals to groups also.
# db hosts set epoptes_lab1 group members 'pc-01 pc-02 pc-03' master pc-01
# signal-event client-wake epoptes_lab1
```bash
# db hosts set epoptes_lab1 group members 'pc-01 pc-02 pc-03' master pc-01
# signal-event client-wake epoptes_lab1
```
## E-smith DB reference
The general configuration is stored in the *client-manager* key. Properties of such key are:
* *lastConfig*: timestamp of the actual configuration set
* *ManagementKeyFile*: management user's SSH public key
* *ManagementPrivateKeyFile*: management user's SSH private key
All host-specific information are stored in the *hosts* db. For each host we have:
* *sshUser*: ssh user used to connect to the host. This is set when SSH adoption is successful

View File

@ -1,6 +1,6 @@
Summary: LibreSchool Client Manager
Name: libreschool-client-manager
Version: 1.0
Version: 1.0.5
Release: 1.ns7
License: GPL
BuildArch: noarch
@ -47,7 +47,16 @@ mkdir -p %{buildroot}%{_localstatedir}/cache/client-manager
%defattr(-,root,root)
%pre
/usr/bin/getent passwd amgmt || /usr/sbin/useradd -r -g wheel -d /home/amgmt -s /sbin/nologin amgmt
/usr/bin/getent passwd amgmt || /usr/sbin/useradd -r -m -g wheel -d /home/amgmt -s /sbin/nologin amgmt
if [ ! -d /home/amgmt/.ssh ] ; then
mkdir -p /home/amgmt/.ssh
fi
chmod 0700 /home/amgmt /home/amgmt/.ssh
chown -R amgmt:wheel /home/amgmt
if [ ! -f /home/amgmt/.ssh/id_rsa ] ; then
cat /dev/zero | sudo -u amgmt ssh-keygen -q -N ""
fi
if [ "$1" = 2 ]; then
#upgrade
/usr/bin/systemctl stop client-manager >/dev/null 2>&1 || :
@ -58,6 +67,7 @@ fi
[ -e /usr/sbin/client-manager ] && [ ! -L /usr/sbin/client-manager ] && rm /usr/sbin/client-manager
[ ! -L /usr/sbin/client-manager ] && ln -s httpd /usr/sbin/client-manager
/sbin/e-smith/expand-template /etc/sudoers
[ ! -d /etc/httpd/client-manager ] && mkdir /etc/httpd/client-manager
/sbin/e-smith/expand-template /etc/httpd/client-manager/httpd.conf
/sbin/e-smith/expand-template /etc/ansible/reconfigure_clients.yml
/sbin/e-smith/signal-event runlevel-adjust
@ -87,5 +97,24 @@ if [ "$1" = 0 ]; then
fi
%changelog
* Sun Apr 28 2019 Paolo Asperti <paolo@asperti.com> - 1.0-1.ns7
* Sun Apr 5 2020 Paolo Asperti <paolo@asperti.com> - 1.0.5-1.ns7
- playbook split + added ntp
* Thu Apr 2 2020 Paolo Asperti <paolo@asperti.com> - 1.0.4-1.ns7
- per-host log files
* Sun Mar 8 2020 Paolo Asperti <paolo@asperti.com> - 1.0.3-1.ns7
- fix re-adoption
* Sat Mar 7 2020 Paolo Asperti <paolo@asperti.com> - 1.0.2-1.ns7
- fix re-adoption
- added some required packages
- updated readme
* Sun Mar 1 2020 Paolo Asperti <paolo@asperti.com> - 1.0.1-1.ns7
- added client shell
- fixed amgmt user creation
- fix creation of httpd config
* Sun Apr 28 2019 Paolo Asperti <paolo@asperti.com> - 1.0.0-1.ns7
- First release for NethServer 7

View File

@ -5,6 +5,8 @@ remote_user = amgmt
private_key_file=/home/amgmt/.ssh/id_rsa
nocows = 1
log_path = /var/log/ansible.log
bin_ansible_callbacks = yes
stdout_callback = log_plays
[privilege_escalation]
become=True

View File

@ -0,0 +1,4 @@
---
- name: restart systemd-timesyncd
service: name=systemd-timesyncd state=restarted

View File

@ -0,0 +1,16 @@
---
- name: Add LibreSchool signing key
apt_key:
url: http://repo.libreschool.org/libreschool.asc
state: present
- name: Add LibreSchool repository
apt_repository:
repo: deb http://repo.libreschool.org/ubuntu {{ ansible_distribution_release }} main
state: present
- name: Update repositories cache and install "libreschool-client" package
apt:
name: libreschool-client
update_cache: yes

View File

@ -5,17 +5,8 @@
register: esmith
delegate_to: localhost
- name: Add LibreSchool signing key
apt_key:
url: http://repo.libreschool.org/libreschool.asc
state: present
- include: libreschool_repo.yml
- name: Add LibreSchool repository
apt_repository:
repo: deb http://repo.libreschool.org/ubuntu {{ ansible_distribution_release }} main
state: present
- include: required_packages.yml
- name: Update repositories cache and install "libreschool-client" package
apt:
name: libreschool-client
update_cache: yes
- include: ntp.yml

View File

@ -0,0 +1,26 @@
---
# TODO: check for other distro, maybe we should first check if we have systemd,
# and if so, we have to properly configure it. If we don't have systemd,
# we have to install and configure ntpd
- name: Remove NTP package as we use systemd
apt:
name: [ 'ntp' ]
state: absent
- name: Setup NTP server
ini_file:
path: /etc/systemd/timesyncd.conf
section: Time
option: NTP
value: "{{ esmith.SystemName }}.{{ esmith.DomainName }}"
notify: restart systemd-timesyncd
- name: Setup Fallback NTP server
ini_file:
path: /etc/systemd/timesyncd.conf
section: Time
option: FallbackNTP
value: pool.ntp.org
notify: restart systemd-timesyncd

View File

@ -0,0 +1,7 @@
---
- name: Installing common required packages
apt:
name: [ 'debconf', 'debconf-utils' ]
state: latest

View File

@ -13,7 +13,6 @@
section: server
no_extra_spaces: yes
value: "{{ configuration_timestamp }}"
changed_when: no
notify: rerun-libreschool-client
when: lsclient_installed.rc == 0
# TODO: ini_file always return "changed" even if it's not

View File

@ -17,6 +17,8 @@ ping -c1 "$HOST" >/dev/null || (
exit 1
)
ssh-keygen -R "${HOST}"
sshpass -p "${PASS}" ssh -t -o StrictHostKeyChecking=no "${USER}@${HOST}" "whoami" || (
echo "Can't login to $HOST as $USER"
exit 1

17
root/usr/bin/client-shell Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
if [ "$1" = "" ] ; then
echo "Usage:"
echo "$0 [hostname]"
exit 1
fi
USER=$(db hosts getprop "$1" sshUser)
if [ "$USER" = "" ] ; then
echo "Can't find an user for $1"
exit 1
fi
/usr/bin/sudo -u amgmt ssh-keygen -R "${1}"
/usr/bin/sudo -u amgmt /usr/bin/ssh -o StrictHostKeyChecking=no ${USER}\@${1} ${@:2}