diff --git a/CICD/plays/allnodes.yml b/CICD/plays/allnodes.yml index aef58338e152562101e7612ba95bc42410bec087..d6b0cf810216d55727fdbddf79745e98ad482e9f 100644 --- a/CICD/plays/allnodes.yml +++ b/CICD/plays/allnodes.yml @@ -4,6 +4,7 @@ # - vars/ldapConfig.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml tasks: - { name: set use shared state, set_fact: usesharedstatedir=False } - { name: set hostgroup, set_fact: hostgroup='ComputeNodes' } @@ -14,6 +15,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml - vars/vars_centos79.yml strategy: free roles: @@ -28,6 +30,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml strategy: free roles: - { role: disable_selinux, tags: [ disableselinux ] } diff --git a/CICD/plays/computenodes.yml b/CICD/plays/computenodes.yml index ae9fd61f1ce6ff7d1d05b8e9a0d83c694dd75680..1d83c1dfb0800b673eeaf1336717b0890c755ebc 100644 --- a/CICD/plays/computenodes.yml +++ b/CICD/plays/computenodes.yml @@ -5,10 +5,12 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml tasks: - include_vars: vars/passwords.yml - include_vars: vars/slurm.yml - include_vars: vars/vars.yml + - include_vars: vars/versions.yml #- include_vars: vars/c7packages.yml - { name: set use shared state, set_fact: usesharedstatedir=False } tags: [ always ] @@ -19,6 +21,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml strategy: free roles: - { role: move_homedir, tags: [ authentication, filesystems ] } @@ -37,6 +40,7 @@ gather_facts: False vars_files: - vars/vars.yml + - vars/versions.yml roles: - { role: gpu, tags: [ gpu ] } @@ -46,6 +50,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml roles: - { role: slurm_config, tags: [slurm, slurm_config] } diff --git a/CICD/plays/mgmtnodes.yml b/CICD/plays/mgmtnodes.yml index 3f915a583ec64d8f502d90ddba8b055e1f2ad151..50780e2dec5d1961431c999714b0b952b5be67a4 100644 --- a/CICD/plays/mgmtnodes.yml +++ b/CICD/plays/mgmtnodes.yml @@ -9,6 +9,7 @@ - vars/slurm.yml - vars/vars.yml - vars/vars_centos79.yml + - vars/versions.yml tasks: - { name: unmount vdb if absent, mount: { path: "/mnt", src: "/dev/vdb", state: absent}, when: 'hostvars[inventory_hostname]["ansible_devices"]["vdb"] is not defined', become: true } @@ -23,6 +24,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml roles: # - { role: ldapclient, tags: [ authentication ] } # - { role: ssh-password-login } diff --git a/CICD/plays/nfssqlnodes.yml b/CICD/plays/nfssqlnodes.yml index 72d2d18181e2ad7f39c0f51c02d26e952a593ce3..9c123ca6bcd3567698b3d515a628ae85c0dce899 100644 --- a/CICD/plays/nfssqlnodes.yml +++ b/CICD/plays/nfssqlnodes.yml @@ -14,6 +14,7 @@ - include_vars: vars/passwords.yml - include_vars: vars/slurm.yml - include_vars: vars/vars.yml + - include_vars: vars/versions.yml - include_vars: vars/vars_centos79.yml - { name: set hostgroup, set_fact: hostgroup='ManagementNodes' } - { name: set use shared state, set_fact: usesharedstatedir=True } @@ -24,6 +25,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml pre_tasks: - { name: set hostgroup, set_fact: hostgroup='SQLNodes', tags: [ always ] } - { name: set use shared state, set_fact: usesharedstatedir=True, tags: [ always ] } @@ -33,6 +35,7 @@ - vars/passwords.yml - vars/slurm.yml - vars/vars.yml + - vars/versions.yml - vars/vars_centos79.yml strategy: free gather_facts: True diff --git a/CICD/vars/versions.yml b/CICD/vars/versions.yml new file mode 100644 index 0000000000000000000000000000000000000000..8251f7fb436598f75e118085986079e820fe2ae8 --- /dev/null +++ b/CICD/vars/versions.yml @@ -0,0 +1,23 @@ +nhc_version: 1.4.2 +nhc_src_url: https://codeload.github.com/mej/nhc/tar.gz/refs/tags/1.4.2 +nhc_src_checksum: "sha1:766762d2c8cd81204b92d4921fb5b66616351412" +nhc_src_dir: /opt/src/nhc-1.4.2 +nhc_dir: /opt/nhc-1.4.2 + +slurm_version: 20.02.6 +slurm_src_url: https://github.com/SchedMD/slurm/archive/refs/tags/slurm-20-02-6-1.tar.gz +slurm_src_checksum: "sha1:99f635b528ce120f10efd432019b3b7270a0f9b3" +slurm_src_dir: /opt/src/slurm-slurm-20-02-6-1 +slurm_dir: /opt/slurm-20.02.6 + +ucx_version: 1.8.0 +ucx_src_url: https://github.com/openucx/ucx/releases/download/v1.8.0/ucx-1.8.0.tar.gz +ucx_src_checksum: "sha1:96f2fe1918127edadcf5b195b6532da1da3a74fa" +ucx_src_dir: /opt/src/ucx-1.8.0 +ucx_dir: /opt/ucx-1.8.0 + +munge_version: 0.5.14 +munge_src_url: https://github.com/dun/munge/archive/refs/tags/munge-0.5.14.tar.gz +munge_src_checksum: "sha1:70f6062b696c6d4f17b1d3bdc47c3f5eca24757c" +munge_dir: /opt/munge-0.5.14 +munge_src_dir: /opt/src/munge-munge-0.5.14 diff --git a/roles/mysql/vars/Ubuntu_20.yml~ b/roles/mysql/vars/Ubuntu_20.yml~ new file mode 100644 index 0000000000000000000000000000000000000000..26aabeb9dda2463930a2b26fb8c9bcdf1307eab5 --- /dev/null +++ b/roles/mysql/vars/Ubuntu_20.yml~ @@ -0,0 +1,17 @@ +server_packages: + - python + - python-dev + - libmariadb-dev + - python3-pip + - libapache2-mod-wsgi + - python3-mysql.connector + - mariadb-server + - python3-mysqldb + - python3-pymysql + +client_packages: + - python3 + - python3-pymysql + - mariadb-client + +sqlServiceName: "mariadb" diff --git a/roles/nhc/tasks/main.yml b/roles/nhc/tasks/main.yml index 54e81b60b09988293455207727b07bda4367c5a8..f254a27e69b402b72a959870afd7be85bd7dc977 100644 --- a/roles/nhc/tasks/main.yml +++ b/roles/nhc/tasks/main.yml @@ -24,21 +24,21 @@ get_url: url: "{{ nhc_src_url }}" checksum: "{{ nhc_src_checksum }}" - dest: "{{ src_base }}/nhc.tar.gz" + dest: "{{ nhc_src_dir | dirname }}/nhc.tar.gz" when: nhc_src_checksum is defined - name: download nhc get_url: url: "{{ nhc_src_url }}" - dest: "{{ src_base }}/nhc.tar.gz" + dest: "{{ nhc_src_dir | dirname }}/nhc.tar.gz" when: nhc_src_checksum is not defined - name: unarchive nhc unarchive: args: - src: "{{ src_base }}/nhc.tar.gz" + src: "{{ nhc_src_dir | dirname}}/nhc.tar.gz" copy: no - dest: "{{ src_base }}" + dest: "{{ nhc_src_dir | dirname }}" creates: "{{ nhc_src_dir }}/autogen.sh" when: not nhc_binary.stat.exists diff --git a/roles/nhc/tasks/main.yml~ b/roles/nhc/tasks/main.yml~ new file mode 100644 index 0000000000000000000000000000000000000000..54e81b60b09988293455207727b07bda4367c5a8 --- /dev/null +++ b/roles/nhc/tasks/main.yml~ @@ -0,0 +1,91 @@ +--- +- name: define nhc_src_url + set_fact: + nhc_src_url: "http://consistency0/src/{{ nhc_version }}.tar.gz" + when: nhc_src_url is not defined + +- name: check existing installation + stat: path="{{ nhc_dir }}/sbin/nhc" + register: nhc_binary + +- name: install automake + yum: name=automake state=present + become: true + become_user: root + when: ansible_os_family=='RedHat' + +- name: install automake + apt: name=automake state=present + become: true + become_user: root + when: ansible_os_family=='Debian' + +- name: download nhc + get_url: + url: "{{ nhc_src_url }}" + checksum: "{{ nhc_src_checksum }}" + dest: "{{ src_base }}/nhc.tar.gz" + when: nhc_src_checksum is defined + +- name: download nhc + get_url: + url: "{{ nhc_src_url }}" + dest: "{{ src_base }}/nhc.tar.gz" + when: nhc_src_checksum is not defined + +- name: unarchive nhc + unarchive: + args: + src: "{{ src_base }}/nhc.tar.gz" + copy: no + dest: "{{ src_base }}" + creates: "{{ nhc_src_dir }}/autogen.sh" + when: not nhc_binary.stat.exists + +- name: build nhc + shell: ./autogen.sh && ./configure --prefix={{ nhc_dir }} && make + args: + chdir: "{{ nhc_src_dir }}" + creates: "{{ nhc_src_dir }}/configure" + when: not nhc_binary.stat.exists + +- name: install nhc + shell: make install + become: true + args: + chdir: "{{ nhc_src_dir }}" + when: not nhc_binary.stat.exists + +- name: ensure sysconfig dir exists + file: dest=/etc/sysconfig state=directory owner=root group=root mode=755 + become: true + +- name: copy nhc sysconfig script + template: dest=/etc/sysconfig/nhc src=nhc.sysconfig.j2 mode=644 + become: true + +- name: copy nhc log rotate script + template: dest=/etc/logrotate.d/nhc src=nhclog.j2 mode=644 + become: true + +- name: install nhc config file + copy: src=nhc.conf dest={{ nhc_dir }}/etc/nhc/{{ nhc_config_file }} + become: true + become_user: root + +- name: install nhc scripts + copy: src=scripts/ dest={{ nhc_dir }}/etc/nhc/scripts/ + become: true + become_user: root + +#test NAT is working by pinging an external address, i.e. a license server, or by default Google Public DNS +- set_fact: + EXTERNAL_IP_ADDRESS: "8.8.8.8" + when: EXTERNAL_IP_ADDRESS is undefined + +- name: install nhc NAT check + template: dest="{{ nhc_dir }}/etc/nhc/scripts/check_nat.nhc" src=check_nat.nhc.j2 + become: true + become_user: root + when: ADD_NHC_NAT_CHECK is defined + diff --git a/roles/slurm-common/tasks/installMungeFromSource.yml b/roles/slurm-common/tasks/installMungeFromSource.yml index 696031785033c7144fc7ee926d5203a15b3c4b77..16383cd5c46cffe726a7a53edf909e1033c00987 100644 --- a/roles/slurm-common/tasks/installMungeFromSource.yml +++ b/roles/slurm-common/tasks/installMungeFromSource.yml @@ -2,6 +2,16 @@ stat: path="{{ munge_dir }}/bin/munge" register: munge_binary +- name: Create munge directory if it does not exist + file: + path: "{{ munge_src_dir | dirname }}" + state: directory + owner: "{{ ansible_user }}" + group: root + mode: u=rwx,g=rx,o=rx + become: true + + - name: define munge_src_url set_fact: munge_src_url: "http://consistency0/src/munge-{{ munge_version }}.tar.bz2" @@ -11,25 +21,25 @@ get_url: url: "{{ munge_src_url }}" checksum: "{{ munge_src_checksum }}" - dest: "{{ src_base }}/munge_src" + dest: "{{ munge_src_dir | dirname }}/munge_src" when: munge_src_checksum is defined - name: download munge get_url: url: "{{ munge_src_url }}" - dest: "{{ src_base }}/munge_src" + dest: "{{ munge_src_dir | dirname }}/munge_src" when: munge_src_checksum is not defined - name: unarchive munge unarchive: - src: "{{ src_base }}/munge_src" - dest: "{{ src_base }}" + src: "{{ munge_src_dir | dirname }}/munge_src" + dest: "{{ munge_src_dir | dirname }}" remote_src: yes creates: "{{ munge_src_dir }}" - name: build munge - shell: ./configure --prefix={{ munge_dir }} && make + shell: ./bootstrap && ./configure --prefix={{ munge_dir }} && make args: chdir: "{{ munge_src_dir }}" creates: "{{ munge_src_dir }}/src/munge/munge" diff --git a/roles/slurm-common/tasks/installMungeFromSource.yml~ b/roles/slurm-common/tasks/installMungeFromSource.yml~ new file mode 100644 index 0000000000000000000000000000000000000000..9d3b973d81778515a4b3a5c03b3d4fda161df75e --- /dev/null +++ b/roles/slurm-common/tasks/installMungeFromSource.yml~ @@ -0,0 +1,80 @@ +- name: test if munge is already isntalled + stat: path="{{ munge_dir }}/bin/munge" + register: munge_binary + +- name: Create munge directory if it does not exist + file: + path: "{{ munge_src_dir | dirname }}" + state: directory + owner: "{{ ansible_user }}" + group: root + mode: u=rwx,g=rx,o=rx + become: true + + +- name: define munge_src_url + set_fact: + munge_src_url: "http://consistency0/src/munge-{{ munge_version }}.tar.bz2" + when: munge_src_url is not defined + +- name: download munge + get_url: + url: "{{ munge_src_url }}" + checksum: "{{ munge_src_checksum }}" + dest: "{{ munge_src_dir | dirname }}/munge_src" + when: munge_src_checksum is defined +- name: download munge + get_url: + url: "{{ munge_src_url }}" + dest: "{{ munge_src_dir | dirname }}/munge_src" + when: munge_src_checksum is not defined + + +- name: unarchive munge + unarchive: + src: "{{ munge_src_dir | dirname }}/munge_src" + dest: "{{ munge_src_dir | dirname }}" + remote_src: yes + creates: "{{ munge_src_dir }}" + + +- name: build munge + shell: ./bootstrap ; ./configure --prefix={{ munge_dir }} && make + args: + chdir: "{{ munge_src_dir }}" + creates: "{{ munge_src_dir }}/src/munge/munge" + when: not munge_binary.stat.exists + +- name: install munge + shell: make install + become: true + args: + chdir: "{{ munge_src_dir }}" + creates: "{{ munge_dir }}/bin/munge" + when: not munge_binary.stat.exists + +- name: set use_systemd Redhat + set_fact: + use_systemd: True + when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and ( ansible_distribution_major_version == "7") + +- name: set use_systemd Debian + set_fact: + use_systemd: True + when: ansible_os_family == "Debian" + +- name: copy init script + template: dest=/etc/init.d/munge src=munge.initd.j2 mode=755 + become: true + register: systemd_script_installed + when: use_systemd is not defined + +- name: copy slurm init script if OS contains systemd + template: dest=/etc/systemd/system/munge.service src=munge.service.j2 mode=644 + become: true + when: use_systemd is defined + +- name: reload systemd + shell: systemctl daemon-reload + become: true + when: use_systemd is defined and systemd_script_installed.changed diff --git a/roles/slurm-common/tasks/installSlurmFromSource.yml b/roles/slurm-common/tasks/installSlurmFromSource.yml index 1754c3c312fa8d1e5a1a7cc58ee26c31e99a5e08..43a744bd2099874b1e2f0568243f2243130052e3 100644 --- a/roles/slurm-common/tasks/installSlurmFromSource.yml +++ b/roles/slurm-common/tasks/installSlurmFromSource.yml @@ -10,7 +10,7 @@ - name: Create ucx directory if it does not exist file: - path: "{{ src_base }}" + path: "{{ ucx_src_dir | dirname }}" state: directory owner: "{{ ansible_user }}" group: root @@ -35,18 +35,18 @@ get_url: url: "{{ slurm_src_url }}" checksum: "{{ slurm_src_checksum }}" - dest: "{{ src_base }}/slurm_src" + dest: "{{ slurm_src_dir | dirname }}/slurm_src" when: slurm_src_checksum is defined - name: download slurm get_url: url: "{{ slurm_src_url }}" - dest: "{{ src_base }}/slurm_src" + dest: "{{ slurm_src_dir | dirname }}/slurm_src" when: slurm_src_checksum is not defined - name: unarchive slurm unarchive: - src: "{{ src_base }}/slurm_src" - dest: "{{ src_base }}" + src: "{{ slurm_src_dir | dirname }}/slurm_src" + dest: "{{ slurm_src_dir | dirname }}" remote_src: yes creates: "{{ slurm_src_dir }}" @@ -73,20 +73,20 @@ get_url: url: "{{ ucx_src_url }}" checksum: "{{ ucx_src_checksum }}" - dest: "{{ src_base }}/ucx_src" + dest: "{{ ucx_src_dir | dirname }}/ucx_src" when: ucx_src_checksum is defined - name: download ucx get_url: url: "{{ ucx_src_url }}" - dest: "{{ src_base }}/ucx_src" + dest: "{{ ucx_src_dir | dirname }}/ucx_src" when: ucx_src_checksum is not defined - name: unarchive ucx unarchive: args: - src: "{{ src_base }}/ucx_src" + src: "{{ ucx_src_dir | dirname }}/ucx_src" copy: no - dest: "{{ src_base }}" + dest: "{{ ucx_src_dir | dirname }}" creates: "{{ ucx_src_dir }}" become: true register: newucx diff --git a/roles/slurm-common/tasks/installSlurmFromSource.yml~ b/roles/slurm-common/tasks/installSlurmFromSource.yml~ new file mode 100644 index 0000000000000000000000000000000000000000..1754c3c312fa8d1e5a1a7cc58ee26c31e99a5e08 --- /dev/null +++ b/roles/slurm-common/tasks/installSlurmFromSource.yml~ @@ -0,0 +1,171 @@ +- name: define ucx_src_url + set_fact: + ucx_src_url: "http://consistency0/src/ucx_1_8_0.tar.gz" + when: ucx_src_url is not defined + +- name: define slurm_src_url + set_fact: + slurm_src_url: "http://consistency0/src/slurm-{{ slurm_version }}.tar.bz2" + when: slurm_src_url is not defined + +- name: Create ucx directory if it does not exist + file: + path: "{{ src_base }}" + state: directory + owner: "{{ ansible_user }}" + group: root + mode: u=rwx,g=rx,o=rx + become: true + +- name: remove all install + file: + path: "{{ slurm_src_dir }}" + state: absent + become: true + when: force_slurm_recompile is defined + +- name: remove all install + file: + path: "{{ slurm_dir }}" + state: absent + become: true + when: force_slurm_recompile is defined + +- name: download slurm + get_url: + url: "{{ slurm_src_url }}" + checksum: "{{ slurm_src_checksum }}" + dest: "{{ src_base }}/slurm_src" + when: slurm_src_checksum is defined +- name: download slurm + get_url: + url: "{{ slurm_src_url }}" + dest: "{{ src_base }}/slurm_src" + when: slurm_src_checksum is not defined + +- name: unarchive slurm + unarchive: + src: "{{ src_base }}/slurm_src" + dest: "{{ src_base }}" + remote_src: yes + creates: "{{ slurm_src_dir }}" + +- name: stat srun + stat: path="{{ slurm_dir }}/bin/srun" + register: stat_srun + +- name: stat ucx + stat: + path: "{{ ucx_dir }}" + register: stat_ucx + +- name: Create ucx directory if it does not exist + file: + path: "{{ ucx_dir }}" + state: directory + owner: root + group: root + mode: u=rwx,g=rx,o=rx + become: true + when: not stat_ucx.stat.exists + +- name: download ucx + get_url: + url: "{{ ucx_src_url }}" + checksum: "{{ ucx_src_checksum }}" + dest: "{{ src_base }}/ucx_src" + when: ucx_src_checksum is defined +- name: download ucx + get_url: + url: "{{ ucx_src_url }}" + dest: "{{ src_base }}/ucx_src" + when: ucx_src_checksum is not defined + +- name: unarchive ucx + unarchive: + args: + src: "{{ src_base }}/ucx_src" + copy: no + dest: "{{ src_base }}" + creates: "{{ ucx_src_dir }}" + become: true + register: newucx + +- name: install ucx + shell: "./contrib/configure-release --prefix={{ ucx_dir }} && make -j8 && make install" + args: + chdir: "{{ ucx_src_dir }}" + creates: "{{ ucx_dir }}/bin/ucx_info" + become: true + # when: not stat_ucx.stat.exists + +- name: configure slurm centos + command: "{{ slurm_src_dir }}/configure --prefix={{ slurm_dir }} --with-munge={{ munge_dir }} --enable-pam --with-pmix={{ pmix_dir }} --with-ucx={{ ucx_dir }}" + args: + creates: "{{ slurm_dir }}/bin/srun" + chdir: "{{ slurm_src_dir }}" + when: + - force_slurm_recompile is defined or not stat_srun.stat.exists + - ansible_os_family == 'RedHat' + +- name: configure slurm ubuntu + command: "{{ slurm_src_dir }}/configure --prefix={{ slurm_dir }} --with-munge={{ munge_dir }} --enable-pam --with-pmix --with-ucx={{ ucx_dir }}" + args: + creates: "{{ slurm_dir }}/bin/srun" + chdir: "{{ slurm_src_dir }}" + when: + - force_slurm_recompile is defined or not stat_srun.stat.exists + - ansible_os_family == 'Debian' + +- name: build slurm + command: make + args: + creates: "{{ slurm_dir }}/bin/srun" + chdir: "{{ slurm_src_dir }}" + when: force_slurm_recompile is defined or not stat_srun.stat.exists + +- name: install slurm + shell: make install + become: true + args: + chdir: "{{ slurm_src_dir }}" + creates: "{{ slurm_dir }}/bin/srun" + when: force_slurm_recompile is defined or not stat_srun.stat.exists + +- name: build pam_slurm + shell: "make && make install" + args: + chdir: "{{ slurm_src_dir }}/contribs/pam" + when: force_slurm_recompile is defined or not stat_srun.stat.exists + become: true + +- name: build pam_slurm_adopt + make: + chdir: "{{ slurm_src_dir }}/contribs/pam_slurm_adopt" + when: force_slurm_recompile is defined or not stat_srun.stat.exists + +- name: install pam_slurm_adopt + make: + chdir: "{{ slurm_src_dir }}/contribs/pam_slurm_adopt" + target: install + when: force_slurm_recompile is defined or not stat_srun.stat.exists + become: true + +- name: remove exist-slurm-latest-link + file: + path: /opt/slurm-latest + state: absent + become: true + when: force_slurm_recompile is defined or not stat_srun.stat.exists + +- name: put slurm-latest-link + file: + src: "{{ slurm_dir }}" + dest: /opt/slurm-latest + state: link + become: true + when: force_slurm_recompile is defined or not stat_srun.stat.exists + +- name: add slurm log rotate config + template: src=slurmlog.j2 dest=/etc/logrotate.d/slurm mode=644 + become: true