Ansible基础6——文件模块、jinja2模板

news2024/12/24 2:28:32

文章目录

  • 一、常用文件模块
    • 1.1 blockinfile模块
    • 1.2 file模块
      • 1.2.1 创建文件并赋予权限
      • 1.2.2 创建目录并赋予权限
      • 1.2.3 创建软连接
      • 1.2.4 删除文件或目录
    • 1.3 fetch模块
    • 1.4 lineinfile模块
    • 1.5 stat模块
    • 1.6 synchronize模块
  • 二、jinja2模板
    • 2.1 构建jinja2模板
    • 2.2 管理jinja2模板
    • 2.3 控制结构
      • 2.3.1 for循环语句
        • 2.3.1.1 for循环+变量
        • 2.3.1.2 for循环+loop.index
        • 2.3.1.3 for循环+条件判断
        • 2.3.1.4 for循环+playbook变量组
        • 2.3.15 for循环+清单文件组
      • 2.3.2 if判断语句
    • 2.4 变量过滤器

一、常用文件模块

模块名称释义
blockinfile插入、更新或删除由可自定义标记线包围的多行文本块
copy将文件从本地或远程计算机复制到受管主机上的某个位置。类似于file模块,copy模块还可以设置文件属性,包括SELinux上下文件。
fetch此模块的作用和copy模块类似,但以相反方式工作。此模块用于从远程计算机获取文件到控制节点,并将它们存储在按主机名组织的文件树中。
file设置权限、所有权、SELinux上下文以及常规文件、符号链接、硬链接和目录的时间戳等属性。此模块还可以创建删除常规文件、符号链接、硬链接和目录。其他多个与文件相关的模块支持与file模块相同的属性设置选项,包括copy模块。
lineinfile确保特定行位于某文件中,或使用反向引用正则表达式来替换现有行。此模块主要在用户想要更改文件的某一行时使用。
stat检索文件的状态信息,类似于Linux中的stat命令。
synchronize围绕rsync命令的一个打包程序,可加快和简化常见任务。synchronize模块无法提供对rsync命令的完整功能的访问权限,但确实最常见的调用更容易实施。用户可能仍需通过run command模块直接调用rsync命令。

1.1 blockinfile模块

  • 模块连接
  • 可以判断受控机上的文件内容,前提是受控机上有这个文件。

1.判断受控机上的文件里是否存在某行内容。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 判断文件内容是否存在
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断文件内容是否存在
      blockinfile:
        path: /opt/qingjun
        block: |
          Are you  like study            ##判断受控机上的/opt/qingjun文件是否存在此行内容,不存在则添加此行。

在这里插入图片描述
2.更新ansible追加进去的文本内容。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 判断文件内容是否存在
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断文件内容是否存在
      blockinfile:
        path: /opt/qingjun
        block: |
          大好河山     ##将之前添加进去的内容换成此行,代表之前添加内容会被删除,再在文件里添加此行。

在这里插入图片描述
3.追加新文件内容。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 判断文件内容是否存在
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 判断文件内容是否存在
      blockinfile:
        path: /opt/qingjun
        block: |
          大好河山
          华夏九州     ##追加此行内容。

在这里插入图片描述

1.2 file模块

  • 模块连接
  • 功能较多,常用模块,可以创建文件,创建目录,创建软连接,并能添加属主属组和相关权限。

1.2.1 创建文件并赋予权限

1.创建文件,属主属组为qingjun,并添加权限。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/qingjun.txt
        owner: qingjun
        group: qingjun
        mode: '644'
        state: touch

在这里插入图片描述
2.使用符号指定权限创建文件。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/qingjun.txt
        owner: qingjun
        group: qingjun
        mode: u-w,o+w,a+w
        state: touch

在这里插入图片描述

1.2.2 创建目录并赋予权限

1.创建目录,不指定权限就赋予默认权限。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/baimu
        owner: qingjun
        group: qingjun
        state: directory

在这里插入图片描述
2.指定目录权限创建。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/baimu
        owner: qingjun
        group: qingjun
        mode: '0777'       ##指定目录权限创建。
        state: directory

在这里插入图片描述

1.2.3 创建软连接

1.对文件软连接。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        src: /opt/qingjun.txt     ##源文件。
        dest: /opt/baimu/link_qingjun.txt      ##目的地址,自定义连接连接名。
        owner: qingjun
        group: qingjun
        state: link

