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 / server / Perguntas / 1134520
Accepted
user984993
user984993
Asked: 2023-06-22 09:56:15 +0800 CST2023-06-22 09:56:15 +0800 CST 2023-06-22 09:56:15 +0800 CST

Ansible envia nomes de host em uma lista para o script python

  • 772

Eu queria enviar os nomes de host da função ansible para o script python. No meu arquivo host, existem 2 hosts 1ld900 e 1ld901.

meu papel como abaixo

 ---
    - name:execute python
      script: writetoexcel.py {{ ansible_play_hosts_all | join(" ") }}
      args:
        executable: python3
      delegate_to: localhost

Mas, ao passá-lo, passe alguns "[" extras para o script python. como abaixo e também há apenas um índice na lista.

[['1ld900','1ld901']]

sem a junção, ele está enviando algum outro caractere de lixo marcado em negrito

 "[['**[u**1ld900,', '**u**1ld901**]**']]

por favor, ajude-me a enviar uma lista limpa para o script python como abaixo

["1ld900","1ld901"]
python
  • 1 1 respostas
  • 25 Views

1 respostas

  • Voted
  1. Best Answer
    Vladimir Botka
    2023-06-22T11:01:56+08:002023-06-22T11:01:56+08:00

    Resposta curta: cite o argumento

        - script: writetoexcel.py "{{ ansible_play_hosts_all|join(' ') }}"
    

    Detalhes:

    Dado o inventário

    shell> cat hosts
    cluster
    svm1
    svm2
    

    e o script Python para teste

    shell> cat test.py
    import sys
    
    
    for arg in sys.argv:
        print(arg)
    

    o manual

    shell> cat pb.yml
    - hosts: all
    
      tasks:
    
        - block:
            - script: test.py {{ ansible_play_hosts_all|join(' ') }}
              args:
                executable: python3
              delegate_to: localhost
              register: out
            - debug:
                var: out.stdout_lines
          run_once: true
    

    dá (resumido)

    TASK [debug] *****************************************************************************
    ok: [cluster] => 
      out.stdout_lines:
      - /home/admin/.ansible/tmp/ansible-tmp-1687401621.3263886-1295583-29148533099582/test.py
      - cluster
      - svm1
      - svm2
    

    O primeiro argumento é o caminho do script e os outros argumentos são todos os hosts da peça. Você deve citar o argumento na linha de comando se quiser obtê-los em um único argumento. Devido aos vários níveis de cotações, é melhor criar uma variável para esse fim

        - block:
            - script: "test.py '{{ arg }}'"
              args:
                executable: python3
              delegate_to: localhost
              register: out
              vars:
                arg: "{{ ansible_play_hosts_all|join(' ') }}"
            - debug:
                var: out.stdout_lines
          run_once: true
    

    dá (resumido)

    TASK [debug] *****************************************************************************
    ok: [cluster] => 
      out.stdout_lines:
      - /home/admin/.ansible/tmp/ansible-tmp-1687401621.8429682-1295611-212016290172502/test.py
      - cluster svm1 svm2
    
    • 2

relate perguntas

Sidebar

Stats

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

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 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