operação automatizada e manutenção das variáveis usadas Ansible

1, variável Manual

variáveis ​​de uso ansible, nos permitem trabalhar mais flexível

Definir a variável

Os nomes das variáveis ​​deve ser composto de letras, números, sublinhados, os nomes das variáveis ​​precisa começar com uma letra, ansible built-in palavra-chave não pode ser usado como um uso nome da variável

2, as definições das variáveis ​​Playbook

Ao usar a palavra-chave vars variáveis ​​podem ser definidas na cartilha atual, de modo que nós queremos usar uma variável, você precisa fazer referência o correspondente nome da variável, use {{name}} variável pode se referir à variável correspondente.

Uma definição simples de variáveis

- hosts: all
  vars:     #定义变量
    file_name: jsn_yaml_vars    #变量名(随意):file_name,变量的内容:jsn_yaml_vars
  tasks:    #{{ file_name }}引用上面定义的变量
  - name: 应用变量名:file_name
    file: path=/tmp/{{ file_name }} state=touch

Definir múltiplas variáveis

- hosts: all
  vars:   
    t1: v1
    t2: v2

Além da gramática acima, sequências de sintaxe também pode ser personalizado velocidade variável YAML

- hosts: all
  vars:   
    - t1: v1
    - t2: v2

Quando se define uma variável, pode também ser similar às propriedades "" definir variável

- hosts: 10.4.7.7
  vars:
    nginx:
      proxy_1: /etc/nginx/conf.d/nginx_1.proxy
      proxy_2: /etc/nginx/conf.d/nginx_2.proxy
  tasks:
  - name: task1
    file:
      path: "{{ nginx.proxy_1 }}"
      state: touch
  - name: task1
    file:
      path: "{{ nginx['proxy_2'] }}" # 第二种引用变量.属性的方法
      state: touch

Nó: Note que usamos aspas duplas no uso de variáveis, mas não usar aspas duplas ao referir-se variáveis no exemplo no início do mais, porque é a primeira instância quando a variável é referenciado, e não no início do posição path=/tmp/{{ file_name }}, por isso não precisa de aspas duplas, mas path: "{{ nginx.proxy_1 }}"no início da posição variável, você precisa de aspas duplas

Defina a variável gravada no arquivo especificado e, em seguida, referenciado no playbook em

1. Criar arquivo nginx_vars.yaml, definir a variável

nginx:
  proxy_1: /etc/nginx/conf.d/nginx_1.proxy
  proxy_2: /etc/nginx/conf.d/nginx_2.proxy

2. Depois de variáveis ​​nginx_vars.yaml definidos no arquivo, o arquivo pode ser introduzida na variável contidas na cartilha

- hosts: 10.4.7.7
  vars_files:
    - ~/nginx_vars.yaml
  tasks:
  - name: task1
    file:
      path: "{{ nginx.proxy_1 }}"
      state: touch
  - name: task1
    file:
      path: "{{ nginx['proxy_2'] }}" 
      state: touch

Usado desta forma de realização vars_filesé introduzido correspondente para o ficheiro variável palavra-chave, e, em seguida, utilizando as variáveis do processo, a palavra-chave do ficheiro podem introduzir uma variável pode ser introduzido em uma pluralidade de ficheiros de variáveis, cada arquivo necessita de ser introduzido -no início, varse vars_filessimultaneamente uso

Quando a variável de referência playbook, a execução da atribuição de variável especificado

1. Crie yaml

- hosts: all
  tasks:
  - name: Create New File
    file: path=/tmp/{{ file_name }} state=touch

Quando a execução parâmetros 2.playbook de --extra-varsatribuição especificada a uma variável

$ ansible-playbook f1.yaml --extra-vars "file_name=jsn_extra-vars"

3, registro Playbook variável

registar palavra-chave pode ser armazenado na saída especificado da variável de comando para um costume em que há um grande uso de que precisamos para julgar a implementação de uma ação ou um comando, como fazer o processamento de resposta apropriada (executar outra declaração ansible), também é usado.

registar simples e prático

1. O f1.yamldocumento tem a seguinte redacção

- hosts: 10.4.7.7
  tasks:
    - name: register vars
      shell: hostname
      register: System_Status
    - name: display vars
      debug: msg={{ System_Status.stdout }}

2. Execute playbook

[root@m01 ~]#  ansible-playbook f1.yaml

PLAY [10.4.7.7] ****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [10.4.7.7]

TASK [register vars] ***********************************************************
changed: [10.4.7.7]

TASK [display vars] ************************************************************
ok: [10.4.7.7] => {
    "msg": "web01"
}

PLAY RECAP *********************************************************************
10.4.7.7                   : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
  • O primeiro shell após a implementação, utilização registar para obter os dados System_Statusem
  • System_StatusÉ um dicionário de chave / valor
  • saída de depuração System_Status.stdout的conteúdo específico

registar exemplo produção

Sda1 I necessidade de determinar se existe, se houver uma cópia do arquivo executável

- hosts: 10.4.7.7
  tasks:
    - name:  Create a register to represent the status if the /dev/sda1 exsited
      shell: df -h  | grep sda1
      register: dev_sda1_result
      ignore_errors: True
      
    - name: Copy test.sh to all hosts
      copy: src=/root/test.sh dest=/tmp/test.sh mode=755
      when: dev_sda1_result.rc == 0 

Quando df -h | grep sda1a execução, vai dev_sda1_resultescrever os resultados, em seguida, dev_sda1_result.rc rc é devolvido no comando do estado, diferente de zero se bem-sucedida, ignore_errorsa palavra-chave deve ser definida como True, ou se o comando não for bem sucedida, isto é echo $?não 0, em seguida, declaração ansible após a instrução não será executada, fazendo com que o programa para abortar.

registo multi-condicional

Em seguida, whencom andou orjulgamento combinado. Por exemplo, quando uma das duas condições para o sucesso:

    - name: Copy test.sh to all hosts
      copy: src=/root/test.sh dest=/tmp/test.sh mode=755
      when: ( dev_sda1_result.rc == 0 ) or ( dev_sda2_result.rc == 0  )

Acho que você gosta

Origin www.cnblogs.com/jasonminghao/p/12640162.html
Recomendado
Clasificación