【Ansible】Ansible playbook

devtools/2024/10/20 5:23:08/

Ansible playbook简介

Ansible playbook是一种用于描述和自动化IT基础设施配置和管理的工具。它使用YAML格式来定义一系列任务和配置项,并利用Ansible的执行引擎自动执行这些任务。

Playbook包含一个或多个play,每个play定义了一组任务,这些任务将在目标主机上执行。每个任务可以是一个模块(例如复制文件、安装软件等),也可以是一个自定义的脚本。

Playbook还可以定义变量、条件语句、循环和其他控制结构,以实现更复杂的配置和管理逻辑。可以使用Ansible的模块来管理主机的各种资源,如文件、用户、服务等。

通过使用Ansible playbook,可以实现自动化的部署、配置和管理,提高系统的可靠性和可维护性,并减少人工干预的工作量。它还可以根据需要进行扩展和定制,以满足不同环境和需求的要求。

playbook结构

Playbook结构是一个Ansible playbook文件的组织结构。一个Ansible playbook是一个用来描述一组关联主机上执行任务的文件。

Playbook结构通常包括以下几个部分:

  1. 主机组或主机名:指定要在哪些主机上执行任务。可以使用主机组名或逗号分隔的主机名列表。

  2. 变量定义:定义用于在任务中引用的变量。可以是全局变量或主机特定变量。

  3. 任务列表:列出需要在主机上执行的任务。每个任务都包含一个名称和一个或多个操作。

  4. 模块和参数:使用Ansible模块来执行任务。每个任务都会调用一个模块,并为模块传递必要的参数。

  5. 条件语句:根据条件,有选择地执行任务。条件语句可以基于主机变量或事先定义的变量。

  6. 循环:重复执行一个任务集。循环可以用来处理多个主机或不同的变量组合。

  7. 错误处理:处理任务执行过程中可能出现的错误。可以定义失败任务的处理方式。

  8. 注释:包含有关Playbook的注释,以便于其他人理解和维护。

整个Playbook结构通常以YAML格式编写,具有易读性和可维护性。通过定义主机、变量、任务和条件,Playbook可以用来自动化配置、部署和管理远程主机。

Ansible playbook语法

Ansible playbook是用于编写自动化任务的脚本文件,其中包含了一系列的任务和配置信息。以下是Ansible playbook的基本语法:

  1. 文件头部:在文件的头部指定一些基本的信息,如Ansible版本、作者等。
---
- hosts: <目标主机>gather_facts: <是否收集主机信息,默认为True>
...
  1. 变量定义:可以定义一些变量,用于在任务中引用。
vars:var_name: var_value...
  1. 任务定义:定义一系列的任务,每个任务包含一个名称和一系列操作步骤。
tasks:- name: <任务名称><操作步骤>...
  1. 动作(Action):在任务中执行的操作步骤,可以是Ansible模块、命令、脚本等。
- name: <任务名称><操作步骤>...
  1. 模块(Module):Ansible提供了大量的模块,用于执行各种操作。模块可以通过参数传递不同的配置信息。
- name: <任务名称><模块名称>:<参数>...
  1. 条件判断:可以使用条件判断来根据不同的情况执行不同的操作。
- name: <任务名称><操作步骤>when: <条件>...
  1. 循环(Loop):可以使用循环来重复执行一系列的任务。
- name: <任务名称><操作步骤>loop: <循环列表>...
  1. 注释:可以在脚本中添加注释以提高可读性。
# 这是一个注释

要启动一个Ansible playbook任务,可以使用ansible-playbook命令。该命令将使用指定的playbook文件来执行自动化任务。以下是启动任务的基本语法:

ansible-playbook <playbook_file>

其中,<playbook_file>是要执行的playbook文件的路径。可以使用绝对路径或相对路径。

要配置一个role,可以按照以下步骤进行:

  1. 创建一个名为roles的目录,作为roles的根目录。该目录应该与playbook文件在同一级。

  2. roles目录下创建一个新的角色目录,在此处设置角色的名称。例如,可以创建一个名为webserver的目录:

    roles/└── webserver/
    
  3. 在角色目录中,创建以下目录和文件结构:

    roles/└── webserver/├── tasks/│   └── main.yml├── handlers/│   └── main.yml├── vars/│   └── main.yml├── files/└── templates/
    
    • tasks目录:包含角色的主要任务文件,通常名为main.yml
    • handlers目录:包含角色的处理程序文件,用于处理特定事件的触发。
    • vars目录:包含角色的变量文件,用于定义角色的变量。
    • files目录:包含角色需要使用的文件。
    • templates目录:包含角色需要使用的模板文件。
  4. main.yml文件中,定义该角色的任务。可以使用Ansible模块和任务语句来描述任务的操作。例如:

    - name: Install Apacheapt:name: apache2state: present- name: Start Apacheservice:name: apache2state: startedenabled: yes
    

    这是一个简单的示例,其中安装了Apache包并启动了Apache服务。

  5. 在playbook文件中,使用角色的名称来调用它。例如:

    - name: My Playbookhosts: allroles:- webserver
    

    在此示例中,我们调用了名为webserver的角色,该角色将在所有主机上执行。