在这里插入图片描述
2.对目录软连接。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        src: /opt/baimu            ##源目录。
        dest: /tmp/link_baimu       ##目标地址,自定义连接目录名称,进入连接目录相当于进入源目录。
        owner: qingjun
        group: qingjun
        state: link

在这里插入图片描述

1.2.4 删除文件或目录

1.删除文件。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/qingjun.txt     ##删除/opt/qingjun.txt文件。
        state: absent

在这里插入图片描述
2.删除目录。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      file:
        name: /opt/baimu          ##删除/opt/baimu目录。
        state: absent

在这里插入图片描述

1.3 fetch模块

  • 模块连接
  • 使用fetch模块从受控机上索取文件到本地。

1.将受控机上家目录下的文件传到主控机本地目录。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      fetch:
        src: /root/anaconda-ks.cfg
        dest: /opt

在这里插入图片描述

1.4 lineinfile模块

  • 模块连接
  • lineinfile模块可以确保某一行是否存在文件里,若存在则返回ok,若不存在则文件末尾追加。

1.判断受控机上的/opt/qingjun文件里否存在“baimu"这一行。若存在,则返回ok;若不存在,则在文件末行追加。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      lineinfile:
        path: /opt/qingjun
        line: baimu
        state: present

在这里插入图片描述

1.5 stat模块

  • 模块连接
  • 可以查看受管主机的文件状态。

1.查看受控机/opt/qingjun文件状态。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      stat:
        path: /opt/qingjun
        checksum_algorithm: md5
      register: qingjun
    - debug:
        var: qingjun

在这里插入图片描述
2.获取文件的md5值,若值发生改变,则说明文件内容已被更改过。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 创建文件
  hosts: 192.168.130.161
  gather_facts: no
  tasks:
    - name: 添加权限创建文件
      stat:
        path: /opt/qingjun
        checksum_algorithm: md5
      register: qingjun
    - debug: 
        msg: "该文件当前md5值为:{{ qingjun.stat.checksum }}"   ##指定msg参数自定义打印信息。

在这里插入图片描述

1.6 synchronize模块

  • 模块连接
  • synchronize模块需要提前安装rsync工具,主控机和受控机都要安装

1.把主控机上的目录一次性同步到所有受控机。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 主控机安装服务
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 安装rsync服务
      yum:
        name: rsync
        state: present

- name: 受控机安装服务
  hosts: all
  gather_facts: no
  tasks:
    - name: 安装rsync服务
      yum:
        name: rsync
        state: present
    - name: 目录同步
      synchronize:
       src: /etc/ansible/playbook
       dest: /opt/

2.查看受控机同步过来的目录。
在这里插入图片描述

二、jinja2模板

  • jinja2模板常用于将主控机带有变量的模板文件传到受控机时,会将变量改为具体的值。
  • 自定义的jinja2模板的变量,也会在playbook中引用。

2.1 构建jinja2模板

定义格式:

  • {% EXPR %}:用于事实表达式或脚本逻辑。
  • {{ EXPR }}:用于向最终用户输出表达式或变量的结果。
  • {# COMMENT #}:不会在最终文件里出现,是jinja2文件本身的注释。

注意事项:

  1. 必须使用template模块,因为它可以修改变量值。
  2. 在jinja2模板文件里使用for语句和if语句,playbook中使用loop语句和when语句。

1.主控机定义模板文件,模板文件里面可以取事实,可以取变量。取的事实值,将会再传到受控机上时把对应的事实值改为受控机本机的信息。可以先使用setup模块查看收集的事实。

[root@localhost playbook]# cat file/hosts.j2 
{# redis配置文件模板 #}
hostname: {{ ansible_facts.hostname }}
redis_ip: {{ ansible_facts.default_ipv4.address }}

2.编写playbook,将本地的file/hosts模板文件传到受控机的/etc/hosts文件。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all,localhost
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /etc/hosts

3.执行playbook,受控机验证。
在这里插入图片描述

2.2 管理jinja2模板

  • 加文件提示,让管理员在操作受控机上的配置文件时,知道这个文件时ansible生成的,不能擅自修改。

1.修改ansible配置文件ansible_managed参数,自定义文件输出提示内容,最后就会在受控机上生成的配置文件里添加这行注释。
在这里插入图片描述
2.修改jinja2模板。
在这里插入图片描述
3.编写playbook。
在这里插入图片描述

2.3 控制结构

  • 用户可以在模板文件中使用jinja2控制结构,以减少重复输入,为play中的每个主机动态输入条目,或者有条件地将文本插入到文件中。

2.3.1 for循环语句

  • 使用{% 自定义逻辑 %}表示执行逻辑。
  • {{ 变量 }} 表示取的变量值将会输出到受控机文件内。

2.3.1.1 for循环+变量

1.jinja2模板定义逻辑,使用for循环变量users里的值,变量user作为输出内容。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for user in users %}      ##for表示开始。
{{ user }}
{% endfor %}      ##endfor表示结束。

2.playbook定义users变量循环体。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    users:        ##将对users变量下的内容进行循环。
      - zhangsan
      - lisi
      - wangwu
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

3.执行playbook,查看受控机上输出的文件,文件里的内容正是playbook里的users变量下的内容,如何循环使用jinja2模板定义。
在这里插入图片描述

2.3.1.2 for循环+loop.index

1.配合loop.index使用,取当前循环索引。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for user in users %}
{{ loop.index }}
{% endfor %} 

