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, vars
e vars_files
simultaneamente 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-vars
atribuiçã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.yaml
documento 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_Status
em 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 sda1
a execução, vai dev_sda1_result
escrever os resultados, em seguida, dev_sda1_result.rc
rc é devolvido no comando do estado, diferente de zero se bem-sucedida, ignore_errors
a 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, when
com and
ou or
julgamento 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 )