Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 运算符的功能如何与“ansible”匹配;设置“U事实”;及;什么时候;_Linux_Unix_Automation_Ansible_Redhat - Fatal编程技术网

Linux 运算符的功能如何与“ansible”匹配;设置“U事实”;及;什么时候;

Linux 运算符的功能如何与“ansible”匹配;设置“U事实”;及;什么时候;,linux,unix,automation,ansible,redhat,Linux,Unix,Automation,Ansible,Redhat,如何使用带有“何时”的set_事实模块来使用以下条件?我需要根据RHEL服务器中的总内存设置“shmall”值。 我需要知道操作员在Ansible中是如何工作的 - name: Total Available Memory shell: cat /proc/meminfo | grep MemTotal | awk '{print $2}' register: MemTotal # for RHEL7,SHMALL Setting should be (PHYSICAL MEMORY

如何使用带有“何时”的set_事实模块来使用以下条件?我需要根据RHEL服务器中的总内存设置“shmall”值。 我需要知道操作员在Ansible中是如何工作的

- name: Total Available Memory
shell: cat /proc/meminfo | grep MemTotal | awk '{print $2}'
register: MemTotal

    # for RHEL7,SHMALL Setting should be (PHYSICAL MEMORY – MEMORY FOR SYSTEM) / PAGE SIZE with 4096 pagesize.
- name: SHMALL value to set for memory size less than 16G
set_fact:
    shmall: 3670016
    when: (MemTotal le "16777216") | int
- name: SHMALL value to set for memory size between 16G and 32G
set_fact:
    shmall: 7340032
    when: (MemTotal gt "16777216" and  MemTotal le "33554432") | int
- name: SHMALL value to set for memory size between 32G and 64G
set_fact:
    shmall: 14680064
    when: (MemTotal gt "33554432" and  MemTotal  le "6710886") | int
- name: SHMALL value to set for memory size between 64G and 256G
set_fact:
    shmall: 57671680
    when: (MemTotal  gt "67108864" and  MemTotal  le "268435456") | int

首先,您不需要从shell获取MemTotal,您可以从获取此信息。在这种情况下,该事实称为
ansible\u memtotal\u mb
。ansible中的运算符与python运算符非常相似,下面是我的笔记本的示例playbook,总内存为3834

playbook.yml 编辑:如问题所述,添加了任务。您不需要将memtotal转换为KB,将约束转换为MBs更容易

- name: SHMALL value to set for memory size less than 16G
  set_fact:
      shmall: 3670016
      when: ansible_memtotal_mb < 16384

- name: SHMALL value to set for memory size between 16G and 32G
  set_fact:
      shmall: 7340032
      when: ansible_memtotal_mb > 16384 and ansible_memtotal_mb < 32768

- name: SHMALL value to set for memory size between 32G and 64G
  set_fact:
      shmall: 14680064
      when: ansible_memtotal_mb > 32768 and ansible_memtotal_mb < 65536

- name: SHMALL value to set for memory size between 64G and 256G
  set_fact:
      shmall: 57671680
      when: ansible_memtotal_mb > 65536 and ansible_memtotal_mb < 262144

-名称:为小于16G的内存大小设置的最小值
设定事实:
上海购物中心:3670016
时间:ansible_memtotal_mb<16384

-名称:为16G和32G之间的内存大小设置的最小值 设定事实: 上海购物中心:7340032 当:ansible_memtotal_mb>16384且ansible_memtotal_mb<32768时
-名称:为32G和64G之间的内存大小设置的最小值 设定事实: 上海商城:1468064 当:ansible_memtotal_mb>32768且ansible_memtotal_mb<65536时
-名称:为64G和256G之间的内存大小设置的最小值 设定事实: 上海购物中心:57671680 当:ansible_memtotal_mb>65536且ansible_memtotal_mb<262144时
您可以计算小数值:

---
- hosts: localhost
  vars:
    mem_gb: "{{ ansible_memtotal_mb/1024 }}"
    mem_pow2: "{{ 2 | pow(((mem_gb|int|log)/(2|log)) | round(0,'ceil')) }}"
    shmall_calculated: "{{ ((mem_pow2|int)*0.875*1024*1024*1024/4096) | int }}"
  tasks:
    - debug:
        msg: "{{ shmall_calculated }}"

我的剧本的这一部分的目的是在sysctl.conf文件中针对服务器上的物理内存设置SHMALL值。为此,我需要以kb为单位的内存。-name:Generate the memory value in kb shell:cat/proc/meminfo | grep MemTotal | awk'{print$2}'register:MemTotal-debug:msg=“{MemTotal}”-name:SHMALL value为小于16G的内存大小设置set\u事实:#SHMALL:{(((1000000*ansible_MemTotal_mb 4096)/4096)*0.4){int}”shmall:3670016当:MemTotal<16777216时-name:shmall为16G和32G之间的内存大小设置的值set\u事实:shmall:7340032当:MemTotal>16777216且MemTotal<33554432My时本部分剧本的要求是;-检查Redhat服务器的总内存并以kb为单位计算-当:MemTotal<16777216时,系统配置文件中的shmall应更新为3670016-当:MemTotal>16777216且MemTotal<33554432时,系统配置文件中的shmall:1468064应更新-当:MemTotal>33554432且MemTotal<67108864时,应在sysconfig文件中更新shmall:1468064-name:shmall值以设置小于16G的内存大小set\u事实:shmall:3670016当:ansible\u memtotal\u mb<16384谢谢@Konstantin,我已经定义了shmall值。这是我需要的条件语句名称:为16G和32G之间的内存大小设置的最小值set_事实:SHMALL:7340032当:ansible_memtotal_mb>16384和ansible_memtotal_mb<32768-名称:为32G和64G之间的内存大小设置的最小值set_事实:SHMALL:14680064当:ansible_memtotal_mb>32768和ansible_memtotal_mb<65536-名称:oracle推荐的sysctl sysctl:name:{item.name}值:{{item.value}}sysctl_文件:/etc/sysctl.d/99-sysctl.conf ignoreerrors:yes#忽略关于带有_项的未知键的错误:-{name:“kernel.shmall”,值:{shmall}
- name: SHMALL value to set for memory size less than 16G
  set_fact:
      shmall: 3670016
      when: ansible_memtotal_mb < 16384

- name: SHMALL value to set for memory size between 16G and 32G
  set_fact:
      shmall: 7340032
      when: ansible_memtotal_mb > 16384 and ansible_memtotal_mb < 32768

- name: SHMALL value to set for memory size between 32G and 64G
  set_fact:
      shmall: 14680064
      when: ansible_memtotal_mb > 32768 and ansible_memtotal_mb < 65536

- name: SHMALL value to set for memory size between 64G and 256G
  set_fact:
      shmall: 57671680
      when: ansible_memtotal_mb > 65536 and ansible_memtotal_mb < 262144
---
- hosts: localhost
  vars:
    mem_gb: "{{ ansible_memtotal_mb/1024 }}"
    mem_pow2: "{{ 2 | pow(((mem_gb|int|log)/(2|log)) | round(0,'ceil')) }}"
    shmall_calculated: "{{ ((mem_pow2|int)*0.875*1024*1024*1024/4096) | int }}"
  tasks:
    - debug:
        msg: "{{ shmall_calculated }}"