这样,就可以在playbook中使用roles来组织和管理任务。每次执行playbook时,都会调用相应的角色,并执行其定义的任务。

ansible_playbookdockerhttpdnginxmysql_162">1、使用ansible playbook远程部署docker、httpd、nginx、mysql

和#2在一起

2、编写一个安装并且运行httpd的playbook,该playbook可以在执行命令时指定被控端主机,要求每台机上的httpd首页内容为该主机的主机名、IP地址、子网掩码、网关信息

---
- hosts: gr1remote_user: roottasks:- name: add yum repocopy:src: ./docker-ce.repodest: /etc/yum.repos.d/docker-ce.repobecome: true- name: yumlist reflashyum:name: yum-utilsupdate_cache: yes- name: install dockeryum:name:- docker-ce-cli-20.10.18- docker-ce-20.10.18- containerd.iostate: present- name: install nginxyum:name: nginxstate: present- name: install mysqlyum:name: mysqlstate: present- name: change docker daemon.jsoncopy:content: |{"insecure-registries": ["192.168.99.130:5000"],"registry-mirrors": ["https://docker.1panel.live"]}dest: /etc/docker/daemon.jsonbecome: true- name: start dockerservice:name: dockerstate: started
- hosts: gr1remote_user: roottasks:- name: install httpdyum:name: httpdstate: present- name: index writecopy:content: 'Hostname "{{ ansible_fqdn }}" and IP "{{ansible_ens33.ipv4.address }}" and mask "{{ansible_ens33.ipv4.netmask }}" and gateway "{{ansible_default_ipv4.gateway }}"'dest: /var/www/html/index.htmlbecome: true- name: restart httpdservice:name: httpdstate: restarted

在这里插入图片描述

ansibledocker_nginx_227">3、使用ansible远程部署docker nginx容器

yum install -y python3
pip3 install docker
---
- hosts: gr1remote_user: roottasks:- name: docker run nginxdocker_container:name: nginximage: nginx:lateststate: startedports:- "81:80"volumes:- /var/www/html:/usr/share/nginx/html

或者

ansible gr1 -m shell -a "docker run -d -p 81:80 nginx" 

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/devtools/100376.html

相关文章

NLP -->定义、应用、与职业前景解析

1. 自然语言处理&#xff08;NLP&#xff09;的定义与误区 定义: 自然语言处理主要集中于文本的处理&#xff0c;旨在使计算机能够理解和生成自然语言文本。常见误区: 初学者容易将自然语言处理与语音识别混淆。 语音识别: 将语音转成文字&#xff0c;这不属于自然语言处理范畴…

使用Python请求http/https时如何设置失败重试次数例子解析

代码示例&#xff1a; import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retrydef requests_with_retries_example():# 创建一个session对象&#xff0c;该对象将被配置为在失败时自动重试session requests.Ses…

VirtualBox下安装Centos7.9虚拟机的踩坑记录

目录 0 背景1 安装Centos7.91.1 下载iso镜像1.2 正常安装虚拟机1.3 将用户添加到sudoers并免密1.4 更新yum源1.5 配置静态IP1.6 通过ssh工具传文件1.7 总结 0 背景 最近搞了个便宜的低配台式机用来敲代码&#xff0c;主要是嫌弃笔记本屏幕太小了&#xff0c;想用个大屏。 然后我…

torch.max()学习记录

xtourch.tensor([[1,2,3],[4,6,5],[9,11,4],[-2,6,20]])为4*3的一个张量 1)请思考y的值 ytorch.max(x,dim0) 分析&#xff1a;x是一个2D: 4*3的张量&#xff0c;dim0 &#xff0c;表示按照行操作&#xff0c;得到的张量shape3,对应的是[1,4,9,-2】&#xff0c;【2,6,11,6】…

AWS Glue 与 EMR

欢迎来到雲闪世界。AWS Glue 是一款按使用量付费的无服务器 ETL 工具&#xff0c;几乎不需要设置任何基础设施。它可自动完成编写、执行和监控 ETL 作业所涉及的大部分工作。如果您的数据是结构化的&#xff0c;您可以利用爬虫来推断架构、识别文件格式并在Glue 的数据目录中填…

linux系统使用 docker 来部署运行 mysql5.7 并配置 docker-compose-mysql.yml 文件

Docker是一个开源的容器化平台&#xff0c;旨在简化应用程序的创建、部署和管理。它基于OS-level虚拟化技术&#xff0c;通过将应用程序和其依赖项打包到一个称为容器的标准化单元中&#xff0c;使得应用程序可以在任何环境中快速、可靠地运行。 Docker的优势有以下几个方面&a…

ROS2 CMakeLists.txt package.xml

ROS2 CMakeLists.txt cmake_minimum_required(VERSION 3.8) project(bumperbot_cpp_examples)# 设置编译器警告选项 if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif()# 查找并加载ROS…

微信怎么聚合聊天呢?

微信的聊天聚合通常指的是将多个聊天记录整合起来&#xff0c;便于管理和查找。你可以尝试以下方法&#xff1a; 1. 利用标签功能 设置标签&#xff1a;在微信聊天中&#xff0c;为联系人设置标签&#xff08;如“客户”、“合作伙伴”等&#xff09;&#xff0c;便于分类管理…