云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色

一、Ansible-playbook实战

1.Ansible-playbook安装软件

```bash
#编写yml
[root@ansible ansible]# cat wget.yml
- hosts: backup
  tasks:
    - name: Install wget
      yum:
        name: wget
        state: present
        
#检查playbook的语法
[root@ansible ansible]# ansible-playbook  --syntax-check wget.yml
playbook: wget.yml


#执行playbook
[root@ansible ansible]# ansible-playbook wget.yml

2.Playbook重构backup服务

```bash
1.定义主机清单
[root@ansible ansible]# cat /etc/ansible/hosts
nfs ansible_ssh_host=10.0.0.31
backup ansible_ssh_host=10.0.0.41

2.写playbook重构
[root@ansible ansible]# cat backup.yml
- hosts: backup
  tasks:
    - name: Install Rsync Server
      yum:
        name: rsync
        state: present

    - name: Configure Rsync Server
      copy:
        src: rsyncd.conf
        dest: /etc/rsyncd.conf

    - name: Create www Group
      group:
        name: www
        gid: 666

    - name: Create User www
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false
     
    - name: Configure passwd file
      copy:
        content: rsync_backup:123456
        dest: /etc/rsync.passwd
        mode: 0600

    - name: Create Dir /backup
      file:
        path: /backup
        state: directory
        owner: www
        group: www

    - name: Start Rsync Server
      systemd:
        name: rsyncd
        state: started
        enabled: yes

3.playbook重构nfs服务


```bash
1.定义主机清单
[root@ansible ansible]# cat /etc/ansible/hosts
nfs ansible_ssh_host=10.0.0.31
backup ansible_ssh_host=10.0.0.41

2.打通免秘钥
[root@ansible ~]# ssh-copy-id 10.0.0.31
3.写playbook
[root@ansible ansible]# cat nfs.yml
- hosts: nfs
  tasks:
    - name: Install NFS Server
      yum:
        name: nfs-utils
        state: present

    - name: Configure nfs Server
      copy:
        src: exports
        dest: /etc/

    - name: Create www Group
      group:
        name: www
        gid: 666

    - name: Create User www
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false

    - name: Create /data/wp
      file:
        path: /data/wp
        state: directory
        owner: www
        group: www

    - name: Start NFS Server
      systemd:
        name: nfs
        state: started
        enabled: yes

客户端挂载:
[root@ansible ansible]# cat web.yml
- hosts: web01
  tasks:
    - name: Install nfs-utils
      yum:
        name: nfs-utils
        state: present

    - name: mount nfs /data/wp-->wordpress
      mount:
        src: 172.16.1.31:/data/wp
        path: /code/wordpress/wp-content/uploads/
        state: mounted
        fstype: nfs


```


4.Playbook重构nginx-php

```bash
1.定义主机清单
[root@ansible ~]# cat /etc/ansible/hosts
nfs ansible_ssh_host=10.0.0.31
backup ansible_ssh_host=10.0.0.41
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8

2.免秘钥
[root@ansible ~]# ssh-copy-id 10.0.0.8

3.playbook
[root@ansible ansible]# cat nginx.yml
- hosts: web02
  tasks:
    - name: Nginx Repo 
      yum_repository:
        name: nginx
        description: Nginx YUM repo
        baseurl: http://nginx.org/packages/centos/7/$basearch/
        gpgcheck: no
        enabled: yes


    - name: Install Nginx Server
      yum:
        name: nginx
        state: present

    - name: Configure Nginx Server
      copy:
        src: nginx.conf
        dest: /etc/nginx/

    - name: create group www
      group:
        name: www
        gid: 666

    - name: Create www user
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false

    - name: Start Nginx Server
      systemd:
        name: nginx
        state: started
        enabled: yes

5.Playbook重构mariadb

[root@ansible ansible]# cat php.yml
- hosts: web02
  tasks:
    - name: Install PHP Server
      yum:
        name: php,php-bcmath,php-cli,php-common,php-devel,php-embedded,php-fpm,php-gd,php-intl,php-mbstring,php-mysqlnd,php-opcache,php-pdo,php-process,php-xml,php-json
        state: present


    - name: Configure PHP Server
      copy:
        src: www.conf
        dest: /etc/php-fpm.d/


    - name: Start PHP Server
      systemd:
        name: php-fpm
        state: started
        enabled: yes

6.整合playbook文件

[root@ansible ansible]# cat mysql.yml
- hosts: db01
  tasks:
    - name: Install mariadb Server
      yum:
        name: mariadb-server,python3-mysqlclient
        state: present

    - name: Start mariadb Server
      systemd:
        name: mariadb
        state: started
        enabled: yes

    - name: copy all.sql to 51
      copy:
        src: all.sql
        dest: /root/

    - name: Configure Mmriadb Server
      mysql_db:
        login_user: root
        login_host: localhost
        login_port: 3306
        name: all
        target: /root/all.sql
        state: import       

    - name: Restart mariadb
      systemd: 
        name: mariadb
        state: restarted
```

