AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 753156
Accepted
Sollosa
Sollosa
Asked: 2023-08-03 23:09:42 +0800 CST2023-08-03 23:09:42 +0800 CST 2023-08-03 23:09:42 +0800 CST

questões condicionais ansible

  • 772

este playbook obtém RAM total e, com base nisso, define duas variáveis, digamos A e B A é 40% da RAM total B é 60% da RAM total

tarefa é, se A maior ou igual a 32, então A deve ser 32, mas se for menor que 32, então mantenha A como resultado de 40% da RAM total o mesmo vale para B, se B for maior ou igual a 32, então B deve ser 32, mas se for menor que 32, mantenha B como resultado de 60% da RAM total

- name: get total RAM
  set_fact:
    total_ram_mb: "{{ ansible_memtotal_mb }}"

- name: calculate min & max values
  set_fact:
    A: "{{ (total_ram_mb * 0.4 / 1024) | int }}"
    B: "{{ (total_ram_mb * 0.6 / 1024) | int }}"

- debug:
    var: A

- debug:
    var: B

- name: limit min value
  set_fact:
    A: "{{ 32 if A >= 32 else A }}"

- name: limit max value
  set_fact:
    B: "{{ 32 if B >= 32 else B }}"

- debug:
    var: A

- debug:
    var: B

mas as tarefas posteriores AB são sempre definidas como 32, não importa se A é maior, igual ou menor, a memória no meu vms é 8G, não tenho certeza de onde está o problema

aqui está a saída do jogo

[root@autom ansible]# ansible-playbook -i inv.txt memory.yml

PLAY [es] ********************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [es1]
ok: [es2]

TASK [memory : get total RAM] *****************************************************************************************************************
ok: [es1]
ok: [es2]

TASK [memory : calculate min & max values] ****************************************************************************************************
ok: [es1]
ok: [es2]

TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
    "A": "3"
}
ok: [es2] => {
    "A": "3"
}

TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
    "B": "4"
}
ok: [es2] => {
    "B": "4"
}

TASK [memory : limit min value] ***************************************************************************************************************
ok: [es1]
ok: [es2]

TASK [memory : limit max value] ***************************************************************************************************************
ok: [es1]
ok: [es2]

TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
    "A": "32"
}
ok: [es2] => {
    "A": "32"
}

TASK [memory : debug] *************************************************************************************************************************
ok: [es1] => {
    "B": "32"
}
ok: [es2] => {
    "B": "32"
}
linux
  • 1 1 respostas
  • 37 Views

1 respostas

  • Voted
  1. Best Answer
    larsks
    2023-08-04T08:51:37+08:002023-08-04T08:51:37+08:00

    Qual versão do Ansible você está executando? Se eu tentar o seu playbook como está escrito, ele falhará com este erro:

    TASK [limit min value] **********************************************************************************
    fatal: [localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ 32 if A >= 32 else A }}): '>=' not supported between instances of 'str' and 'int'. '>=' not supported between instances of 'str' and 'int'"}
    

    Se eu corrigir a tarefa para executar a conversão explícita para int, assim:

    - name: limit min value
      set_fact:
        A: "{{ 32 if A|int >= 32 else A }}"
    
    - name: limit max value
      set_fact:
        B: "{{ 32 if B|int >= 32 else B }}"
    

    Em seguida, o manual parece funcionar como pretendido. Quando total_rm_mbé 4192:

    TASK [debug] ********************************************************************************************
    ok: [localhost] => {
        "A": "1"
    }
    
    TASK [debug] ********************************************************************************************
    ok: [localhost] => {
        "B": "2"
    }
    

    E quando é 63993:

    TASK [debug] ********************************************************************************************
    ok: [localhost] => {
        "A": "24"
    }
    
    TASK [debug] ********************************************************************************************
    ok: [localhost] => {
        "B": "32"
    }
    

    Isso é com Ansible versão 2.15.1.

    • 1

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve