首页 > 其他分享 >批量维护工具ansible之yaml与剧本playbook

批量维护工具ansible之yaml与剧本playbook

时间:2024-09-01 21:23:30浏览次数:15  
标签:httpd name yaml state ansible playbook file yes

一.简介

ansible的剧本playbook采用yaml语法,通过yaml语法可以轻松地表示和定义复杂的任务和配置,无论是单台还是多台服务器的管理,ansible都能够提供统一的语法来描述和执行操作,能快速地应对变更、部署和升级。

二.yaml语法基本

0.运行Ansible Playbook

ansible-playbook deploy.yml

1.YAML语法规范 类似JSON用键值表示,YAML是JSON的集合

用#号注释
区分大小写
严格的缩进关系来表示层级
缩进禁止tab键,只能用空格,空格数量无要求

#ansible的yaml特征
以---开头
以...结尾
#出现特殊字符要使用单引号或双引号,单引号所见所得,双引号内的可转义,使用单引号担心转义可以多加一个\ 如\\n

2.YAML数据结构有映射map和列表list,Map的键值可以是list结构,list列表项也可以是Map结构

映射map型如下:

#decome为键,yes为值;apt为键,name和state为值;同时,name又为键,apache2为值,state为键,present为值
become: yes
    apt:
      name: apache2
      state: present

列表list型如下:

#args为键,web、mysql和redis为值
args
 - web
 - mysql
 - redis

Map的键值可以是list结构,list列表项也可以是Map结构,如下

- hosts: servers
  become: yes
  tasks:
  - name: Install Apache
    apt:
      name: apache2
      state: present

三.常见模块的yaml用法

1.copy模块

---
- hosts: server1  # 指定要操作的目标主机
  remote_user: root  # 指定在目标主机上执行操作的用户
  tasks:  # 任务列表
    - name: copy file to remote server  # 任务名,可以自定义
      copy:  # 调用copy模块
        src: /path/to/local/file  # 要复制的本地文件的路径
        dest: /path/to/remote/file  # 要复制到的远程文件路径
        backup: yes  # 如果目标文件存在,则在覆盖前创建一个备份
        mode: '0644'  # 设置文件的权限模式
        owner: username  # 设置文件的所有者
        group: groupname  # 设置文件的组
        force: no  # 如果文件已经存在,则不强制替换文件

2.file模块

---
- hosts: servers
  tasks:
    - name: 确保 /etc/foo.conf 文件存在
      file:
        path: /etc/foo.conf
        state: present
 
    - name: 设置 /etc/foo.conf 的权限为 644
      file:
        path: /etc/foo.conf
        mode: 0644
 
    - name: 设置 /etc/foo.conf 的所有权为 user:group
      file:
        path: /etc/foo.conf
        owner: user
        group: group
 
    - name: 创建一个目录,并设置适当的权限
      file:
        path: /opt/mydir
        state: directory
        mode: 0755
        owner: user
        group: group

3.yum模块

---
- hosts: servers
  become: yes
  tasks:
    - name: Install package
      yum:
        name: httpd
        state: present
 
    - name: Update package
      yum:
        name: httpd
        state: latest
 
    - name: Remove package
      yum:
        name: httpd
        state: absent

4.systemd

---
- name: 使用 Ansible 管理 systemd 服务
  hosts: servers
  tasks:
    - name: 确保 httpd 服务已安装并启动
      ansible.builtin.yum:
        name: httpd
        state: present
 
    - name: 启动 httpd 服务
      ansible.builtin.systemd:
        name: httpd
        state: started
        enabled: yes
 
    - name: 重启 httpd 服务
      ansible.builtin.systemd:
        name: httpd
        state: restarted
 
    - name: 停止 httpd 服务
      ansible.builtin.systemd:
        name: httpd
        state: stopped
 
    - name: 使 httpd 服务不在系统启动时自动启动
      ansible.builtin.systemd:
        name: httpd
        state: stopped
        enabled: no

5.user

- name: 创建用户设置家目录和设置密码
  user:
    name: myuser
    uid: 1005
    group: myuser
    groups: myuser,sudo  #添加到附件组myuser,sudo
    home: /home/myuser
    createhome: yes
    password: "{{ 'mypassword' | password_hash('sha512') }}"
    shell: /bin/bash
    state: present

6.cron

- hosts: servers
  tasks:
    - name: 添加一个新的cron任务
      cron:
        name: "每天上午9:00执行备份脚本"
        minute: "0"
        hour: "9"
        job: "/usr/local/bin/backup.sh"
        user: "root"

四.使用ansible的剧本   

1.简单初始化剧本

cat >deploy_init.yml<<'EOF'
---
- hosts: all
  become: yes
  tasks:
  - name: Install common packages
    apt:
      name: "{{ item }}"
      state: present
      update_cache: yes
    with_items:
      - vim
      - curl
      - git
 
  - name: Create a new user
    user:
      name: myuser
      createhome: yes
      shell: /bin/bash
      groups: wheel
 
  - name: Copy SSH key to server
    authorized_key:
      user: myuser
      state: present
      key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
 
  - name: Restrict SSH Access
    lineinfile:
      path: /etc/ssh/sshd_config
      regexp: '^PermitRootLogin'
      line: 'PermitRootLogin no'
      state: present
 
  - name: Restart SSH service
    service:
      name: ssh
      state: restarted
 
  - name: Update all packages
    apt:
      update_cache: yes
      upgrade: dist