在这里插入图片描述

2.3.1.3 for循环+条件判断

  • 对playbook中的变量进行循环,取出不是qingjun的内容,将其输出到受控机的/opt/qingjun文件里。

1.playbook定义变量循环体。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    users:
      - zhangsan
      - lisi
      - wangwu
      - qingjun
      - shito
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

2.jinja2模板定义循环逻辑。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for user in users if not user == "qingjun" %}
number user:{{ loop.index }} ,{{ user }}
{% endfor %} 

3.执行playbook,查看受控机文件内容。
在这里插入图片描述

2.3.1.4 for循环+playbook变量组

  • 在playbook中定义变量组,编写jinja2模板文件时可以根据变量组名称应用取其中的值。

1.playbook中定义变量循环体,同时定义两个组,qingjun组和baimu组。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    group:
      qingjun:
        - zhangsan
        - lisi
        - wangwu
      baimu:
        - skasdk
        - shito
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

2.定义jinja2模板文件,对playbook里的qingjun组里的内容进行循环。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for name  in group['qingjun'] %}           ##playbook中的变量组group,其中有个qingjun组。
number user:{{ loop.index }} ,{{ name }}
{% endfor %} 

3.执行playbook,受控机查看文件内容。
在这里插入图片描述

2.3.15 for循环+清单文件组

  • jinja2模板文件中使用groups引用清单文件中的组,根据组名取其中的值,不会取变量值,所以只会取出主机ip。

1.清单文件里由两个组,mq和qq。可以根据主机组名称来取值。
在这里插入图片描述
2.编写playbook,虽然仍然存在变量组,但在后面的jinja2模板文件里不再引用。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  vars:
    group:
      qingjun:
        - zhangsan
        - lisi
        - wangwu
      baimu:
        - skasdk
        - shito
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

3.定义jinja2模板文件,对清单文件里的mq组内容进行循环。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# 循环语句 #}
{% for name  in groups['mq'] %}           ##清单文件中的组mq。
number user:{{ loop.index }} ,{{ name }}
{% endfor %} 

4.执行playbook,受控机查看文件内容。
在这里插入图片描述

2.3.2 if判断语句

  • if语句与前面的when语句作用相同,当满足条件时则输出内容;不满足条件时,则不输出内容。

1.定义jinja2模板文件,自定义判断条件。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 >2   %}     ##自定义判断条件,当为true时,则输出内容到文件里;当为false时,则不做输出。
number user:{{ ansible_facts['default_ipv4']['address']  }}
{% endif %} 

2.编写playbook,把jinja2文件内容传输到受控机的/opt/qingjun文件里。

[root@localhost playbook]# cat qingjun.yml 
---
- name: 配置受控机配置文件
  hosts: all
  tasks:
    - name: 安装rsync服务
      template:
        src: file/hosts.j2
        dest: /opt/qingjun

3.执行playbook,受控机查看文件内容。
在这里插入图片描述
4.此时改变jinja2中的判断规则,条件为true时,则将内容输出到受控机。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}       ##条件为真,输出内容到受控机。
number user:{{ ansible_facts['default_ipv4']['address']  }}
{% endif %} 

在这里插入图片描述

2.4 变量过滤器

  • 变量过滤器也是编写jinja2模板文件,在里面写一些可以优化输出内容格式的参数语句,方便客户阅读。
  • 格式:{{ 变量 | to_json }}

1.输出内容为普通json格式,参数to_json。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}
{{ ansible_facts['default_ipv4'] | to_json   }}
{% endif %} 