##### 07.部署wordpress

```bash
[root@ansible ansible]# cat wp.yml
- hosts: web02
  tasks:
    - name: Delete Default default.conf
      file:
        path: /etc/nginx/conf.d/default.conf
        state: absent

    - name: Copy wp.conf 
      copy:
        src: wp.conf
        dest: /etc/nginx/conf.d/

    - name: unarchive wp.tar.gz
      unarchive:
        src: wp.tar.gz 
        dest: /
        creates: /code/wordpress

    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

```

二、Ansible-流程控制

1.vars变量定义方法

```bash
案例1.定义单个变量
[root@ansible ansible]# cat var.yml
- hosts: backup
  vars:
    pk: wget
  tasks:
    - name: Install package
      yum:
       name: "{{ pk }}"
       state: present

案例2.定义多个变量,使用列表的方式 -
[root@ansible ansible]# cat var.yml
- hosts: backup
  vars:
    pk: 
      - wget
      - tree
      - lrzsz
  tasks:
    - name: Install package
      yum:
       name: "{{ pk }}"
       state: present


案例3.定义路径的变量
#变量单独调用 必须加双引号
[root@ansible ansible]# cat var.yml
- hosts: backup
  vars:
    - pk1: 10.0.0.41
    - pk2: backup
  tasks:
    - name: create file
      file:
       path: "{{ pk1 }}"
       state: touch
       
#注意如果变量带路径则不需要使用""
[root@ansible ansible]# cat var.yml
- hosts: backup
  vars:
    - pk1: 10.0.0.41
    - pk2: backup
  tasks:
    - name: create file
      file:
       path: /root/"{{ pk1 }}"
       state: touch

2.vars变量定义方法

1.先创建存放变量的文件
[root@ansible ansible]# cat v.yml
pk1: lrzsz
pk2: tree

2.在play中调用比变量
[root@ansible ansible]# cat var.yml
- hosts: backup
  vars_files: v.yml
  tasks:
    - name: create file
      file:
       path: /root/{{ pk2 }}_{{ pk1 }}
       state: directory


案例: 定义变量,使用列表调用多个变量
[root@ansible ansible]# cat v.yml 
pk1: lrzsz
pk2: tree

[root@ansible ansible]# cat var.yml
- hosts: backup
  vars_files: v.yml
  tasks:
    - name: yum lrzsz wget
      yum:
       name: 
         - "{{ pk1 }}" 
         - "{{ pk2 }}"
       state: present

```

3.变量注册

```bash
内置变量通过setup模块来查看。
[root@ansible ansible]# cat var.yml 
- hosts: backup
  tasks:
    - name: Create file 
      file:
       path: /root/{{ ansible_hostname }}_{{ ansible_default_ipv4.address }} 
       state: directory

```

4.when判断语法格式

