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 / 780256
Accepted
Itai Ganot
Itai Ganot
Asked: 2016-06-02 03:26:29 +0800 CST2016-06-02 03:26:29 +0800 CST 2016-06-02 03:26:29 +0800 CST

Ansible: É possível "arquivo cat" e exportar sua saída para a tela durante a reprodução de um playbook e não como depuração?

  • 772

Escrevi um manual que instala e configura o Google Authenticator por usuário.

Eu quero a última etapa do playbook para cato arquivo de configuração google_authenticator.

Usando o módulo "debug", consigo que os dados sejam exibidos na tela, mas apenas como mensagem de depuração:

TASK: [debug var=details.stdout_lines] ****************************************
ok: [localhost] => {
    "details.stdout_lines": [
        "ZKMFTE2ADYA2OYCH",
        "\"RATE_LIMIT 3 30",
        "\" DISALLOW_REUSE",
        "\" TOTP_AUTH",
        "12920994",
        "88224784",
        "69464205",
        "38144121",
        "45634120"
    ]
}

Eu li online que posso fazer algo assim:

  - name: Print to screen google authenticator details
    command: /bin/cat {{ google_authenticator_secret_file_location }}
    register: details
    tags: google_2fa_user

  - debug: msg="{{ details.stdout_lines }}"

Mas recebo um erro ao executá-lo:

TASK: [Print to screen google authenticator details] **************************
changed: [localhost]

TASK: [debug msg="{{details.stdout_lines}}"] **********************************
fatal: [localhost] => Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 532, in _executor
    exec_rc = self._executor_internal(host, new_stdin)
  File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 629, in _executor_internal
    return self._executor_internal_inner(host, self.module_name, self.module_args, inject, port, complex_args=complex_args)
  File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 815, in _executor_internal_inner
    result = handler.run(conn, tmp, module_name, module_args, inject, complex_args)
  File "/usr/lib/python2.7/dist-packages/ansible/runner/action_plugins/debug.py", line 41, in run
    kv = utils.parse_kv(module_args)
  File "/usr/lib/python2.7/dist-packages/ansible/utils/__init__.py", line 526, in parse_kv
    vargs = [x.decode('utf-8') for x in shlex.split(args, posix=True)]
  File "/usr/lib/python2.7/shlex.py", line 279, in split
    return list(lex)
  File "/usr/lib/python2.7/shlex.py", line 269, in next
    token = self.get_token()
  File "/usr/lib/python2.7/shlex.py", line 96, in get_token
    raw = self.read_token()
  File "/usr/lib/python2.7/shlex.py", line 172, in read_token
    raise ValueError, "No closing quotation"
ValueError: No closing quotation


FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************

O erro diz: "Sem cotação de fechamento", embora seja citado. Também tentei:

 - debug: msg= "{{ details.stdout_lines }}"

Alguma ideia do que poderia ser o problema?

debug ansible ansible-playbook
  • 4 4 respostas
  • 65852 Views

4 respostas

  • Voted
  1. Henrik Pingel
    2016-06-03T11:21:41+08:002016-06-03T11:21:41+08:00

    O filtro citação Jinja deve resolver o problema de citação. Use assim:

      - debug: msg="{{ details.stdout_lines | quote }}"
    

    Para a outra pergunta, não conheço um módulo para imprimir outras instruções além do debugmódulo. Você pode querer verificar se Salvar variável registrada no arquivo é uma opção. Se você deseja armazenar variáveis ​​Ansible no host do controlador, é possível fazer algo assim:

    - local_action: copy content={{ details.stdout_lines }} dest=/path/to/destination/file
    

    EDIT Preciso me corrigir um pouco. Dê uma olhada nesta questão de falha do servidor . Você pode ajustar a saída do Ansible usando a callback.displayfunção. Eu recomendo a leitura da postagem no blog vinculada .

    • 6
  2. lsd
    2016-06-02T06:23:54+08:002016-06-02T06:23:54+08:00

    Eu apostaria que o problema é que as aspas no arquivo que você está digitando são incompatíveis e bagunçam as aspas na msg. Talvez tente:

    - debug: msg="{{ details.stdout_lines | regex_escape() }"
    

    ou

    - debug: msg="{{ details.stdout_lines | regex_replace('"', '\"') }"
    

    Isso deve escapar das aspas na mensagem para que as aspas ao redor da mensagem coincidam entre si.

    Isso não foi testado (não estou em posição de testá-lo agora), mas você pode tentar rapidamente e ver.

    • 1
  3. Best Answer
    Itai Ganot
    2016-06-03T00:46:34+08:002016-06-03T00:46:34+08:00

    Pesquisei bastante na internet e verifiquei com alguns profissionais da Ansible.

    Pelo que entendi, não existe essa opção no Ansible 1.8 para redirecionar a saída do comando para a tela como saída normal em vez de saída de depuração.

    • 1
  4. Ryder
    2016-06-03T21:24:01+08:002016-06-03T21:24:01+08:00

    Fiz alguns testes no bloco de texto que você tinha acima – coloquei-o no lugar e limpei as aspas json adicionadas usando details.stdout_lines.

    Se o texto 'ruim' em seu arquivo de autenticação for sempre um líder \", então isso (testado) simplesmente funciona, produzindo praticamente a mesma saída, mas com dois pontos no lugar dessa string.

    - debug: msg="{{ details.stdout.replace('\\"',':').split('\n') }}"
    

    Agora, este é um caso de uso extremamente limitado, mas se a saída de autenticação do Google for estritamente definida aqui (e é totalmente possível que seja esse o caso), isso deve fazer o que você deseja.

    No entanto, ainda seria mais fácil e preferível usar var=details.stdout_linesapenas para obter o conteúdo aqui.

    • 0

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