operação e manutenção automatizadas possíveis (5)

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

#
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
跑 结果 ## 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


Insira a descrição da imagem aqui
#Run result Esta alteração é apenas temporária, o que equivale a usar o comando chcon, e é alterada novamente após a atualização:
Insira a descrição da imagem aqui
mudança permanente:

   - name: always set SElinux
      sefcontext:
        target: /root/file
        setype: samba_share_t
        state: present

Insira a descrição da imagem aqui
## 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)
Insira a descrição da imagem aqui
## 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

Insira a descrição da imagem aqui

#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
Insira a descrição da imagem aqui
de conversão

 ansible-inventory -i inventory --list

Insira a descrição da imagem aqui

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
Insira a descrição da imagem aqui
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:
Insira a descrição da imagem aqui

 ansible rhel*.com --list-hosts

Insira a descrição da imagem aqui

#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
Insira a descrição da imagem aqui
duas primeiras
Insira a descrição da imagem aqui
unidades são executadas primeiro ; a terceira unidade é executada uma vez.
Insira a descrição da imagem aqui
Esta é a nossa estrutura de diretórios atual.

Publicado 50 artigos originais · Gostei 18 · Visitas 3780

Acho que você gosta

Origin blog.csdn.net/thermal_life/article/details/105418888
Recomendado
Clasificación