```bash
#尽量不使用此种方法
[root@ansible ansible]# cat /etc/ansible/hosts
nfs ansible_ssh_host=10.0.0.31

[lnmp]
backup ansible_ssh_host=10.0.0.41

web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8
db01 ansible_ssh_host=10.0.0.51

[lnmp:vars]            # 给lnmp组定义变量
pk1=wget
pk2=lrzsz

调用
[root@ansible ansible]# cat var.yml 
- hosts: backup
  tasks:
    - name: Create file 
      file:
       path: /root/{{ pk1 }}_{{ pk2 }}
       state: directory

5.when判断案例

```bash
1.定义主机的变量
在当前目录创建host_vars目录,在host_vars下按照主机清单来定义变量文件
比如主机清单有
backup  ansible_ssh_host=10.0.0.41
则在host_vars下创建一个nfs文件,在backup文件中定义变量

[root@ansible oldboy]# cat host_vars/backup 
pk1: lrzsz
pk2: wget
[root@ansible oldboy]# cat vars.yml 
- hosts: backup
  tasks:
    - name: Install lrzsz wget
      yum:
        name:
          - "{{ pk1 }}"
          - "{{ pk2 }}"
        state: present

2.定义组的变量
主机清单:
[root@ansible oldboy]# cat /etc/ansible/hosts
nfs ansible_ssh_host=10.0.0.31
[lnmp]
backup ansible_ssh_host=10.0.0.41

web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8
db01 ansible_ssh_host=10.0.0.51



[root@ansible oldboy]# cat group_vars/lnmp 
name: oldboy
age: 10
[root@ansible oldboy]# cat vars.yml 
- hosts: web01
  tasks:
    - name: touch file
      file:
        path: /root/{{ name }}_{{ age }} 
        state: touch


###可以对所有的组定义变量
[root@ansible oldboy]# cat group_vars/all 
name: old
age: 11

6.handlers模块

```bash
Ansible执行命令,有一些无法返回结果的
[root@ansible oldboy]# cat re.yml
- hosts: web01
  tasks:
    - name: list /root
      command: ls -l

通过变量注册返回ls -l的详细信息
[root@ansible oldboy]# cat li.yml
- hosts: web01
  tasks:
    - name:  list root
      command: ls -l
      register: ng_re


    - name: print ng_re env
      debug:
        msg: "{{ ng_re }}"




[root@ansible oldboy]# cat re.yml
- hosts: web01
  tasks:
    - name: Check Nginx Config
      command: nginx -t

      
通过变量注册返回nginx检查结果
[root@ansible oldboy]# cat re.yml
- hosts: web01
  tasks:
    - name: Check Nginx Config
      command: nginx -t
      register: ng_re


    - name: print ng_re env
      debug:
        msg: "{{ ng_re }}"


获取子集的值:
[root@ansible oldboy]# cat re.yml
- hosts: web01
  tasks:
    - name: Check Nginx Config
      command: nginx -t
      register: ng_re


    - name: print ng_re env
      debug:
        msg: "{{ ng_re.stderr_lines }}"
        
 
查看内置变量:
[root@ansible oldboy]# cat re.yml
- hosts: web01
  tasks:
    - name: Check Nginx Config
      command: nginx -t
      register: ng_re


    - name: print ng_re env
      debug:
        msg: "{{ ansible_kernel }}"

7.nfs服务重构


```bash
nfs案例
1.定义主机清单
[root@ansible ~]# cat /etc/ansible/hosts
backup ansible_ssh_host=10.0.0.41
db01 ansible_ssh_host=10.0.0.51
[lnmp]
web01 ansible_ssh_host=10.0.0.7
web02 ansible_ssh_host=10.0.0.8
nfs ansible_ssh_host=10.0.0.31


[root@ansible oldboy]# cat nfs.yml
- hosts: lnmp
  vars:
    dir: /data/wp
  tasks:
    - name: Install nfs-utils
      yum:
        name: nfs-utils
        state: present

    - name: Configure nfs Server
      copy:
        src: exports
        dest: /etc/
      notify: Restart nfs Server
      when: ansible_hostname == "nfs"

    - name: create Group www
      group:
        name: www
        gid: 666

    - name: Create www User
      user:
        name: www
        uid: 666
        group: www
        shell: /sbin/nologin
        create_home: false

    - name: Create "{{ dir }}"
      file:
        path: "{{ dir }}"
        state: directory
        owner: www
        group: www

    - name: Start nfs Server
      systemd:
        name: nfs
        state: started
        enabled: yes
 
    - name: web mount
      mount:
        src: 172.16.1.31:{{ dir }}
        path: /mnt
        fstype: nfs
        state: mounted
      when: ansible_hostname is search "web"


  handlers:
    - name: Restart nfs Server
      systemd:
        name: nfs
        state: restarted

