Crie um arquivo ou diretório no nó gerenciado
Modifique o arquivo e copie-o para o host
## Módulo de arquivo comumente usado
blockinfile | Adicionar um bloco de texto a um arquivo existente |
cópia de | Copiar arquivos para o host gerenciado |
buscar | Copiar arquivos do host gerenciado para o nó de controle |
Arquivo | Definir atributos do arquivo |
lineinfile | Verifique se uma linha específica está em um arquivo |
Estado | Recuperar informações de status do arquivo |
sincronizar | Um empacotador para o comando rsync |
## file O módulo manipula o arquivo e o cria se ele não existir
cat file.yml
---
- name: test
hosts: web
tasks:
- name: Touch a file
file:
path: /root/file
owner: thermal
group: thermal
mode: 0640
state: touch
#
跑 结果 ## Modificar atributos do arquivo
- name: test
hosts: web
tasks:
- name: Touch a file
file:
path: /root/file
owner: thermal
group: thermal
mode: 0640
state: touch
- name: set SElinux
file:
path: /root/file
setype: samba_share_t
#Run result Esta alteração é apenas temporária, o que equivale a usar o comando chcon, e é alterada novamente após a atualização:
mudança permanente:
- name: always set SElinux
sefcontext:
target: /root/file
setype: samba_share_t
state: present
## Copiar e editar arquivos no host gerenciado
blockinfile copy buscar lineinfile
## Excluir arquivos do host gerenciado
---
- name: Delete file
hosts: all
tasks:
- name: delete
file:
dest: /root/file
state: absen #absent 即删除
## Verifique o status do arquivo no host gerenciado
Verifique a soma de verificação MD5 do arquivo
path: /root/file
checksum_algorithm: md5
register: result
- debug:
msg: "checksum is {{ result.stat.checksum }}"
Execute (o código acima é adicionado ao final do arquivo.yml)
## Sincronize o arquivo entre o nó de controle e o host gerenciado
- name: synchronize file
synchronize:
src: file
dest: /root/file
Equivalente a copiar
Use modelos jinja2 para implantar arquivos personalizados
Crie um modelo para gerenciar arquivos de maneira mais conveniente
{% EXPR%} #Expression ou lógica
{{EXPR}} #Finalmente, imprima a expressão ou o resultado para o usuário
{# COMMENT #} #Comment
## Construir modelo jinja2 O modelo
jinja2 consiste em vários elementos: dados, variáveis e expressões
. As variáveis usadas no modelo podem ser especificadas nos vars do manual
. Todos os valores no modelo usam o método da variável, que será o valor correspondente ao host gerenciado no futuro.
Exemplo alternativo : arquivo / etc / ssh / sshd_config
Porta 22 ==> Porta {{ssh_port}}
PermitRootLogin yes ==> {{root_allowed}}
## Implantar o modelo jinja2
tasks:
- name: template
template:
src: /root/sshd_template.j2
dest: /dev/ssh/sshd_config
## 控制结构#Usando o
loop
jinja2 usa a instrução for para fornecer o loop:
# 1.
{% for user in users %}
{{ user }} #user 变量将遍历 users
{% endfor %}
# 2
{% for myhost in groups['myhosts'] %} #列出 myhosts 组中所有主机
{{ myhosts }}
{% endfor %}
#Utilizar frases condicionais
{% if finished %} #只有此条件为真,才会将 result 变量的值放入文件
{{ result }}
{% endif %}
Os loops e condições do jinja2 podem ser usados apenas para escrever modelos, não em playbooks
## Filtro variável
{{output | to_json}} #Output no formato json
{{output | to_yaml}} #Output no formato ymal
{{output | from_json}} #Parse a cadeia de formato json
{{output | from_yaml} } #Parse a cadeia de caracteres do formato ymal
## Exercício
vim motd.j2
This is the system {{ ansible_facts['fqdn'] }}
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.
System owner is {{ system_owner }}.
vim motd.yml
---
- name: configure motd
hosts: all
remote_user: thermal
become: true
vars:
- system_owner: [email protected]
tasks:
- name: configure /etc/motd
template:
src: motd.j2
dest: /etc/motd
owner: root
group: root
mode: 0644
#Resumo : 1. A biblioteca do módulo de arquivo contém permissões como criar, copiar, editar, modificar e outros atributos
2. Use o modelo jinja2 para criar arquivos dinâmicos para implantar
3. O modelo jinja2 consiste em dois elementos: variáveis e expressões, usando o modelo jinja2 Quando eles são substituídos pelo valor
4. Através do filtro jinja2, as expressões de modelo podem ser convertidas de um formato de dados para outro
Gerenciar grandes projetos
Use o modo host para selecionar o host
#Utilizar curingas para corresponder a vários hosts
- hosts: '*' 匹配所有主机
- hosts: '*.example.com' 匹配所有以example。com结尾的主机
- hosts: '172.25.254.*' 匹配所有172.25.254 网段的主机
#Match host ou grupo de hosts por lista
- hosts: www1.example.com,www2.example.com,172.25.254.250
- hosts: webservers,westos 两个组
Você também pode usar curingas e listas juntos
- hosts: webservers,&westos 即属于 webserver 组,也属于 westos 组
- hosts: westos,!servera.lab.example.com 匹配 westos 组中所有主机,但是servera.lab.example.com 除外
- hosts: all,!servera.lab.example.com 所有主机除了 servera.lab.example.com
Gerenciar listas dinâmicas
O github tem muitos scripts de manifesto dinâmicos
programa de inventário de gravação dinâmica ##
converte a lista de formato INI JSON formato
de conversão
ansible-inventory -i inventory --list
Configurar Paralela
## Use garfos para configurar o
ansible paralelo em ansible. O número máximo de conexões simultâneas é controlado pelo parâmetro forks no arquivo de configuração ansible. Pode ser
visto que o padrão é 5.
Você pode usar o parâmetro -f ou --forks na linha de comando para especificar o número paralelo
## Gerenciar atualizações contínuas
Se a atualização ocorrer no servidor de balanceamento de carga, ela será reiniciada após a conclusão da atualização, o que pode fazer com que todos os servidores da web de back-end parem o serviço.
Você pode usar a palavra-chave serial para executar em lotes.
Por exemplo:
---
- name: Rolling update
hosts: webservers
serial: 2 2台2台的更新
tasks:
- name: Install apache
yum:
name: httpd
state: latest
notify: restart apache
handlers:
- name: restart apache
service:
name: httpd
state: restarted
O 'parâmetro serial tem outra vantagem: se houver um problema durante a atualização, o problema nas duas primeiras unidades é que o manual
deixará de funcionar e os servidores subseqüentes não serão executados, portanto, a alta disponibilidade do serviço é garantida'.
Incluir e importar arquivos
Playbooks grandes são mais complicados de gerenciar e podem ser gerenciados de maneira modular.Existem
dois métodos: include, import
## import playbook
Exemplo 1:
- name: configure webserver
import_playbook: web.yml
## Importar e playbook com tarefas
#Um manual de tarefas somente vim tasks.yml
- name: Install apache
yum:
name: httpd
state: latest
- name: Start Apache
service:
name: httpd
state: started
#Import task
---
- name: Install web
hosts: webservers
tasks:
- import_tasks: tasks.yml
'Ao usar a importação, quando e outras instruções condicionais são aplicadas a cada tarefa da importação; o loop não pode ser aplicado à tarefa importada'
#Include task
- name: Install web
hosts: webservers
tasks:
- include_tasks: tasks.yml 用法同于import_tasks
## Definir variáveis para reprodução e tarefas externas
Para melhorar a reutilização, podemos definir variáveis no conteúdo de tasks.yml.
Uma tarefa para instalar o pacote de software e configurar a inicialização:
- name: Install the {{ packages }}
yum:
name: "{{ packages }}"
state: latest
- name: Start the {{ service }}
service:
name: "{{ service }}"
enabled: true
state: started
Pode ser usado para importar o manual principal
tasks:
- name: Import task
import_tasks: task.yml
vars:
package: httpd
service: httpd 定义的变量。
#Gerencie experimentos abrangentes de grandes projetos:
ansible rhel*.com --list-hosts
#Same module: pacote de instalação
cat install_and_enabled.yml
- name: Install {{ packages }}
yum:
name: "{{ packages }}"
state: latest
- name: Enable and start {{ service }}
service:
name: "{{ service }}"
enabled: true
state: started
#apache configuration
cat web_tasks.yml
- name: Install and start httpd
import_tasks: install_and_enabled.yml
vars:
packages: httpd
service: httpd
- name: Configure apache
copy:
src: files/example.conf
dest: /etc/httpd/conf.d/example.conf
owner: root
group: root
mode: 0644
notify:
- restart httpd
#firewall configuration
cat fire_tasks.yml
- name: Install and start firewalld
import_tasks: install_and_enabled.yml
vars:
packages: firewalld
service: firewalld
- name: Firewall permit apache
firewalld:
service: http
immediate: true
permanent: true
state: enabled
# 主 manual
cat playbook.yml
---
- name: Install and Configure web service
hosts: rhel*.com
serial: 2 #一次只更新2台主机
tasks:
- name: Import web_tasks.yml
import_tasks: tasks/web_tasks.yml
- name: Import the firewall_tasks.yml
import_tasks: tasks/firewall_tasks.yml
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
Após a operação: As
duas primeiras
unidades são executadas primeiro ; a terceira unidade é executada uma vez.
Esta é a nossa estrutura de diretórios atual.