...
EOF

运行deploy_init.yml

ansible-playbook deploy_init.yml

2.部署LAMP剧本

cat >deploy_lamp.yml<<'EOF'
---
- hosts: servers
  become: yes
  tasks:
  - name: Install Apache
    apt:
      name: apache2
      state: present
 
  - name: Start Apache and Enable on Boot
    systemd:
      name: apache2
      state: started
      enabled: yes
 
  - name: Install MySQL
    apt:
      name: mysql-server
      state: present
 
  - name: Start MySQL and Enable on Boot
    systemd:
      name: mysql
      state: started
      enabled: yes
 
  - name: Install PHP
    apt:
      name: php
      state: present
 
  - name: Reload Apache to Enable PHP
    systemd:
      name: apache2
      state: reloaded
 
  - name: Test PHP Page
    copy:
      dest: /var/www/html/index.php
      content: |
        <?php
        // Show all information, defaults to INFO_ALL
        phpinfo();
        ?>
  - name: Restart Apache
    systemd:
      name: apache2
      state: restarted
EOF

运行deploy_lamp.yml

ansible-playbook deploy_lamp.yml


标签:httpd,name,yaml,state,ansible,playbook,file,yes
From: https://blog.51cto.com/alibaby/11890245

相关文章

  • ansible自动化运维项目
    在自动化运维中,Ansible是一种强大的工具,它通过无代理的方式来管理配置、部署应用程序和编排复杂任务。一个典型的Ansible自动化运维项目可以包括配置管理、应用部署、补丁更新、系统监控、备份恢复等。以下是如何构建和组织一个Ansible自动化运维项目的详细指南。一、......
  • 网络自动化:利用Python和Ansible实现网络配置管理
    利用Python和Ansible实现网络配置管理是现代网络自动化中的一个关键领域。这个组合使得可以更有效地管理网络设备、减少人为错误、提高网络的可扩展性和一致性。以下是如何利用Python和Ansible实现网络配置管理的详细指南:一、使用Python进行网络自动化Python提......
  • ansible模块
    ansible基础配置ansible的hosts文件sudovim/etc/ansible/hosts添加以下内容client1client2client3测试ansible能否通命令ansible[主机名]-mping-o#-O简洁输出例:ansiblelocalhost-mping-oansibleclient1-mping-o可以看到结果如下ping自己......
  • Ansible自动化运维项目
    Ansible自动化运维项目是一个复杂而强大的解决方案,它利用Ansible这一开源自动化平台来简化IT基础设施的配置管理、应用部署和任务自动化过程。以下是一个关于Ansible自动化运维项目的详细探讨,包括其基本概念、架构、优势、应用场景、实施步骤、最佳实践以及未来发展等方面。......
  • ansible 命令及其部分模块
    ansible管理:ansible进行远程管理的两个方法:adhoc临时命令。就是在命令行上执行管理命令。playbook剧本。把管理任务用特定格式写到文件中。无论哪种方式,都是通过模块加参数进行管理。adhoc临时命令语法:ansible主机或组列表-m模块-a"参数"#-a是可选的通过ping模块测试到远......
  • 企业级自动化运维神器Ansible
    一、介绍1.自动化运维工具对比1.Puppet:基于Ruby开发,采用C/S架构,扩展性强,远程命令执行相对较弱2.SaltStack:基于Python开发,采用C/S架构,相对puppet更轻量级,配置语法使用YAML,需要配置客户端以及服务器端。每台被控制节点需要安装agent3.Ansible:基于Pytho......
  • 部署Harbor、部署Docker-compose、YAML文件
    一、Harbor部署1.验证python版本[root@docker2~]#python--version2.安装pip[root@docker2~]#yum-yinstallpython2-pip#由于版本过低,需要对其进行一个升级#更新pip[root@docker2~]#pipinstall--upgradepip3.指定版本号[root@docker2~]#pipinstall--upg......
  • YOLOv8改进 | 模块缝合 | C2f融合多尺度表征学习模块 【含OD、RTDETR、OBB等yaml文件
    秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • D11 kubernetes yaml模板与示例
    》 kubernetes资源的创建、更新、删除等操作均可以使用json或者yaml文件进行操作,更新和删除可以依赖之前的文件进行更改。但是资源清单文件就没那么容易了,k8s的配置项实在是太多,稍微不注意就会犯错。要写好一个yaml文件,需要了解yaml文件的语法,需要整我k8s的各种配置。本文按照k8s......
  • Ansible `iptables` 模块
    Ansibleiptables模块一、简介功能:iptables模块用于管理Linux系统上的防火墙规则。通过这个模块,可以添加、删除和修改iptables规则,以控制进出系统的网络流量。使用场景:适用于需要管理防火墙规则的场景,如限制特定端口的访问、允许特定IP的连接、配置NAT等。二、......