三、Ansible-字典循环-roles角色

1.字典循环

2.tasks任务整合到一个文件

3.jinja2的循环和判断语法

4.rsync使用jinja2模版重构

5.Roles角色重新编排rsync

6.Roele角色重新编排nfs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十四章课后题答案

文章目录 问题1&#xff1a;问题2&#xff1a;问题3&#xff1a; 问题1&#xff1a; 在HTML中嵌入JavaScript&#xff0c;应该使用的标签是&#xff08; &#xff09;。 选项&#xff1a; A. <style></style> B. <script></script> C. <js><…

用python进行二分法查找(python实例三十)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.代码示例 4.运行结果 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键…

Qt学习(五)自定义对话框,多窗口开发---添加设计师类, MDI多窗口开发

一 对话框 实现功能&#xff1a;打开文件&#xff0c;选择目录&#xff0c;保存文件&#xff0c;选择颜色&#xff0c;选择字体&#xff0c;输入信息&#xff0c; 消息提示框 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE na…

用 Python 实现简易的 Web 爬虫:从入门到实战

一、引言 在信息爆炸的时代,网络上蕴含着海量的数据。如果我们想要获取特定的信息,手动从网页上复制粘贴显然效率极低。这时,Web 爬虫就派上了用场。Web 爬虫是一种自动获取网页内容的程序,它可以模拟人类在浏览器中的操作,快速地抓取网页上的数据。本文将带领大家使用 Py…

机器视觉检测中,2D面阵相机和线扫相机的区别

2D面阵相机和线扫相机是工业视觉系统中常用的两种相机类型&#xff0c;各有其特点和应用场景。 2D面阵相机 特点&#xff1a; 成像方式&#xff1a;通过二维传感器一次性捕捉整个场景的图像。 分辨率&#xff1a;分辨率由传感器的像素数决定&#xff0c;常见的有百万像素到几千…

ECharts极简入门

ECharts 是一个基于 JavaScript的开源可视化图表库&#xff0c;广泛应用于数据可视化的场景中&#xff0c;支持多种图表类型&#xff0c;如柱状图、折线图、饼图、散点图、雷达图等&#xff0c;且具有强大的自定义功能。 1. ECharts 基本使用 首先需要引入 ECharts 库&#xf…

go设置镜像代理

前言 在 Go 开发中&#xff0c;如果直接从官方源&#xff08;https://proxy.golang.org&#xff09;下载依赖包速度较慢&#xff0c;可以通过设置 镜像代理 来加速依赖包的下载。以下是增加 Go 镜像代理的详细方法&#xff1a; 一、设置 Go 镜像代理 1. 使用环境变量设置代理…

Linux部署DeepSeek r1 模型训练

之前写过一篇windows下部署deepseekR1的文章&#xff0c;有小伙伴反馈提供一篇linux下部署DeepSeek r1 模型训练教程&#xff0c;在 Linux 环境下&#xff0c;我找了足够的相关资料&#xff0c;花费了一些时间&#xff0c;我成功部署了 DeepSeek R1 模型训练任务&#xff0c;结…

AI Agent架构深度解析:从ReAct到AutoGPT,自主智能体的技术演进与工程实践

前言 觉得不错就点个赞吧&#xff01;。 一、AI Agent技术架构演进图谱 &#xff08;配图&#xff1a;AI Agent架构演进时间轴&#xff0c;标注关键技术节点&#xff09; 1.1 三代架构对比分析 架构类型代表系统核心特征局限性反应式DeepBlue预置规则库无长期记忆认知式Wats…

