Os 'usuários' são uma variável nativa no Ansible?

1
users:
  - name: hellouser
    password: pw
    accessToken: ""
    readonly: false
  - name: hellouser2
    password: pw2
    accessToken: ""
    readonly: true

resulta em:

fatal: [IP]: FAILED! => {"changed": false, "failed": true, "msg":
"AnsibleUndefinedVariable: 'unicode object' has no attribute 'name'"}

Quando users é alterado para users2 :

users2:
  - name: hellouser
    password: pw
    accessToken: ""
    readonly: false
  - name: hellouser2
    password: pw2
    accessToken: ""
    readonly: true

a corrida ansiosa é bem-sucedida.

Discussão

  • O problema pode ser causado devido a uma colisão entre um nativo e    variável personalizada, por ex. users como esta questão não ocorreu mais como    a variável personalizada users foi alterada para users2 . No entanto, users não foi encontrado em a documentação What Makes A Valid Variable Name :

add, append, as_integer_ratio, bit_length, capitalize, center, clear, conjugate, copy, count, decode, denominator, difference, difference_update, discard, encode, endswith, expandtabs, extend, find, format, fromhex, fromkeys, get, has_key, hex, imag, index, insert, intersection, intersection_update, isalnum, isalpha, isdecimal, isdigit, isdisjoint, is_integer, islower, isnumeric, isspace, issubset, issuperset, istitle, isupper, items, iteritems, iterkeys, itervalues, join, keys, ljust, lower, lstrip, numerator, partition, pop, popitem, real, remove, replace, reverse, rfind, rindex, rjust, rpartition, rsplit, rstrip, setdefault, sort, split, splitlines, startswith, strip, swapcase, symmetric_difference, symmetric_difference_update, title, translate, union, update, upper, values, viewitems, viewkeys, viewvalues, zfill.

  • No Puppet, é possível definir variáveis globais e locais para que não haja colisão entre variáveis nativas e personalizadas. De acordo com esta documentação , diferentes tipos de variáveis podem ser definidos em Ansible:
  • Global: this is set by config, environment variables and the command line
  • Play: each play and contained structures, vars entries, include_vars, role defaults and vars.
  • Host: variables directly associated to a host, like inventory, facts or registered task outputs

Perguntas

  1. Como evitar colisões entre variáveis nativas e personalizadas em Ansible?
  2. Existe uma lista de variáveis nativas no Ansible?
  3. Existem variáveis globais e locais no Ansible como no Puppet?
por 030 07.08.2016 / 23:22

1 resposta

0

Sem as tarefas que geraram o erro "AnsibleUndefinedVariable: 'unicode object' has no attribute 'name'" , é difícil dizer o que deu errado aqui. Não consigo reproduzir esse erro, então acho que é um bug no módulo que você está usando.

Além da já citada lista de known public attributes Não há mais regras que eu saiba. Mesmo usando known public attributes não levou a erros nos meus testes.

A Ansible tem o conceito de Variáveis mágicas , que são basicamente apenas fatos coletados pelo módulo setup . Você pode obter uma lista do magic variables executando o módulo setup no host.

Não há variáveis global e local no Ansible no sentido de types . Variáveis no Ansible têm scope . O escopo de uma variável depende de onde ela está definida. Dê uma olhada em a documentação para precedência variável .

    
por 08.08.2016 / 20:51

Tags