deploy/ansible/roles-os/1.9-kernelparameters/tasks/main.yaml (133 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # /*---------------------------------------------------------------------------8 # | | # | Role to set kernel parameters for general hardening | # | | # +------------------------------------4--------------------------------------*/ # Description: A set of common parameters recommeneded from CIS, RH and SUSE - # are applied to the host along with some distro specific params. # # Objects: # External: # parameters.yaml - parameter file # # Internal: # get_parameters_to_apply - object to store the params # applicable for a host # # Created: # # # -------------------------------------+---------------------------------------8 # Reviews: # # # # -------------------------------------+---------------------------------------8 --- # -------------------------------------+---------------------------------------8 # # Task: 1.9 - kernel parameters # # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # # <Comment Header> # # -------------------------------------+---------------------------------------8 - name: "1.9 Kernel parameters - Ensure parameters are available" ansible.builtin.include_vars: parameters.yaml - name: "1.9 Kernel parameters - Print the tier and node tier" ansible.builtin.debug: msg: - "tier is: {{ tier }}" - "node_tier is: {{ node_tier }}" # ---------------------------------------- # BEGIN # ---------------------------------------- - name: "1.9 Kernel parameters - Gather list of parameters which need to be applied" ansible.builtin.set_fact: get_parameters_to_apply: '{{ (parameters["common"] + (parameters[distribution_id] | default([]))) | unique }}' # Print Distribution ID if it is passed correctly. - name: "1.9 Kernel parameters - Display distribution_id which will be used" ansible.builtin.debug: msg: "Distribution ID: {{ distribution_id }}" verbosity: 2 # print only when -vv, otherwise you will have terminal nausea - name: "1.9 Kernel parameters - Display parameters which will be applied" ansible.builtin.debug: var: get_parameters_to_apply verbosity: 2 - name: "1.9 Kernel parameters - Set relevant kernel parameters" become: true ansible.posix.sysctl: name: "{{ item.name }}" value: "{{ item.value }}" state: "{{ item.state }}" sysctl_set: true reload: true ignoreerrors: true loop: "{{ get_parameters_to_apply }}" when: - item.tier in ["all", tier] - item.node_tier in ["all", node_tier] # Huge pages for Oracle Database VMs # SAP Note 1672954 : Usage of hugepages on a Linux system that runs an Oracle database. - name: "1.9 Kernel parameters - Oracle Specific Parameters" block: - name: "1.9 Kernel parameters - Calculate the Huge Pages when RAM < 4TB" ansible.builtin.set_fact: huge_pages: "{{ ((ansible_memory_mb.real.total * 0.68 * 1024 * 1024) / (2 * 1024 * 1024)) | round | int }}" when: ansible_memory_mb.real.total < 4194304 - name: "1.9 Kernel parameters - Calculate the Huge Pages when RAM > 4TB " ansible.builtin.set_fact: huge_pages: "{{ ((ansible_memory_mb.real.total * 0.75 * 1024 * 1024) / (2 * 1024 * 1024)) | round | int }}" when: ansible_memory_mb.real.total > 4194304 # print only when -vv, otherwise you will have terminal nausea - name: "1.9 Kernel parameters - Display Huge pages value" ansible.builtin.debug: var: huge_pages verbosity: 2 - name: "1.9 Kernel parameters - Set Huge pages parameters" become: true ansible.posix.sysctl: name: "vm.nr_hugepages" value: "{{ huge_pages }}" state: "present" sysctl_set: true reload: true ignoreerrors: true - name: "1.9 Kernel parameters - Set limits" ansible.builtin.blockinfile: path: /etc/security/limits.conf insertafter: '#@student - maxlogins 4' state: present block: | oracle soft memlock unlimited oracle hard memlock unlimited @sapsys hard nproc unlimited @sapsys soft nproc unlimited @dba hard nproc unlimited @dba soft nproc unlimited when: - node_tier in ["oracle","oracle-asm","oracle-multi-sid"] - name: "1.9 Kernel parameters - Set limits for DB2" ansible.builtin.blockinfile: path: /etc/security/limits.conf insertafter: '#@student - maxlogins 4' state: present block: | @sapsys hard nproc unlimited @sapsys soft nproc unlimited @db{{ db_sid | lower }}adm hard nproc unlimited @db{{ db_sid | lower }}adm soft nproc unlimited when: - node_tier == 'db2' - name: "1.9 Kernel parameters - Set limits for HANA" ansible.builtin.blockinfile: path: /etc/security/limits.conf insertafter: '#@student - maxlogins 4' state: present block: | @sapsys hard nproc unlimited @sapsys soft nproc unlimited @dba hard nproc unlimited @dba soft nproc unlimited when: - node_tier == 'hana' - name: "1.9 Kernel parameters - Set limits for app tier" ansible.builtin.blockinfile: path: /etc/security/limits.conf insertafter: '#@student - maxlogins 4' state: present block: | @sapsys hard nproc unlimited @sapsys soft nproc unlimited @sapsys hard nofile 65536 @sapsys soft nofile 65536 when: - node_tier in ['scs','ers','app','pas'] # ---------------------------------------- # END # ---------------------------------------- # /*----------------------------------------------------------------------------8 # | Custom kernel parameters | # +------------------------------------4---------------------------------------*/ - name: "1.9 Kernel parameters - Gather list of custom defined parameters which need to be applied" ansible.builtin.set_fact: get_custom_parameters_to_apply: '{{ ( custom_parameters[distribution_id] | default([]) + custom_parameters["common"] | default([]) ) | unique(attribute="name") | list }}' when: - custom_parameters is defined - name: "1.9 Kernel parameters - Set relevant custom defined kernel parameters" become: true ansible.posix.sysctl: name: "{{ item.name }}" value: "{{ item.value }}" state: "{{ item.state }}" sysctl_set: true reload: true ignoreerrors: true loop: "{{ get_custom_parameters_to_apply }}" when: - get_custom_parameters_to_apply is defined - item.tier in ["all", tier] - item.node_tier in ["all", node_tier] ... # /*----------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/