嵌入式经常用到串口,如何判断串口数据接收完成?

说起通信&#xff0c;首先想到的肯定是串口&#xff0c;日常中232和485的使用比比皆是&#xff0c;数据的发送、接收是串口通信最基础的内容。这篇文章主要讨论串口接收数据的断帧操作。 空闲中断断帧 一些mcu&#xff08;如&#xff1a;stm32f103&#xff09;在出厂时就已经在…

HTML/CSS中并集选择器

1.作用:选中多个选择器对应的元素,又称:分组选择器 所谓并集就是或者的含义. 2.语法:选择器1,选择器2,选择器3,......选择器n 多个选择器通过,连接,此处,的含义就是:或. .rich,.beauty{color: blue;} 3.注意事项 1.并集选择器,我们一般竖着写 2.任何形式的选择器,都可以作为并…

解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器

一、引言 在机器学习的广阔领域中&#xff0c;算法的选择犹如为一场冒险挑选趁手的武器&#xff0c;至关重要。面对海量的数据和复杂的任务&#xff0c;合适的算法能够化繁为简&#xff0c;精准地挖掘出数据背后隐藏的模式与价值。机器学习领域有十大核心算法&#xff0c;而随…

Shapr3D在ipad上无法识别鼠标点击问题

此问题我去过长沙Apple官方直营店咨询过此问题&#xff0c;官方直营店也不知道解决方案&#xff0c;遂在此提醒长沙Apple官方线下直营店的所有店员。 问题描述 1.不知道为什么在买了Magic Keyboard后还是无法识别单击触控板&#xff0c;遂为了解决这个问题我特意从江西跑到长沙…

【架构】微内核架构(Microkernel Architecture)

微内核架构(Microkernel Architecture) 核心思想 微内核架构(又称插件式架构)通过最小化核心系统,将可扩展功能以插件模块形式动态加载,实现高内聚低耦合。其核心设计原则: 核心最小化:仅封装基础通用能力(如插件管理、通信机制、安全校验)功能插件化:所有业务功能…

AI 编程助手 cursor的系统提示词 prompt

# Role 你是一名极其优秀具有10年经验的产品经理和精通java编程语言的架构师。与你交流的用户是不懂代码的初中生&#xff0c;不善于表达产品和代码需求。你的工作对用户来说非常重要&#xff0c;完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…

javaSE学习笔记21-线程(thread)-锁(synchronized 与Lock)

死锁 多个线程各自占有一些共享资源&#xff0c;并且互相等待其他线程占有的资源才能运行&#xff0c;而导致两个或者多个线程 都在等待对方释放资源&#xff0c;都停止执行的情形&#xff0c;某一个同步块同时拥有“两个以上对象的锁”时&#xff0c;就可能 会发生“死锁&quo…

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header&#xff1a;设置请求的 header&#xff0c;header 中不能设置 Referer&#xff1b; method&#xff1a;请求方法&#xff1b; timeout&#xff1a;超时时间&#xff0c;单位 ms&a…

SpringBoot速成概括

视频&#xff1a;黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 图示&#xff1a;

GoFound 与 MySQL 集成优化方案

GoFound 与 MySQL 集成优化方案 1. 明确需求 文章信息存储在 MySQL 数据库中。使用 GoFound 实现全文搜索功能。搜索时&#xff0c;先从 GoFound 中获取匹配的文章 ID&#xff0c;然后从 MySQL 中查询完整的文章信息。 2. 优化思路 数据同步&#xff1a;将 MySQL 中的文章数…

基于开源Odoo模块、SKF Phoenix API与IMAX-8数采网关的资产密集型企业设备智慧运维实施方案

一、方案背景与需求分析 1.1 华东地区产业特点与设备管理痛点 华东地区作为中国制造业核心区域&#xff0c;聚集了钢铁、化工、汽车、装备制造等资产密集型企业。以某长三角钢铁集团为例&#xff0c;其设备管理面临以下挑战&#xff1a; 非计划停机损失严重&#xff1a;2023…