Manage services for the lists var (flexlm__licences)

Also allow to manage several licences on a same host (close #1)
This commit is contained in:
Jeremy Gardais 2018-02-27 12:05:11 +01:00
parent 2b531de478
commit bc5ad21d32
6 changed files with 50 additions and 39 deletions

View File

@ -3,6 +3,8 @@
### Features ### Features
* Add a way to provide vendor daemon binaries and licence file. * Add a way to provide vendor daemon binaries and licence file.
* Manage services for the lists var (flexlm__licences).
* Allow to manage several licences on a same host (close #1).
## v1.0 ## v1.0

View File

@ -4,9 +4,10 @@
2. [Role Variables](#role-variables) 2. [Role Variables](#role-variables)
3. [Example Playbook](#example-playbook) 3. [Example Playbook](#example-playbook)
4. [Configuration](#configuration) 4. [Configuration](#configuration)
5. [Development](#development) 5. [Known Issues](#known-issues)
6. [License](#license) 6. [Development](#development)
7. [Author Information](#author-information) 7. [License](#license)
8. [Author Information](#author-information)
## Overview ## Overview
@ -27,10 +28,6 @@ A role to manage Flexlm daemon.
* **flexlm__licences**: Lists to manage vendor daemon and licence files [default: `[]`]. * **flexlm__licences**: Lists to manage vendor daemon and licence files [default: `[]`].
* **flexlm__service_manage**: If Licence Manager service should be managed with this role [default: `True`]. * **flexlm__service_manage**: If Licence Manager service should be managed with this role [default: `True`].
* **flexlm__service_enabled**: If Licence Manager service should be enable at startup [default: `True`]. * **flexlm__service_enabled**: If Licence Manager service should be enable at startup [default: `True`].
* **flexlm__service_name**: Service name [default: `flexlm`].
* **flexlm__service_description**: Description of the systemd unit [default: `flexlm Licence Manager`].
* **flexlm__service_working_directory**: Working directory of the systemd unit [default: `/opt/flexlm/VENDOR`].
* **flexlm__service_unit_path**: Systemd unit path [default: `/etc/systemd/system/{{ flexlm__service_name }}.service`].
* **flexlm__service_unit_content**: Template used to generate the previous file [default: `etc/systemd/system/flexlm.service.j2`]. * **flexlm__service_unit_content**: Template used to generate the previous file [default: `etc/systemd/system/flexlm.service.j2`].
## Example Playbook ## Example Playbook
@ -43,28 +40,28 @@ A role to manage Flexlm daemon.
- role: ipr-cnrs.flexlm - role: ipr-cnrs.flexlm
``` ```
* Manage Flexlm to provide Intel Fortran: * Manage Flexlm to provide Intel Fortran (without binaries):
``` yaml ``` yaml
- hosts: intel-lm - hosts: intel-lm
roles: roles:
- role: ipr-cnrs.flexlm - role: ipr-cnrs.flexlm
flexlm__service_working_directory: '/opt/intel/bin' flexlm__licences:
flexlm__licence_file: '/opt/intel/etc/license.lic' - name: intel
flexlm__service_description: 'Licence Manager for Intel Fortran' description: 'flexlm Licence Manager for Matlab'
bin_path: '/opt/intel/bin'
lic_path: '/opt/matlab/etc/licence.lic' # need to be a file
``` ```
* Manage Flexlm to provide Matlab Licence and vendor daemon: * Manage Flexlm to provide Matlab Licence and vendor daemon binaries:
```yaml ```yaml
- hosts: matlab-lm - hosts: matlab-lm
roles: roles:
- role: ipr-cnrs.flexlm - role: ipr-cnrs.flexlm
flexlm__service_working_directory: '/opt/matlab/bin'
flexlm__licence_file: '/opt/matlab/etc/license.lic'
flexlm__service_description: 'Licence Manager for Matlab'
flexlm__licences: flexlm__licences:
- name: matlab - name: matlab
description: 'flexlm Licence Manager for Matlab'
bin_path: '/opt/matlab/bin' bin_path: '/opt/matlab/bin'
bin_src: '{{ inventory_dir + "/../resources/service/matlab-lm/bin/" }}' bin_src: '{{ inventory_dir + "/../resources/service/matlab-lm/bin/" }}'
lic_path: '/opt/matlab/etc/licence.lic' # need to be a file lic_path: '/opt/matlab/etc/licence.lic' # need to be a file
@ -76,12 +73,16 @@ A role to manage Flexlm daemon.
This role will: This role will:
* Copy the `lmgrd` and `lmutil` binaries to the client. * Copy the `lmgrd` and `lmutil` binaries to the client.
* Create a specific user to launch daemon. * Create a specific user to launch daemon.
* Set up a systemd service. [Thanks to Kalebo instructions][kalebo instruction flexlm systemd]. * Set up a systemd service (flexlm-NAME). [Thanks to Kalebo instructions][kalebo instruction flexlm systemd].
* Copy vendor daemon binaries to the host if specified. * Copy vendor daemon binaries to the host if source is specified.
* Copy licence file to the host if specified. * Copy licence file to the host if source is specified.
The `lmgrd` and `lmutil` binaries comes from [Mathworks][mathworks download url] in version **flexlm__lmgrd_version**. The `lmgrd` and `lmutil` binaries comes from [Mathworks][mathworks download url] in version **flexlm__lmgrd_version**.
## Known Issues
* If a value of one licence change in **flexlm__licences** var, all services will be restarted.
## Development ## Development
This source code comes from our [Gogs instance][flexlm source] and the [Github repo][flexlm github] exist just to be able to send the role to Ansible Galaxy… This source code comes from our [Gogs instance][flexlm source] and the [Github repo][flexlm github] exist just to be able to send the role to Ansible Galaxy…

View File

@ -16,9 +16,6 @@ flexlm__lmutil_path: '/usr/local/bin/lmutil'
# user # user
flexlm__user_name: 'flexlm' flexlm__user_name: 'flexlm'
# licence
flexlm__licence_file: '/opt/flexlm/VENDOR/licence.lic'
# Lists to manage vendor daemon and licence files. # Lists to manage vendor daemon and licence files.
# flexlm_licences: # flexlm_licences:
# - name: matlab # - name: matlab
@ -27,14 +24,12 @@ flexlm__licence_file: '/opt/flexlm/VENDOR/licence.lic'
# bin_src: '{{ inventory_dir + "/../resources/service/matlab-lm/bin/" }}' # bin_src: '{{ inventory_dir + "/../resources/service/matlab-lm/bin/" }}'
# lic_path: '/opt/matlab/etc/licence.lic' # lic_path: '/opt/matlab/etc/licence.lic'
# lic_src: '{{ inventory_dir + "/../resources/hosts/matlab-lm/opt/matlab/etc/licence.lic" }}' # lic_src: '{{ inventory_dir + "/../resources/hosts/matlab-lm/opt/matlab/etc/licence.lic" }}'
# #service: False
# ports: [ '27000', '33188' ] # not used right now
flexlm__licences: [] flexlm__licences: []
# service # service
flexlm__service_manage: True flexlm__service_manage: True
flexlm__service_enabled: True flexlm__service_enabled: True
flexlm__service_name: 'flexlm'
flexlm__service_description: 'flexlm Licence Manager'
flexlm__service_working_directory: '/opt/flexlm/VENDOR'
flexlm__service_unit_path: '/etc/systemd/system/{{ flexlm__service_name }}.service'
flexlm__service_unit_content: 'etc/systemd/system/flexlm.service.j2' flexlm__service_unit_content: 'etc/systemd/system/flexlm.service.j2'

View File

@ -1,5 +1,10 @@
--- ---
# handlers file for flexlm # handlers file for flexlm
- name: restart flexlm service - name: restart flexlm services
service: name={{ flexlm__service_name }} state=restarted service:
when: flexlm__service_manage name: '{{ "flexlm-" + item.name }}'
state: restarted
with_flattened:
- '{{ flexlm__licences }}'
when: ( flexlm__service_manage and
( item.service | d(True) ))

View File

@ -58,6 +58,7 @@
with_flattened: with_flattened:
- '{{ flexlm__licences }}' - '{{ flexlm__licences }}'
when: (item.bin_src|d()) when: (item.bin_src|d())
notify: ['restart flexlm services']
- name: Add licence file - name: Add licence file
copy: copy:
@ -69,33 +70,40 @@
with_flattened: with_flattened:
- '{{ flexlm__licences }}' - '{{ flexlm__licences }}'
when: (item.lic_src|d()) when: (item.lic_src|d())
notify: ['restart flexlm services']
# }}} # }}}
# service {{{ # service {{{
- name: SERVICE '{{ flexlm__service_name }}' systemd unit - name: Add systemd unit
template: template:
src: '{{ flexlm__service_unit_content }}' src: '{{ flexlm__service_unit_content }}'
dest: '{{ flexlm__service_unit_path }}' dest: '{{ "/etc/systemd/system/flexlm-" + item.name + ".service" }}'
owner: 'root' owner: 'root'
group: 'root' group: 'root'
mode: '0644' mode: '0644'
register: flexlm__register_systemd_service register: flexlm__register_systemd_service
notify: ['restart flexlm service'] notify: ['restart flexlm services']
when: flexlm__service_manage with_flattened:
- '{{ flexlm__licences }}'
when: ( flexlm__service_manage and
( item.service | d(True) ))
- name: Reload systemd daemons - name: Reload systemd daemons
command: systemctl daemon-reload command: systemctl daemon-reload
notify: ['restart flexlm service'] notify: ['restart flexlm services']
when: (flexlm__service_manage and when: (flexlm__service_manage and
flexlm__register_systemd_service|changed) flexlm__register_systemd_service|changed)
- name: SERVICE manage '{{ flexlm__service_name }}' - name: SERVICE manage services
service: service:
name: '{{ flexlm__service_name }}' name: '{{ "flexlm-" + item.name }}'
state: started state: started
enabled: '{{ flexlm__service_enabled }}' enabled: '{{ flexlm__service_enabled }}'
when: flexlm__service_manage with_flattened:
- '{{ flexlm__licences }}'
when: ( flexlm__service_manage and
( item.service | d(True) ))
# }}} # }}}

View File

@ -1,13 +1,13 @@
# {{ ansible_managed }} # {{ ansible_managed }}
[Unit] [Unit]
Description={{ flexlm__service_description }} Description={{ item.description | d("flexlm Licence Manager for " + item.name) }}
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
User={{ flexlm__user_name }} User={{ flexlm__user_name }}
WorkingDirectory={{ flexlm__service_working_directory }} WorkingDirectory={{ item.bin_path | d("/opt/" + item.name + "/bin") }}
ExecStart={{ flexlm__lmgrd_path }} -z -c {{ flexlm__licence_file }} ExecStart={{ flexlm__lmgrd_path }} -z -c {{ item.lic_path | d("/opt/" + item.name + "/etc/licence.lic") }}
SuccessExitStatus=15 SuccessExitStatus=15
Restart=always Restart=always
RestartSec=30 RestartSec=30