Commit 9af020c2 authored by U-PALLAS\krasinski's avatar U-PALLAS\krasinski
Browse files

iRODS

parent 9aadc769
Rôle pour iRODS
================
1. Informations diverses
- iRODS ...
- l'archive tar.gz pour Handle est présente dans le répertoire files
- l'archive est récupérée depuis
2. Les tâches
Ce rôle comprend 14 tâches:
- files: template le fichier cines.re et décompresse l'archive pour Handle.net
- packages: s'assure que les paquets iRODS, PostgreSQL 9.3, OpenJDK, etc sont bien installés
- systemd: modifie le fichier .service pour PostgreSQL 9.3, recharge le démon, et s'assure que le service est bien démarré, et actif après un redémarrage.
- group_user: création groupe et utilisateur "irods". Le mot de passe de l'utilisateur N'EST PAS en clair.
- iptables: définit quelques règles iptables et les sauvegarde dans un fichier (OBSOLETE)
- irods_users: si iRODS est bien installé, vérifie que les utilisateurs cines, cinestest et herbadrop_test n'existent pas déjà, et les crée si besoin.
- openssl: crée les certificats nécessaires à l'utilisation de PAM / LDAP
- patches: modifie plusieurs fichiers: server_config.json, config.py, core.re et /etc/pam.d/irods
- pip: installe et met à jour plusieurs paquets pip comme psycopg2-binary (configuration base PostgreSQL), pika et jsonpickle (pour scripts IngestInit.py et config.py), et pyOpenSSL pour les certificats.
- postgresql: initialisation et configuration de la base PostgreSQL "iCAT"
- repos: installation des dépôts pour iRODS et PostgreSQL (OBSOLETE)
- resources: crée les répertoires pour les données et les différentes ressources iRODS
- scripts: télécharge et copie les scripts IngestInit.py et config.py au bon endroit
- security: configure le mode SELinux du serveur à "enforcing"
3. Les templates
Ce rôle utilise un seul fichier template: templates/cines.j2. L'adresse du serveur iRODS est automatiquement configuré par la variable ansible_fqdn. Le nome de la zone iRODS est aussi variabilisé.
4. Les variables
Les variables suivantes sont définies:
- path_to_icat: chemin vers la base iCAT
- path_to_data: chemin vers les données
- path_to_checkout: répertoire de téléchargement des scripts
- database_password: test
- irods_zone: nom de la zone iRODS
- handle_version: version du logiciel pour Handle.net
- irods_unix_password: mot de passe hashé de l'utilisateur UNIX "irods"
Quelques adresses IP sont aussi en variable pour la tâche "iptables", mais elles sont certainement obsolètes aujourd'hui.
5. Lancement du playbook
```bash
ansible-playbook --key-file=/path/to/your/.ssh/id_rsa -i irods_hosts irods.yml --ask-vault-pass --vault-id irods@prompt
```
---
- name: Création groupe UNIX iRODS
group:
name: "{{ irods_unix_group_name }}"
gid: "{{ irods_unix_group_id }}"
state: present
- name: Création utilisateur UNIX iRODS
user:
name: "{{ irods_unix_user_name }}"
uid: "{{ irods_unix_user_id }}"
group: irods
state: present
password: "{{irods_unix_password}}"
#password: voir docs.ansible.com/ansible/latest/user_module.html
#mot de passe dans variable cf. sandbox10 sur keypass
...
---
- name: Template du fichier server_config.json
template:
src: templates/irods_setup.json.j2
dest: /tmp/irods_setup.json
- name: On vérifie qu'iRODS n'a pas déjà été configuré
stat:
path: /etc/irods/server_config.json
register: config
- name: Exécution du script setup_irods.py
command: /usr/bin/python setup_irods.py --json_configuration_file=/tmp/irods_setup.json
args:
chdir: /var/lib/irods/scripts
when: config.stat.exists == False
...
---
# Version Ansible de: https://redmine.pallas.cines.fr/projects/admin_dad/wiki/Installation_manuelle_d'iRODS_42x
- import_tasks: group_user.yml
- import_tasks: repos.yml
- import_tasks: packages.yml
- import_tasks: security.yml
- import_tasks: pip.yml
- import_tasks: irods_config.yml
...
---
# Installation paquets iRODS + divers
- name: Installation paquets iRODS et divers
yum:
conf_file: '/etc/yum.conf'
name:
- libselinux-python
- python-pip
- irods-server
- irods-database-plugin-postgres
...
---
- name: Installation des modules python
pip:
name:
- pip
- psycopg2-binary
state: latest
...
---
## Ajout des dépôts iRODS
- name: Ajout de la clé pour dépôt iRODS
rpm_key:
state: present
key: https://packages.irods.org/irods-signing-key.asc
validate_certs: yes
# validate_certs nécessaire ?
# TODO: gpgcheck et repo_gpgcheck off pour éviter problèmes, à régler /!\
- name: Récupération dépôt iRODS
yum_repository:
description: RENCI iRODS Repository
name: irods
file: renci-irods.yum
baseurl: https://packages.irods.org/yum/pool/centos$releasever/$basearch
enabled: yes
gpgcheck: no
gpgkey: https://packages.irods.org/irods-signing-key.asc
repo_gpgcheck: no
state: present
...
---
- name: On vérifie que le mode SELinux est enforcing
selinux:
policy: targeted
state: "{{ selinux_mode }}"
...
{
"admin_password": "{{ admin_password }}",
"service_account_environment": {
"irods_host": "{{ ansible_fqdn }}",
"irods_port": 1247,
"irods_user_name": "rods",
"irods_zone_name": "{{ irods_zone }}",
"irods_client_server_negotiation": "request_server_negotiation",
"irods_client_server_policy": "CS_NEG_REFUSE",
"irods_cwd": "/{{ irods_zone }}/home/rods",
"irods_default_hash_scheme": "SHA256",
"irods_default_resource": "{{ default_resource }}",
"irods_encryption_algorithm": "AES-256-CBC",
"irods_encryption_key_size": 32,
"irods_encryption_salt_size": 32,
"irods_encryption_num_hash_rounds": 16,
"irods_home": "/{{ irods_zone }}/home/rods",
"irods_match_hash_policy": "compatible"
},
"host_access_control_config": {
"access_entries": []
},
"hosts_config": {
"host_entries": []
},
"host_system_information": {
"service_account_user_name": "{{ irods_unix_user_name }}",
"service_account_group_name": "{{ irods_unix_group_name }}"
},
"server_config": {
"advanced_settings": {
"default_log_rotation_in_days": 5,
"default_number_of_transfer_threads": 4,
"default_temporary_password_lifetime_in_seconds": 120,
"maximum_number_of_concurrent_rule_engine_server_processes": 4,
"maximum_size_for_single_buffer_in_megabytes": 32,
"maximum_temporary_password_lifetime_in_seconds": 1000,
"rule_engine_server_execution_time_in_seconds": 120,
"rule_engine_server_sleep_time_in_seconds": 30,
"transfer_buffer_size_for_parallel_transfer_in_megabytes": 4,
"transfer_chunk_size_for_parallel_transfer_in_megabytes": 40
},
"catalog_provider_hosts": [
"{{ ansible_fqdn }}"
],
"catalog_service_role": "provider",
"default_dir_mode": "0750",
"default_file_mode": "0600",
"default_hash_scheme": "SHA256",
"default_resource_name": "{{ default_resource }}",
"environment_variables": {},
"federation": [],
"match_hash_policy": "compatible",
"negotiation_key": "{{ negotiation_key }}",
"plugin_configuration": {
"authentication": {},
"database": {
"postgres": {
"db_host": "{{ database_hostname }}",
"db_name": "{{ database_name }}",
"db_odbc_driver": "PostgreSQL",
"db_password": "{{ database_password }}",
"db_port": 5432,
"db_username": "{{ database_user }}"
}
},
"network": {},
"resource": {},
"rule_engines": [
{
"instance_name": "irods_rule_engine_plugin-irods_rule_language-instance",
"plugin_name": "irods_rule_engine_plugin-irods_rule_language",
"plugin_specific_configuration": {
"re_data_variable_mapping_set": [
"core"
],
"re_function_name_mapping_set": [
"core"
],
"re_rulebase_set": [
"core"
],
"regexes_for_supported_peps": [
"ac[^ ]*",
"msi[^ ]*",
"[^ ]*pep_[^ ]*_(pre|post)"
]
},
"shared_memory_instance": "irods_rule_language_rule_engine"
},
{
"instance_name": "irods_rule_engine_plugin-cpp_default_policy-instance",
"plugin_name": "irods_rule_engine_plugin-cpp_default_policy",
"plugin_specific_configuration": {}
}
]
},
"rule_engine_namespaces": [
""
],
"schema_name": "server_config",
"schema_validation_base_uri": "file:///var/lib/irods/configuration_schemas",
"schema_version": "v3",
"server_control_plane_encryption_algorithm": "AES-256-CBC",
"server_control_plane_encryption_num_hash_rounds": 16,
"server_control_plane_key": "{{ server_control_plane_key }}",
"server_control_plane_port": 1248,
"server_control_plane_timeout_milliseconds": 10000,
"server_port_range_end": 20199,
"server_port_range_start": 20000,
"xmsg_port": 1279,
"zone_auth_scheme": "native",
"zone_key": "{{ zone_key }}",
"zone_name": "{{ irods_zone }}",
"zone_port": 1247,
"zone_user": "rods"
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment