Compare commits

..

2 Commits
master ... wip

Author SHA1 Message Date
78d062c019
fixed amgmt user creation
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2019-05-09 17:37:53 +02:00
4d7087e7ca
added client shell 2019-05-09 17:37:28 +02:00
13 changed files with 59 additions and 179 deletions

View File

@ -51,3 +51,33 @@ 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,82 +5,37 @@ This software uses Ansible Playbooks to configure all connected clients.
## Available Events
Adopt a machine (which should already exist in the *hosts* db):
```bash
# signal-event client-adopt pc-99 username password
```
# signal-event client-adopt pc-99 username password
Reboot a machine:
```bash
# signal-event client-reboot pc-01
```
# signal-event client-reboot pc-01
Reboot all machines:
```bash
# signal-event client-reboot-all
```
# signal-event client-reboot-all
Force reconfiguration of a machine:
```bash
# signal-event client-reconfigure pc-02
```
# signal-event client-reconfigure pc-02
Force reconfiguration of all machines:
```bash
# signal-event client-reconfigure-all
```
# signal-event client-reconfigure-all
Shutdown a machine:
```bash
# signal-event client-shutdown pc-02
```
# signal-event client-shutdown pc-02
Shutdown all machines:
```bash
# signal-event client-shutdown-all
```
# signal-event client-shutdown-all
Update source configuration timestamp:
```bash
# signal-event client-update-lastconfig
```
# signal-event client-update-lastconfig
Wakeup a machine:
```bash
# signal-event client-wake pc-02
```
# signal-event client-wake pc-02
Wakeup all machines:
```bash
# signal-event client-wake-all
```
# 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.
```bash
# db hosts set epoptes_lab1 group members 'pc-01 pc-02 pc-03' master pc-01
# signal-event client-wake epoptes_lab1
```
# 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:
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.6
Version: 1.0
Release: 1.ns7
License: GPL
BuildArch: noarch
@ -67,7 +67,6 @@ 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
@ -97,29 +96,5 @@ if [ "$1" = 0 ]; then
fi
%changelog
* Mon Apr 27 2020 Paolo Asperti <paolo@asperti.com> - 1.0.6-1.ns7
- support for nethserver users and groups in playbooks
- nethserver hosts db available in playbooks
- small fixes
* 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
* Sun Apr 28 2019 Paolo Asperti <paolo@asperti.com> - 1.0-1.ns7
- First release for NethServer 7

View File

@ -5,8 +5,6 @@ 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

@ -1,26 +0,0 @@
#!/usr/bin/env python3
# consider refactoring this script in perl: maybe we can improve the speed
# by not calling nethserver scripts (which BTW are wrappers for LDAP queries)
import os
import json
# users list
cmd = os.popen('/usr/libexec/nethserver/list-users -s -A')
userslist = json.loads(cmd.read())
for u in userslist:
cmd = os.popen('/usr/libexec/nethserver/list-user-membership -s -A "' + u + '"')
userslist[u]['groups'] = json.loads(cmd.read())
# groups list
cmd = os.popen('/usr/libexec/nethserver/list-groups -s')
groupslist = json.loads(cmd.read())
for g in groupslist:
cmd = os.popen('/usr/libexec/nethserver/list-group-members -s "' + g + '"')
groupslist[g]['members'] = json.loads(cmd.read())
# data return
print(json.dumps({"groups":groupslist,"users":userslist}))

View File

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

View File

@ -1,16 +0,0 @@
---
- 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,14 +5,17 @@
register: esmith
delegate_to: localhost
- name: Import e-smith hosts db
e-smith:
db: hosts
register: esmith_hosts
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
- include: ntp.yml
- name: Update repositories cache and install "libreschool-client" package
apt:
name: libreschool-client
update_cache: yes

View File

@ -1,26 +0,0 @@
---
# 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

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

View File

@ -13,6 +13,7 @@
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,8 +17,6 @@ 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

1
root/usr/bin/client-shell Executable file → Normal file
View File

@ -13,5 +13,4 @@ if [ "$USER" = "" ] ; then
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}