在这里插入图片描述
2.输出为方便阅读的json格式,参数to_nice_json。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}
{{ ansible_facts['default_ipv4'] | to_nice_json }}
{% endif %} 

在这里插入图片描述
3.输出为yaml格式,参数to_yaml和to_nice_yaml。

[root@localhost playbook]# cat file/hosts.j2 
# {{ ansible_managed  }}
{# if判断语句 #}
{% if 1 < 2   %}
{{ ansible_facts['default_ipv4'] | to_nice_yaml }}
{% endif %} 

在这里插入图片描述
4.限制注入变量格式,只能是字符串型,参数from_json和from_yaml。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

LVGL学习(1):中文字体的转换和汉字显示

在使用LVGL的过程中&#xff0c;我们难免需要显示汉字&#xff0c;所以这篇文章就来介绍一下如何转换中文汉字并成功显示到LVGL中。 文章目录 1 字体转换1.1 GUI Guider自动转换1.2 在线转换 2 字体的使用 1 字体转换 1.1 GUI Guider自动转换 打开GUI Guide&#xff0c;创建…

SAP-MM-批次删除归档操作

对于物料主数据的批次管理&#xff0c;一旦一个物料设置了批次管理&#xff0c;并已经产生了业务数据&#xff0c;但是发现当初业务主数据搞错了&#xff0c;此物料不需要在SAP系统进行批次管理&#xff0c;是否就无法取消其批次管理了呢&#xff0c;因为如果要取消此批次管理&…

Java: 字符集详解

1.计算机的存储规则 在计算机中&#xff0c;任意数据都是以二进制的形式来存储的。 每一个二进制数表示的0&#xff0c;1被称为比特位&#xff0c;8个比特位组成一个字节。 字节&#xff1a;计算机最小的存储单元。 2.ASCII字符集 用于存储英文字符&#xff0c;查询制定AS…

阿里云服务器开通全部端口流程

阿里云服务器端口怎么全部打开&#xff1f;在安全组中开启端口号&#xff0c;在安全组中把端口范围设置为-1/-1&#xff0c;授权对象填0.0.0.0/0&#xff0c;即可开通全部端口号&#xff0c;阿腾云来详细说下阿里云服务器端口全部打开教程&#xff1a; 阿里云服务器端口全部开…

结题报告范文

结题报告范文篇一 项目名称&#xff1a;__________ 项目编号&#xff1a; 项目负责人&#xff1a;_________ 专业年级&#xff1a;__________ 所在学院&#xff1a;__________ 起止年月&#xff1a; 电 话&#xff1a;__________ E-mail&#xff1a; 填表时期&#xff1a; 福建…

Vue基础入门(下)

<script src"https://unpkg.com/vuenext"></script> mixin混入&#xff08;局部使用&#xff09; 定义mixin对象 <script>// mixin 混入const mymixin{data(){return {number:2,count:1}},created(){console.log(mymixin created);},methods:{…

【Unity3D】Bloom特效

1 Bloom 特效原理 Bloom 特效是指&#xff1a;将画面中较亮的区域向外扩散&#xff0c;造成一种朦脓的效果。实现 Bloom 特效&#xff0c;一般要经过 3 个阶段处理&#xff1a;亮区域检测、高斯模糊、Bloom 合成。 本文完整资源见→Unity3D Bloom 特效。 1&#xff09;亮区域检…

OS-内存管理1- 4种基本管理方式(连续分配,页式,段式,段页)。

一&#xff0c;内存管理四种方式。 二&#xff0c;连续分配管理方式。 连续分配方式&#xff1a;为用户分配连续的内存空间。 1.单一连续分配方式 2.固定分区分配方式 3.动态分区分配方式 4.三种连续分配方式的对比。 三&#xff0c;基于页式存储管理。 1.页式 为进一步提高…

嵌入式系统中I2C总线通信基本方法

将 I2C spec 文章总结为一篇&#xff0c;目录如下 I2C Introduction I2C Architecture I2C Transfer I2C Synchronization And Arbitration I2C Hs-mode1、I2C Introduction 1、I2C 历史 I2C&#xff1a;Inter-Integrated Circuit&#xff0c;集成电路总线。 I2C 是 Philips…

部分网络结构记录

CVPR 2022 | Mobile-Former来了&#xff01;微软提出&#xff1a;MobileNetTransformer轻量化并行网络 文章链接: CVPR 2022 | Mobile-Former来了&#xff01;微软提出&#xff1a;MobileNetTransformer轻量化并行网络 - 知乎 (zhihu.com) Mobile-Former架构图 Mobile-Form…

Mybatis学习笔记一

目录 一、Mybatis特性二、快速入门1.导入依赖2.mybatis-config.xml配置3.创建mapper接口4.创建MyBatis的映射文件5.通过junit测试功能 三、MyBatis获取参数值的两种方式&#xff08;重点&#xff09;1.单个字面量类型的参数2.多个字面量类型的参数3.map集合类型的参数4.实体类类…

【六一特别文章】Python编写一个六一儿童节问答小游戏及趣味比赛

随着六一儿童节的到来&#xff0c;我们可以为孩子们编写一个有趣的小游戏&#xff0c;让他们在游戏中学习有关六一儿童节的知识。本文将介绍如何用Python编写一个六一儿童节问答小游戏及趣味比赛。 首先&#xff0c;我们需要准备一些有关六一儿童节的问题和答案。这里我准备了…

云原生之docker详解

目录 1.云原生概念 1.1 云原生定义 1.2 云原生元素 1.2.1 微服务 1.2.2 DevOps 1.2.3 持续交付 1.2.4 容器化 2. Docker 2.1 Docker概述 2.1.1 Docker 定义 2.1.2 Docker应用场景 2.1.3 Docker的架构 2.2 Docker命令 2.2.1 docker进程相关命令 2.2.2 docker镜像…

htmlCSS-----CSS选择器(下)

目录 前言&#xff1a; 2.高级选择器 &#xff08;1&#xff09;子代选择器 &#xff08;2&#xff09;伪类选择器 &#xff08;3&#xff09;后代选择器 &#xff08;4&#xff09;兄弟选择器 相邻兄弟选择器 通用兄弟选择器 &#xff08;5&#xff09;并集选择器 &am…

测试进阶必备,这5款http接口自动化测试工具真的很香

现在市场上能做接口自动化测试的工具有很多&#xff0c;一搜一大把&#xff0c;让人眼花缭乱。我们去选择对应实现方式时&#xff0c;不管是框架体系还是成熟稳定的工具&#xff0c;核心目的都是期望引入的技术能在最低投入的情况下达到最优效果。 那么我们选择依据出来了&…

LearnOpenGL-高级OpenGL-9.几何着色器

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 几何着色器使用几何着色器造几个房子爆破物体法向量可视化 几何着色器 简介 在顶点和片段着色器之间有一个可选的几何着色器几何着色器的输入是一个图元&#xff08;如点或三角形&#xff09;的一…

【02】STM32·HAL库开发-Cortex-M系列介绍 | Cortex内核分类及特征 | Cortex-M3/M4/M7介绍

目录 1.ARM公司&#xff08;了解&#xff09;2.Cortex内核分类及特征&#xff08;了解&#xff09;3.Cortex-M3/4/7介绍&#xff08;了解&#xff09; 1.ARM公司&#xff08;了解&#xff09; ARM的R是RISC&#xff08;精简指令集计算机&#xff09;的缩写。ARM公司只做内核设计…

数学模型在水环境影响评价、防洪评价与排污口论证项目中的应用

数学模型在水环境评价、防洪评价和排污口论证等领域中的重要作用&#xff0c;随着人类活动的不断增加和环境问题的日益突出&#xff0c;对水资源和水环境的保护与管理变得至关重要。为了更好地理解和应对这些挑战&#xff0c;数学模型成为一种强大的工具&#xff0c;能够提供量…

ubuntu22.04使用kk安装kubernates1.20.4和kubesphere3.1.1

注意 存储空间不够可能安装失败 环境 master 192.168.1.108node1 192.168.1.106node2 192.168.1.102 root ssh登录 sudo passwd root sudo apt install openssh-server # 定位 /PermitRootLogin 添加 PermitRootLogin yes # 注释掉#PermitRootLogin prohibit-password #St…

【Jenkins+Ant+Jmeter】持续集成接口测试平台搭建

一、环境准备&#xff1a; 1、JDK&#xff1a;Java Downloads | Oracle 2、Jmeter&#xff1a;Apache JMeter - Download Apache JMeter 3、Ant&#xff1a;Apache Ant - Binary Distributions 4、Jenkins&#xff1a;Jenkins 二、Jemter脚本准备&#xff1a; 1、脚本目录&a…