Compare commits
13 Commits
Author | SHA1 | Date |
---|---|---|
Paolo Asperti | 91feefde8c | |
Paolo Asperti | 9979a79770 | |
Paolo Asperti | 93c6897b34 | |
Paolo Asperti | 73a1a0ed64 | |
Paolo Asperti | 48f3dee82f | |
Paolo Asperti | 3b8eec9981 | |
Paolo Asperti | 3230e28bc6 | |
Paolo Asperti | 89758cb050 | |
Paolo Asperti | 7fadae6fe6 | |
Paolo Asperti | 294295fd41 | |
Paolo Asperti | 773c4c8dd4 | |
Paolo Asperti | debd737d85 | |
Paolo Asperti | 20f51f3aba |
71
README.md
71
README.md
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Summary: LibreSchool Client Manager
|
||||
Name: libreschool-client-manager
|
||||
Version: 1.0.1
|
||||
Version: 1.0.6
|
||||
Release: 1.ns7
|
||||
License: GPL
|
||||
BuildArch: noarch
|
||||
|
@ -97,5 +97,29 @@ if [ "$1" = 0 ]; then
|
|||
fi
|
||||
|
||||
%changelog
|
||||
* Sun Apr 28 2019 Paolo Asperti <paolo@asperti.com> - 1.0-1.ns7
|
||||
* 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
|
||||
- First release for NethServer 7
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
#!/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}))
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
- name: restart systemd-timesyncd
|
||||
service: name=systemd-timesyncd state=restarted
|
||||
|
|
@ -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
|
|
@ -5,17 +5,14 @@
|
|||
register: esmith
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Add LibreSchool signing key
|
||||
apt_key:
|
||||
url: http://repo.libreschool.org/libreschool.asc
|
||||
state: present
|
||||
- name: Import e-smith hosts db
|
||||
e-smith:
|
||||
db: hosts
|
||||
register: esmith_hosts
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Add LibreSchool repository
|
||||
apt_repository:
|
||||
repo: deb http://repo.libreschool.org/ubuntu {{ ansible_distribution_release }} main
|
||||
state: present
|
||||
- include: libreschool_repo.yml
|
||||
|
||||
- name: Update repositories cache and install "libreschool-client" package
|
||||
apt:
|
||||
name: libreschool-client
|
||||
update_cache: yes
|
||||
- include: required_packages.yml
|
||||
|
||||
- include: ntp.yml
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
|
||||
- name: Installing common required packages
|
||||
apt:
|
||||
name: [ 'debconf', 'debconf-utils' ]
|
||||
state: latest
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -13,4 +13,5 @@ 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}
|
||||
|
|
Loading…
Reference in New Issue