運維學習Day22——Anisible自動化與基本使用

文章目錄

    • 01-Ansible 自動化介紹
      • Ansible 自動化介紹
        • 手動執行任務和自動化執行任務
        • 基礎架構即代碼
        • Ansible 與 DevOps
        • 什么是 ANSIBLE?
        • Ansible 特點
        • Ansible 概念和架構
        • Ansible Way
        • Ansible 用例
      • Ansible 部署
        • 準備實驗環境
        • 控制節點
        • 受管節點
          • Linux
          • Windows
          • 網絡設備
    • 02-Ansible 基本使用
      • Ansible 清單
        • Ansible 軟件包中文件
        • 主機清單
        • 靜態主機清單
          • 最簡單的靜態清單
          • 主機組
          • 主機組嵌套
          • 范圍簡寫
        • 動態主機清單
        • ansible-inventory 命令
      • 管理 ANSIBLE 配置文件
        • 配置文件位置和優先級
        • 配置文件解析
        • 配置文件示例
        • ansible-config 命令
          • ansible-config init
          • ansible-config view
          • ansible-config dump
          • ansible-config list
        • localhost 連接
      • 運行 AD HOC 命令
        • 實驗環境
        • ansible AD HOC 命令
        • Ansible 部分模塊
        • ansible-doc 命令
        • command 模塊
        • shell 模塊
        • raw 模塊
        • ansible AD HOC 命令選項

01-Ansible 自動化介紹

Ansible 自動化介紹

手動執行任務和自動化執行任務

手動執行任務缺點

  • **很容易遺漏某個步驟或錯誤地執行某個步驟。**步驟是否正確執行或產生預期的結果的驗證通常有限。
  • 管理大量服務器很容易會出現差異,加大維護的難度,并給IT環境帶來錯誤或不穩定性。

自動化執行任務優點

  • 通過標準化,確保快速、正確地部署和配置所有系統。
  • 自動執行日常計劃重復性任務,從而空出時間并專注于更重要的事情。
  • 更快速的交付應用。
基礎架構即代碼
  • 良好的自動化系統允許實施基礎架構即代碼方法。**基礎架構即代碼意味著可以使用機器可讀的自動化語言來定義和描述IT基礎架構所處的狀態。**理想情況下,這種自動化語言也應該非常便于人類閱讀,因為這樣就可以輕松了解所處的狀態并對其進行更改。

  • **如果自動化語言使用簡單文本文件表示,還可以使用版本控制系統管理。**這樣做的好處是每個更改都可以嵌入到版本控制系統中,可以獲得隨時間所做更改的歷史記錄,可以將系統恢復到更早的配置。這樣就奠定了一個遵循DevOps的基礎。開發人員可以在自動化語言中定義所需的配置。操作員可以更輕松地查看這些更改以提供反饋,并使用該自動化可重復地確保系統處于開發人員期望的狀態。

Ansible 與 DevOps

在這里插入圖片描述

百度百科:DevOps(Development 和 Operations 的組合詞)是一組過程、方法與系統的統稱,用于促進開發(應用程序/軟件工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。它是一種重視“軟件開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟件交付”和“架構變更”的流程,來使得構建、測試、發布軟件能夠更加地快捷、頻繁和可靠。

DevOps的關鍵在于 communication(溝通和交流)。

Ansible是第一款可以在整個IT范圍讀取和編寫的自動化語言,也是唯一能夠從頭至尾自動化應用生命周期和持續交付管道的自動化引擎。

什么是 ANSIBLE?

Ansible is a simple automation language,通過Playbooks描述和配置IT基礎架構。

Ansible可以管理強大的自動化任務,適用于不同的生產環境。同時,Ansible對于新用戶來說,也可以很快的上手運用到生產環境。

使用案例:

  • OpenStack 搭建和維護
  • OpenShift 搭建和維護
  • ceph 搭建和維護
Ansible 特點
  • 簡單:Ansible Playbooks 是一個人們非常容易查閱,理解和更改的文本文件,用戶不需要具備特定的代碼編寫技能。

  • 功能強大:可以使用Ansible部署應用,例如配置管理,工作流自動化,網絡自動化。還可用于編排整個應用生命周期。

  • 無代理:Ansible 是一個無代理的架構,通過OpenSSH或者WinRM連接到hosts,并執行任務,推送小的程序(Ansible modules)到這些主機上。這些程序用于設置系統到預期狀態。在Ansible執行完成后,任何之前推送的模塊,都會被刪除。Ansible可以隨時使用,因為被管理主機上不需要配置特定代理。正是因為這點,Ansible 才更加高效和安全。

  • 跨平臺支持:可以管理Linux、UNIX、windows 和網絡設備。

  • 非常準確地描述應用:Ansible Playbook使用YAML格式描述生產環境。

  • 可以通過版本控制管理:Ansible Playbooks和projects是純文本格式,可以當作源碼存放在版本控制系統中。

  • 非常容易與其他系統集成: HP SA,Puppet,Jenkins,紅帽衛星服務器等。

Ansible 概念和架構

在這里插入圖片描述

  • NODES:Ansible架構中有兩種計算機類型:
    • 控制節點,安裝有ansible軟件的節點。
    • 受管節點,被ansible管理的Linux系統、Windows系統、網絡設備等。
  • INVENTORY:受管主機清單。
  • PLAYBOOK:Ansible用戶只需要編寫playbook,確保主機是預期狀態。
    • 每個playbook可以包含多個play。
    • 每個play會在一組hosts上按順序執行一系列tasks。
    • 每個task都執行一個模塊,模塊是一個小的代碼段(Python,PowerShell,或者其他語言)。Ansible自帶幾百個模塊,執行不同類型自動化任務,例如操作系統文件,安裝軟件,API調用。Tasks,plays和Playbooks是 idempotent(冪等的),在相同的主機上多次安全地執行Playbooks,讓主機是正確的狀態。如果主機已經是預期狀態,則Playbook不會做任何改變。
  • PLUGINS,添加到Ansible中的代碼段,用于擴展Ansible平臺。
Ansible Way
  • Complexity Kills Productivity(復雜性會破壞效率),越簡單越好。Ansible的設計宗旨是工具易用,自動化易寫易讀,所以在創建自動化時盡可能地追求簡單化。
  • Optimize For Readability(專為易讀性優化),Ansible自動化語言圍繞簡單易讀的聲明性文本文件來構建。正確編寫的Ansible Playbook可以清楚地記錄您的工作流自動化。
  • Think Declaratively聲明式思維),Ansible是一種要求狀態引擎。它通過表達您希望系統處于何種狀態來解決如何自動化IT部署的問題。Ansible的目標是通過僅執行必要的更改,使您的系統處于所需的狀態。
Ansible 用例
  • 配置管理:集中化配置文件管理和部署是Ansible的常見用例,很多高級用戶也是通過這種方式了解Ansible自動化平臺。
  • 應用部署:通過Ansible定義應用,以及使用紅帽Ansible Tower管理部署時,各團隊可以更加有效地管理從開發到生產的整個應用生命周期。
  • 工作流管理:Ansible 和紅帽Ansible Tower有助于簡化調配系統的流程,不論您是要PXE引導和kickstart安裝裸機恢復服務器或虛擬機,還是從模板創建虛擬機或云實例。
  • 持續交付:創建CI/CD管道需要多個團隊的協調和參與。如果沒有組織內人人可用的簡單自動化平臺,就無法實現這個目標。Ansible Playbook讓您的應用可以在整個生命周期內得到正確部署(和管理)
  • 安全性和合規性:當您在Ansible Playbook中定義安全策略時,也可以將掃描和修復整站安全策略集成到其他自動化流程中。確保安全應該是您所有部署中不可或缺的組成部分,而不是事后才去考慮的部分。
  • 編排:僅配置本身不足以定義您的環境,您還需定義多個配置間就應如何交互,并確保以整體的方式管理各類分散資源。

Ansible 部署

準備實驗環境

實驗環境 /etc/hosts

10.1.8.10 controller.zzh.cloud controller
10.1.8.11 node1.zzh.cloud node1
10.1.8.12 node2.zzh.cloud node2
10.1.8.13 node3.zzh.cloud node3
10.1.8.14 node4.zzh.cloud node4

配置控制節點 zzh 用戶使用zzh用戶免密登錄所有節點,并免提sudo提權執行任何命令。

# 所有節點配置/etc/hosts
[root@controller ~ 11:08:10]# cat >> /etc/hosts <<EOF
> 
> ################# ansible #################
> 10.1.8.10 controller.zzh.cloud controller
> 10.1.8.11 node1.zzh.cloud node1
> 10.1.8.12 node2.zzh.cloud node2
> 10.1.8.13 node3.zzh.cloud node3
> 10.1.8.14 node4.zzh.cloud node4
> EOF# 所有節點添加用戶
[root@all-node ~]# useradd zzh
[root@all-node ~]# echo redhat | passwd --stdin zzh# 所有節點,配置免密提權
[root@all-node ~]# echo 'zzh ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/zzh# 創建密鑰對
[zzh@centos7 ~]$ [ -d ~/.ssh ] || mkdir -m 700 .ssh
[zzh@centos7 ~]$ ssh-keygen -t rsa -f .ssh/id_rsa -N ''# 推送公鑰到目標主機
[zzh@controller ~ 11:40:41]$ for host in controller node{1..4}; do sshpass -p 123 ssh zzh@$host hostname;done
[zzh@controller ~ 11:41:10]$ for host in controller node{1..4}; do sshpass -p 123 ssh-copy-id zzh@$host;done# 驗證免密登錄
[root@controller ~ 11:41:31]# for host in controller node{1..4}; do ssh zzh@$host hostname;done
controller.zzh.cloud
node1.zzh.cloud
node2.zzh.cloud
node3.zzh.cloud
node4.zzh.cloud
控制節點

控制節點即用來安裝 Ansible 軟件的主機節點。控制節點可以是一個或多個,由 ansible 管理的主機不用安裝 Ansible。

提示:控制節點是Linux或UNIX系統,不支持 Windows 作為控制節點。

安裝 ansible

[zzh@controller ~ 11:41:47]# sudo yum install -y ansible
[zzh@centos7 ~]$ ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/home/zzh/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /bin/ansiblepython version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
受管節點
Linux

受管節點滿足的要求取決于控制節點連接它們的方式以及它們要運行的模塊:

  • Python 版本:Linux和UNIX受管節點需要安裝Python才能運行大部分的模塊。
  • 一些模塊不需要Python。例如,raw模塊的參數直接通過配置的遠程shell運行,在沒有Python環境的設備上使用。不過,raw模塊難以通過安全的冪等方式使用。
Windows

Ansible隨附了多個專門為Microsoft Windows系統設計的模塊。這些模塊列在Ansible模塊索引的Windows Modules 部分。

大部分專門為Microsoft Windows受管節點設計的模塊需要在受管節點上:

  • 安裝 Power Shell 3.0或更高版本。
  • 配置 Power Shell 遠程連接。
  • 安裝.NET Framework 4.0或更高版本。

本課程的示例中使用基于Linux的受管節點,不會深入闡述管理基于Microsoft Windows的受管節點時的具體差別和必要調整。可以在Ansible網站上查看更多信息。

網絡設備

還可以使用Ansible自動化來配置受管網絡設備,例如路由器和交換機。Ansible包含大量專門為此目的而設計的模塊。其中包括對Cisco IOS、IOSXR和NX-OS的支持;Juniper Junos;AristaEOS;以及基于VyOS的網絡設備等。

由于大多數網絡設備無法運行Python,因此Ansible在控制節點上運行網絡模塊,而不是在受管節點上運行。特殊連接方法也用于與網絡設備通信,通常使用SSH上的CLI、SSH上的XML或HTTP(S)上的API。

02-Ansible 基本使用

Ansible 清單

Ansible 軟件包中文件
[zzh@controller ~]# rpm -ql ansible
  • 配置文件目錄 /etc/ansible
  • 執行文件目錄 /usr/bin
  • lib依賴庫目錄 /usr/lib/python2.7/site-packages/ansible
  • 插件 /usr/share/ansible/plugins
  • Help文檔目錄 /usr/share/doc/ansible
  • Man文檔目錄 /usr/share/man/man1/
主機清單

Inventory 定義Ansible將要管理的一批主機。這些主機也可以分配到組中,以進行集中管理 組可以包含子組,主機也可以是多個組的成員。清單還可以設置應用到它所定義的主機和組的變量。

通過以下方式定義主機清單:

  • **靜態主機清單:**以文本文件的方式來定義。
  • **動態主機清單:**使用外部信息提供程序通過腳本或其他程序來自動生成。目的是從啟動環境中獲取主機清單,例如openstack、kubernetes、zabbix等。
靜態主機清單

主機清單支持多種格式,例如ini、yaml、腳本等。

本次課程使用 ini 格式。

最簡單的靜態清單

受管節點的主機名或IP地址的列表,每行一個。

示例:

[zzh@controller ~]$ vim inventory
web1.example.com
web2.example.com
db1.example.com
db2.example.com
192.0.2.42

驗證主機是否在inventory中

[zzh@controller ~]$ ansible --list-hosts -i inventory web1.example.comhosts (1):web1.example.com
[zzh@controller ~]$ ansible --list-hosts -i inventory 192.0.2.42hosts (1):192.0.2.42

ansible命令通過–inventory PATHNAME或-i PATHNAME選項在命令行中指定清單文件的位置,其中PATHNAME是所需清單文件的路徑。

主機組

還可以將受管節點組織為主機組。通過主機組,更加有效地對一系列系統運行Ansible。

格式:

[groupname]
hostname
hostip

示例:

app1.example.com[webservers]
web1.example.com
web2.example.com[dbservers]
db1.example.com
db2.example.com
192.0.2.42192.0.2.43

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory webservershosts (2):web1.example.comweb2.example.com# 注意:192.0.2.43屬于dbservers組
[zzh@controller ~]$ ansible --list-hosts -i inventory dbservershosts (4):db1.example.comdb2.example.com192.0.2.42192.0.2.43

有兩個組總是存在的:

  • all:包含inventory中所有主機。
  • ungrouped:inventory中列出的,但不屬于任何組的主機。

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory allhosts (7):app1.example.comweb1.example.comweb2.example.comdb1.example.comdb2.example.com192.0.2.42192.0.2.43
[zzh@controller ~]$ ansible --list-hosts -i inventory ungroupedhosts (1):app1.example.com

根據需要,將主機分配在多個組中,例如根據主機的角色、其物理位置以及是否在生產環境中等因素。

[webservers]
web1.example.com
web2.example.com
192.168.3.7[dbservers]
db1.example.com
db2.example.com
192.0.2.42[eastdc]
web1.example.com
db1.example.com[westdc]
web2.example.com
db2.example.com

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory webservershosts (3):web1.example.comweb2.example.com192.168.3.7
[zzh@controller ~]$ ansible --list-hosts -i inventory eastdchosts (2):web1.example.comdb1.example.com
主機組嵌套

一個主機組還可以屬于另外一個主機組。

示例:

[eastdc]
web1.example.com
db1.example.com[westdc]
web2.example.com
db2.example.com[dc:children]
eastdc
westdc

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory dchosts (4):web1.example.comdb1.example.comweb2.example.comdb2.example.com

子組中的主機組必須定義,否則會出現語法上的報錯。

示例:

[eastdc]
web1.example.com
db1.example.com[westdc]
web2.example.com
db2.example.com[dc:children]
eastdc
westdc
node1

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory dc[WARNING]:  * Failed to parse /home/zzh/inventory with yaml plugin: Syntax
Error while loading YAML.   did not find expected <document start>  The error
appears to be in '/home/zzh/inventory': line 2, column 1, but may be elsewhere
in the file depending on the exact syntax problem.  The offending line appears to
be:  [eastdc] web1.example.com ^ here[WARNING]:  * Failed to parse /home/zzh/inventory with ini plugin:
/home/zzh/inventory:12: Section [dc:children] includes undefined group:
node1[WARNING]: Unable to parse /home/zzh/inventory as an inventory source[WARNING]: No inventory was parsed, only implicit localhost is available[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'hosts (4):web1.example.comdb1.example.comweb2.example.comdb2.example.com
范圍簡寫

通過指定主機名稱或IP地址的范圍來簡化Ansible主機清單。您可以指定數字或字母范圍。

語法:[start:end]

示例:

# 代表192.168.4.0-192.168.7.255
[priv]
192.168.[4:7].[0:255]#代表01,02...20
[hosts]
host[01:20].example.com# 代表a b c
[servers]
server[a:c].example.com

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory hostshosts (20):host01.example.comhost02.example.com
......host19.example.comhost20.example.com[zzh@controller ~]$ ansible --list-hosts -i inventory privhosts (1024):192.168.4.0192.168.4.1192.168.4.2
......192.168.7.253192.168.7.254192.168.7.255[zzh@controller ~]$ ansible --list-hosts -i inventory servershosts (3):node1.example.comnode2.example.comserverc.example.com

以下是錯誤的范圍示例:

[servers]
server[0a:2c].example.com

驗證:

[zzh@controller ~]$ ansible --list-hosts -i inventory all[WARNING]:  * Failed to parse /home/zzh/inventory with yaml plugin: Syntax
Error while loading YAML.   did not find expected <document start>  The error
appears to be in '/home/zzh/inventory': line 2, column 1, but may be elsewhere
in the file depending on the exact syntax problem.  The offending line appears to
be:  [servers] server[0a:2c].example.com ^ here[WARNING]:  * Failed to parse /home/zzh/inventory with ini plugin: invalid
literal for int() with base 10: '0a'[WARNING]: Unable to parse /home/zzh/inventory as an inventory source[WARNING]: No inventory was parsed, only implicit localhost is available[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'hosts (0):
# 配置普通用戶 秘鑰登錄所有節點。
[zzh@controller ~ 11:36:09]$ sudo yum install -y sshpass
[zzh@controller ~ 11:36:30]$ ssh-copy-id node2
[zzh@controller ~ 11:36:43]$ for host in controller node{1..4}; do sshpass -p 123 ssh-copy-id zzh@$host; done
# 驗證秘鑰登錄
[zzh@controller ~ 11:36:59]$ for host in controller node{1..4}; do ssh zzh@$host hostname;done
動態主機清單

使用外部數據提供的信息動態生成Ansible清單信息。

本課程內容不做進一步討論。

ansible-inventory 命令

通過不同的格式查看清單文件。

[zzh@controller ~]$ ansible-inventory --help
Usage: ansible-inventory [options] [host|group]Options:--ask-vault-pass      ask for vault password--export              When doing an --list, represent in a way that isoptimized for export,not as an accurate representationof how Ansible has processed it-h, --help            show this help message and exit-i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORYspecify inventory host path or comma separated hostlist. --inventory-file is deprecated--output=OUTPUT_FILE  When doing an --list, send the inventory to a fileinstead of of to screen--playbook-dir=BASEDIRSince this tool does not use playbooks, use this as asubstitute playbook directory.This sets the relativepath for many features including roles/ group_vars/etc.--toml                Use TOML format instead of default JSON, ignored for--graph--vars                Add vars to graph display, ignored unless used with--graph--vault-id=VAULT_IDS  the vault identity to use--vault-password-file=VAULT_PASSWORD_FILESvault password file-v, --verbose         verbose mode (-vvv for more, -vvvv to enableconnection debugging)--version             show program's version number, config file location,configured module search path, module location,executable location and exit-y, --yaml            Use YAML format instead of default JSON, ignored for--graphActions:One of following must be used on invocation, ONLY ONE!--list              Output all hosts info, works as inventory script--host=HOST         Output specific host info, works as inventory script--graph             create inventory graph, if supplying pattern it mustbe a valid group nameShow Ansible inventory information, by default it uses the inventory script
JSON format

示例清單:

app1.example.com[webservers]
web1.example.com
web2.example.com
192.168.3.7[dbservers]
db1.example.com
db2.example.com
192.0.2.42[eastdc]
web1.example.com
db1.example.com[westdc]
web2.example.com
db2.example.com[dc:children]
eastdc
westdc

驗證:

# 樹形結構顯示
[zzh@controller ~ 14:19:27]$ ansible-inventory -i inventory --graph
@all:|--@dbservers:|  |--192.0.2.42|  |--db1.example.com|  |--db2.example.com|--@dc:|  |--@eastdc:|  |  |--db1.example.com|  |  |--web1.example.com|  |--@westdc:|  |  |--db2.example.com|  |  |--web2.example.com|--@ungrouped:|  |--app1.example.com|--@webservers:|  |--192.168.3.7|  |--web1.example.com|  |--web2.example.com# yaml格式顯示
[zzh@controller ~ 14:20:24]$ ansible-inventory -i inventory --list -y
all:children:dbservers:hosts:192.0.2.42: {}db1.example.com: {}db2.example.com: {}dc:children:eastdc:hosts:db1.example.com: {}web1.example.com: {}westdc:hosts:db2.example.com: {}web2.example.com: {}ungrouped:hosts:app1.example.com: {}webservers:hosts:192.168.3.7: {}web1.example.com: {}web2.example.com: {}

管理 ANSIBLE 配置文件

配置文件位置和優先級
  1. 環境變量 ANSIBLE_CONFIG
  2. ./ansible.cfg,當前位置中的 ansible.cfg,當前位置一般是項目目錄。
  3. ~/.ansible.cfg
  4. /etc/ansible/ansible.cfg

從上到下,優先級越來越低。

建議:在當前目錄下定義ansible.cfg文件。

驗證優先級

# 環境準備
[zzh@controller ~ 14:25:44]$ mkdir web && cd web# 查看ansible命令當前使用的配置文件
[zzh@controller web 14:58:05]$ ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/home/zzh/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]# 或者
[zzh@controller web]$ ansible --version |grep 'config file'config file = /etc/ansible/ansible.cfg[zzh@controller web 14:58:18]$ touch ~/.ansible.cfg
[zzh@controller web 14:59:00]$ ansible --version |grep 'config file'config file = /home/zzh/.ansible.cfg[zzh@controller web 14:59:16]$ touch ansible.cfg
[zzh@controller web 15:03:12]$ ansible --version |grep 'config file'config file = /home/zzh/web/ansible.cfg[zzh@controller web 15:03:20]$ export ANSIBLE_CONFIG=/opt/ansible.cfg
[zzh@controller web 15:03:31]$ sudo touch /opt/ansible.cfg
[zzh@controller web 15:03:38]$ ansible --version |grep 'config file'config file = /opt/ansible.cfg
配置文件解析

ansible 默認配置文件 /etc/ansible/ansible.cfg。

Ansible 配置文件包括以下部分:

[zzh@controller web 15:04:30]$ grep "^\[" /etc/ansible/ansible.cfg
[defaults]
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

常用參數解析如下:

[defaults]
# inventory 指定清單文件路徑
inventory = /etc/ansible/hosts# 并發執行同一個任務的主機數量
forks          = 5# ansible檢查任務是否執行完成的時間間隔
poll_interval  = 15# 連接登錄到受管主機時是否提示輸入密碼
ask_pass = True# 控制facts如何收集
# smart - 如果facts已經收集過了,就不收集了。
# implicit - facts收集,劇本中使用gather_facts: False關閉facts收集。
# explicit - facts不收集,劇本中使用gather_facts: True關閉facts收集。
gathering = implicit# 收集facts范圍
# all - gather all subsets
# network - gather min and network facts
# hardware - gather hardware facts (longest facts to retrieve)
# virtual - gather min and virtual facts
# facter - import facts from facter
# ohai - import facts from ohai
# You can combine them using comma (ex: network,virtual)
# You can negate them using ! (ex: !hardware,!facter,!ohai)
# A minimal set of facts is always gathered.
gather_subset = all# 收集facts超時時間
gather_timeout = 10# 變量注入,通過ansible_facts引用
inject_facts_as_vars = True# 定義角色路徑,以冒號分隔
roles_path = /etc/ansible/roles# SSH是否檢驗 host key
host_key_checking = False# 連接登錄到受管主機時使用的用戶身份
remote_user = root# ansible 命令和ansible-playbook 命令輸出內容存放位置
log_path = /var/log/ansible.log# ansible 命令默認模塊
module_name = command# ssh 私鑰文件位置
private_key_file = /path/to/file# 默認ansible-vault命令的密碼文件
vault_password_file = /path/to/vault_password_file# 定義ansible_managed變量值
ansible_managed = Ansible managed# 劇本執行過程中,遇到未定義的變量不報錯
error_on_undefined_vars = False# 系統告警啟用
system_warnings = True# 下架告警啟用
deprecation_warnings = True# 使用command和shell模塊時,是否提示告警
command_warnings = False# facts保存在哪里,例如redis
fact_caching = memory[inventory]
# 啟用的清單插件, 默認為: 'host_list', 'script', 'auto', 'yaml', 'ini', 'toml'
#enable_plugins = host_list, virtualbox, yaml, constructed# 當清單源是一個目錄的時候,忽略這些后綴的清單文件
#ignore_extensions = .pyc, .pyo, .swp, .bak, ~, .rpm, .md, .txt, ~, .orig, .ini, .cfg, .retry[privilege_escalation]
# 連接到受管主機后是否需要進行權限提升或切換用戶
become=True# 使用何種方式進行用戶切換或提權
become_method=sudo# 用戶切換或提權后的對應用戶
become_user=root# 進行用戶切換或提權時是否提示輸入密碼
become_ask_pass=False

說明:“#” 和 ";"開頭的行,作為注釋。

配置文件示例

對于基本操作, 使用 [defaults][privilege_escalation] 即可。

配置文件示例

[zzh@controller web 16:11:39]$ vim ansible.cfg
[defaults]
remote_user = zzh
inventory = ./inventory[privilege_escalation]
become = True
become_user = root
become_method = sudo
become_ask_pass = False

最終效果:

[zzh@controller web 16:12:42]$ ansible all -a id
node3 | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root)
node2 | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root)
node1 | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root)
node4 | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root)
ansible-config 命令

用于分析ansible命令的配置。

[zzh@controller web 16:17:56]$ ansible-config view
[defaults]
inventory = ./inventory
remote_user = zzh[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=Falsepositional arguments:{list,dump,view,init}list                Print all config optionsdump                Dump configurationview                View configuration fileinit                Create initial configurationoptions:--version             show program's version number, config file location,configured module search path, module location, executablelocation and exit-h, --help            show this help message and exit-v, --verbose         Causes Ansible to print more debug messages. Adding multiple-v will increase the verbosity, the builtin pluginscurrently evaluate up to -vvvvvv. A reasonable level tostart is -vvv, connection debugging might require -vvvv.This argument may be specified multiple times.
ansible-config init

生成 ansible.cfg 模版文件。

[zzh@controller web]$ ansible-config init > ansible.cfg.example
ansible-config view

查看當前ansible配合文件內容。

[zzh@controller web 17:18:37]$ ansible --version|grep fileconfig file = /home/zzh/web/ansible.cfg[zzh@controller web 17:19:23]$ ansible-config view
[defaults]
inventory = ./inventory
remote_user = zzh[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
ansible-config dump

當前ansible生效的所有配置,包括所有默認值。

[zzh@controller web 17:19:45]$ ansible-config dump
ACTION_WARNINGS(default) = True
AGNOSTIC_BECOME_PROMPT(default) = True
ALLOW_WORLD_READABLE_TMPFILES(default) = False
......
DEFAULT_HOST_LIST(/home/zzh/web/ansible.cfg) = ['/home/zzh/web/inventory']
......
HOST_KEY_CHECKING(default) = True
......
ansible-config list

查看所有配置參數用途,配置位置等。

DEFAULT_HOST_LIST:default: /etc/ansible/hostsdescription: Comma separated list of Ansible inventory sourcesenv:- {name: ANSIBLE_INVENTORY}expand_relative_paths: trueini:- {key: inventory, section: defaults}name: Inventory Sourcetype: pathlistyaml: {key: defaults.inventory}
localhost 連接

默認Ansible連接到受管主機的協議為 smart (通常采用最有效的方式 - SSH)。如本地清單中并未指定localhost,Ansible會隱式設置localhost,并使用local連接類型連接localhost。

  • local連接類型會忽略remote_user的設置,并且直接在本地系統上運行命令。
  • 如果使用了特權提升,此時ansible將會在運行sudo時使用運行Ansible命令的賬戶的身份進行提權,而非remote_user所指定的賬戶。

更改 localhost 連接方式:清單中包涵 localhost。

運行 AD HOC 命令

實驗環境
[zzh@controller ~]$ mkdir web && cd web[zzh@controller web]$ cat > ansible.cfg <<'EOF'
[defaults]
remote_user = zzh
inventory = ./inventory[privilege_escalation]
become = True
become_user = root
become_method = sudo
become_ask_pass = False
EOF[zzh@controller web]$ cat > inventory <<'EOF'
node1
EOF
ansible AD HOC 命令

命令作用

  • 快速執行單個Ansible任務,而不需要將它保存下來供以后再次運行。它們是簡單的在線操作,無需編寫playbook即可運行。

  • **快速測試和更改很有用。**例如,您可以使用臨時命令確保一組服務器上的/ etc/hosts文件中存在某一特定的行。您可以使用另一個臨時命令在許多不同的計算機上高效重啟一項服務,或者確保特定的軟件包為最新版本。

命令語法

ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
  • host-pattern,是inventory中定義的主機或主機組,可以為ip、hostname、inventory中的group組名、具有“,”或“*”或“:”等特殊字符的匹配型字符串,是必選項。
  • -m module,module是一個小程序,用于實現具體任務。
  • -a ‘module arguments’,是模塊的參數。
  • -i inventory,指定inventory文件。

命令執行結果顏色說明

Ansible的返回結果都非常友好,用3種顏色來表示執行結果:

  • 紅色:表示執行過程有異常,一般會中止剩余所有的任務。
  • 綠色:表示目標主機已經是預期狀態,不需要更改 。
  • 黃色:表示命令執行結束后目標有狀態變化,并設置為預期狀態,所有任務均正常執行。
Ansible 部分模塊

Ansible 模塊存放位置:/usr/lib/python*/site-packages/ansible

官網:模塊清單。

  • 文件模塊
    • copy: 將控制主機上的文件復制到受管節點,類似于scp
    • file: 設置文件的權限和其他屬性
    • lineinfile: 確保特定行是否在文件中
    • synchronize: 使用 rsync 將控制主機上的文件同步到受管節點
  • 軟件包模塊
    • package: 自動檢測操作系統軟件包管理器
    • yum: 使用 YUM 軟件包管理器管理軟件包
    • apt: 使用 APT 軟件包管理器管理軟件包
    • gem: 管理 Rubygem
    • pip: 從 PyPI 管理 Python 軟件包
  • 系統模塊
    • **ansible.posix.firewalld **: 使用firewalld管理任意端口和服務
    • reboot: 重新啟動計算機
    • service: 管理服務
    • user、group: 管理用戶和組帳戶
  • NetTools模塊
    • get_url: 通過HTTP、HTTPS或FTP下載文件
    • nmcli: 管理網絡
    • uri: 與 Web 服務交互
ansible-doc 命令
[zzh@controller ~ 17:00:26]$ ansible-doc -h
usage: ansible-doc [-h] [--version] [-v] [-M MODULE_PATH][--playbook-dir BASEDIR][-t {become,cache,callback,cliconf,connection,httpapi,inventory,lookup,netconf,shell,module,strategy,vars}][-j] [-F | -l | -s | --metadata-dump][plugin [plugin ...]]plugin documentation toolpositional arguments:plugin                Pluginoptional arguments:--metadata-dump       **For internal testing only** Dump json metadata forall plugins.--playbook-dir BASEDIRSince this tool does not use playbooks, use this as asubstitute playbook directory.This sets the relativepath for many features including roles/ group_vars/etc.--version             show program's version number, config file location,configured module search path, module location,executable location and exit-F, --list_files      Show plugin names and their source files withoutsummaries (implies --list)-M MODULE_PATH, --module-path MODULE_PATHprepend colon-separated path(s) to module library (default=~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules)-h, --help            show this help message and exit-j, --json            Change output into json format.-l, --list            List available plugins-s, --snippet         Show playbook snippet for specified plugin(s)-t {become,cache,callback,cliconf,connection,httpapi,inventory,lookup,netconf,shell,module,strategy,vars}, --type {become,cache,callback,cliconf,connection,httpapi,inventory,lookup,netconf,shell,module,strategy,vars}Choose which plugin type (defaults to "module").Available plugin types are : ('become', 'cache','callback', 'cliconf', 'connection', 'httpapi','inventory', 'lookup', 'netconf', 'shell', 'module','strategy', 'vars')-v, --verbose         verbose mode (-vvv for more, -vvvv to enableconnection debugging)See man pages for Ansible CLI options or website for tutorials
https://docs.ansible.com

示例:

# 查看模塊清單及說明
[zzh@controller ~ 17:00:38]$ ansible -l
fortios_router_community_list                Configure community lists i...
azure_rm_devtestlab_info                     Get Azure DevTest Lab facts
......# 查看模塊清單及位置
[zzh@controller ~ 17:01:07]$ ansible-doc -F
fortios_router_community_list    /usr/lib/python2.7/site-packages/ansibl....
azure_rm_devtestlab_info         /usr/lib/python2.7/site-packages/ansibl....
......# 查看特定模塊說明文檔
[zzh@controller web 17:21:58]$ ansible-doc user
> USER    (/usr/lib/python2.7/site-packages/ansible/modules/system/user.py)Manage user accounts and user attributes. For Windows targets, use the[win_user] module instead.* This module is maintained by The Ansible Core Team# 模塊選項,=開頭是必選選項
OPTIONS (= is mandatory):- appendIf `yes', add the user to the groups specified in `groups'.If `no', user will only be added to the groups specified in `groups', removingthem from all other groups.Mutually exclusive with `local'[Default: False]type: bool
... ...# 提示信息
NOTES:* There are specific requirements per platform on user managementutilities. However they generally come pre-installed with thesystem and Ansible will require they are present at runtime. Ifthey are not, a descriptive error message will be shown.
... ...# 參考信息
SEE ALSO:* Module authorized_keyThe official documentation on the authorized_key module.https://docs.ansible.com/ansible/latest/modules/authorized_key_module.html
... ...# 作者
AUTHOR: Stephen Fromm (@sfromm)# METADATA描述了誰在維護該模塊。
# status記錄了模塊開發狀態。
#    stableinterface: 模塊的關鍵字穩定,將盡力確保不刪除關鍵字或更改其含義。
#    preview: 模塊處于技術預覽階段,可能不穩定,其關鍵字可能會更改,或者它可能需要本身會受到不兼容更改的庫或Web服務。
#    deprecated: 未來某一發行版中將不再提供。
#    removed: 模塊已從發行版中移除,但因文檔需要存在存根,以幫助之前的用戶遷移到新的模塊。METADATA:status:- stableinterface# supported_by記錄了哪些社區在維護該模塊:
#    core:Ansible核心開發人員維護,始終隨Ansible提供。
#    curated:模塊由社區中的合作伙伴或公司提交并維護。這些模塊的維護者必須留意報告的任何問題,或者調取針對該模塊提出的請求。在社區維護人員批準了更改后,上游 “core” 開發人員審核對策劃模塊提出的更改。核心提交者也確保因為Ansible引擎中的變化而對這些模塊造成的任何問題得到修正。這些模塊目前隨Ansible提供,但是可能會在未來某個時候另外打包。
#    community:模塊不受到core上游開發人員、合作伙伴或公司的支持,完全由一般開源社區維護。此類別中的模塊仍然完全可用,但對問題的響應速度完全取決于社區。這些模塊目前也隨Ansible提供,但是可能會在未來某個時候另外打包。supported_by: core
... ...# 模塊使用示例
EXAMPLES:- name: Add the user 'johnd' with a specific uid and a primary group of 'admin'user:name: johndcomment: John Doeuid: 1040group: admin
... ...# 模塊返回值說明
RETURN VALUES:append:description: Whether or not to append the user to groupsreturned: When state is 'present' and the user existstype: boolsample: True
... ...

如果現有的模塊無法實現現有需求,用戶也可以自行編寫模塊:

  • Ansible會從變量ANSIBLE_LIBRARY中查找模塊
  • 如果該變量未設置,將會從ansible.cfg配置文件library設置的位置查找模塊
command 模塊

command 模塊允許管理員在受管節點的命令行中運行任意命令。要運行的命令通過-a選項指定為該模塊的參數。

[zzh@controller web 17:22:55]$ ansible node1 -m command -a 'hostname'
node1 | CHANGED | rc=0 >>
node1.zzh.cloud[zzh@controller web 17:23:08]$ ansible node1 -m command -a 'hostname' -o
node1 | CHANGED | rc=0 | (stdout) node1.zzh.cloud

說明:

  • command 模塊執行的遠程命令不受受管節點上的shell處理,無法訪問shell環境變量,也不能執行重定向和傳送等shell操作。
  • 如果臨時命令沒有指定模塊,Ansible默認使用command模塊。
shell 模塊

shell模塊允許您將要執行的命令作為參數傳遞給該模塊。 Ansible隨后對受管節點遠程執行該命令。與command模塊不同的是, 這些命令將通過受管節點上的shell進行處理。因此,可以訪問shell環境變量,也可使用重定向和管道等shell操作。

[zzh@controller web]$ ansible node1 -m command -a set
node1 | FAILED | rc=2 >>
[Errno 2] No such file or directory: 'set': 'set'[zzh@controller web]$ ansible node1 -m shell -a set
node1 | CHANGED | rc=0 >>
BASH=/bin/sh
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
......

**注意:**command和shell模塊要求被管理主機安裝Python。

raw 模塊

raw 模塊,可以直接在遠端主機shell中執行命令,遠端主機不需要安裝Python(特別是針對網絡設備)。在大部分場景中,不推薦使用command、shell、raw模塊執行命令,因為這些模塊不具有冪等性。

[zzh@controller web 17:23:52]$ ansible node1 -m raw -a 'echo "hello ansible" > /tmp/hello.txt'
node1 | CHANGED | rc=0 >>
Shared connection to node1 closed.
# 此處多了一個現實:斷開連接,相當于通過ssh連接到受管節點執行命令。[zzh@controller web 17:24:03]$ ansible node1 -a 'cat /tmp/hello.txt'
node1 | CHANGED | rc=0 >>
hello ansible# 對比shell模塊
[zzh@controller web 17:24:23]$ ansible node1 -m shell -a 'echo "hello ansible" > /tmp/hello.txt'
node1 | CHANGED | rc=0 >>
ansible AD HOC 命令選項

臨時命令選項優先級高于配置文件中配置。

配置文件指令命令行選項
inventory-i
remote_user-u
ask_pass-k, --ask-pass
become–become, -b
become_method–become_method
become_user–become-user
become_ask_pass–ask-become-pass, -K

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93114.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93114.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93114.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Codeforces Deque工藝

題目來源&#xff1a; 問題 - 2128B - Codeforces 這道題有些地方表達的并不是特別準確&#xff0c;首先就是從最左端與最右端移除一個元素&#xff0c;實際含義是從原數組的最左端或者最右段依次取出一個元素構成一個新的數組&#xff0c;使得這個新數組的數組符合題目的“好…

談談《More Effective C++》的條款30:代理類

在《More Effective C》的條款30中&#xff0c;Scott Meyers深入探討了**代理類&#xff08;Proxy Classes&#xff09;**的設計與應用。代理類是一種通過重載運算符模擬原始對象行為的設計模式&#xff0c;其核心目標是在不直接暴露原始對象的情況下&#xff0c;提供額外功能、…

實用AI在線開發工具網址匯總(含免費限額,國內可訪)

AI在線開發工具 標題分類屬性在線開發工具1https://www.builder.io/介紹詳見&#xff1a;AI在線編碼三劍客對決&#xff1a;Replit/Builder/Blot在線開發工具2https://replit.com/介紹詳見&#xff1a;AI在線編碼三劍客對決&#xff1a;Replit/Builder/Blot在線開發工具3https…

react+vite來優化下每次使用hook函數都要引入的情況

前言&#xff1a;react項目中&#xff0c;每個頁面都得引入react/react-dom等元素&#xff0c;就像uniapp的項目中得onload,onshow等生命周期一樣&#xff0c;這里也可以用vite的插件&#xff1a;unplugin-auto-import 來解決我們每次都需要調用才能使用hook方法的問題。安裝&a…

【排序算法】⑤冒泡排序

系列文章目錄 第一篇&#xff1a;【排序算法】①直接插入排序-CSDN博客 第二篇&#xff1a;【排序算法】②希爾排序-CSDN博客 第三篇&#xff1a;【排序算法】③直接選擇排序-CSDN博客 第四篇&#xff1a;【排序算法】④堆排序-CSDN博客 第五篇&#xff1a;【排序算法】⑤冒…

如何使用gpt進行模式微調(2)?

對 GPT&#xff08;Generative Pre-trained Transformer&#xff09;類大模型進行微調&#xff08;Fine-tuning&#xff09;&#xff0c;是將其適配到特定任務或領域的關鍵步驟。以下是 ??全流程指南??&#xff0c;涵蓋方法選擇、數據準備、訓練配置、評估部署等核心環節&a…

基于飛算JavaAI實現圖書管理系統框架部署

摘要 本文詳細介紹了如何利用飛算JavaAI技術實現圖書管理系統的框架部署。首先闡述了飛算JavaAI的基本概念、特點和優勢&#xff0c;接著對圖書管理系統的需求進行分析&#xff0c;然后按照軟件開發流程&#xff0c;從系統設計、代碼生成、框架搭建到部署測試&#xff0c;逐步展…

ODE-by-Matlab-01-人口增長模型

博客地址&#xff1a;Matlab微分方程01-模型 馬爾薩斯模型 馬爾薩斯模型是人口增長模型中最簡單的模型&#xff0c;它由英國牧師家馬爾薩斯在1798年提出。 他利用在教堂工作的機會&#xff0c;收集英國100多年的人口數據&#xff0c;發現人口的相對增長率是常數。 在這個基礎…

云原生環境 Prometheus 企業級監控實戰

目錄 一&#xff1a;基于 kubernetes 的 Prometheus 介紹 1&#xff1a;環境簡介 2&#xff1a;監控流程 3&#xff1a;Kubernetes 監控指標 二&#xff1a;Prometheus 的安裝 1&#xff1a;從 Github 克隆項目分支 2&#xff1a;安裝 Prometheus Operator --server-si…

Python爬蟲實戰:研究django-dynamic-scraper 框架,構建電商動態數據采集系統

1. 引言 1.1 研究背景 據 Statista 數據,2025 年全球互聯網數據總量將突破 175ZB,其中 80% 為非結構化數據(網頁、文本、圖像等)。高效提取這些數據對企業競爭情報、學術研究至關重要。網絡爬蟲作為數據獲取的核心工具,經歷了從靜態頁面抓取到動態內容解析的演進,但傳統…

掌握MATLAB三維可視化:從基礎到實戰技巧

目錄 1. 引言&#xff1a;三維可視化的重要性 2. 基礎三維圖形繪制 2.1 三維曲線圖&#xff08;plot3&#xff09; 2.2 三維散點圖&#xff08;scatter3&#xff09; 2.3 三維網格圖&#xff08;mesh&#xff09; 2.4 三維曲面圖&#xff08;surf&#xff09; 3. 參數曲面…

Linux 服務部署:自簽 CA 證書構建 HTTPS 及動態 Web 集成

Linux 服務部署&#xff1a;自簽 CA 證書構建 HTTPS 及動態 Web 集成 一、HTTPS基礎原理 HTTPS是HTTP協議基于SSL/TLS協議的加密版本&#xff0c;核心差異及握手過程如下&#xff1a;HTTP與HTTPS對比協議傳輸方式端口核心特點HTTP明文傳輸80無加密&#xff0c;安全性低HTTPS數據…

Python3.10 + Firecrawl 下載公眾號文章

獲取Firecrawl apikey 打開官網&#xff0c;使用github賬號登錄 https://www.firecrawl.dev/ 進入個人中心 https://www.firecrawl.dev/app/api-keys 使用PyCharm創建python項目 創建.env # API配置 FIRECRAWL_API_KEYfc-9*********0816d5ac6b20 # 輸出配置 OUTPUT_DIRout…

IoT/透過oc_lwm2m/boudica150 源碼中的AT指令序列,分析NB-IoT接入華為云物聯網平臺IoTDA的工作機制

文章目錄概述指令調用順序具體接入指令分析ATE0 關閉回顯ATQREGSWT 設置&#xff08;平臺&#xff09;注冊模式ATQLWSREGIND0 手動注冊平臺set_autoconnect / ATNCONFIGATNBANDx,xset_plmn / ATCOPS_set_apn / ATCGDCONT(安全)接入參數 CDPDTLSPSKATNNMI 設置新消息指示_check_…

Android UI(一)登錄注冊 - Compose

UI - 登錄注冊 - Compose一、聲明式UI1. **顛覆傳統開發模式**2. **技術優勢**3. **開發效率提升**4. **未來生態方向**5. **實際影響**二、創建項目1. Compose UI結構2. Scaffold3. 可組合函數三、創建組件頁面1. LoginPage2. RegisterPage3. MainPage四、導航1. 添加依賴2. 使…

分享10個ai生成ppt網站(附ai生成ppt入口)

實測對比&#xff1a;15頁PPT從3小時壓縮到3分鐘的秘密武器 當ChatGPT能寫方案、Midjourney能畫圖&#xff0c;做PPT還在手動排版就OUT了&#xff01;這些AI生成PPT網站已實現「輸入文案秒出設計稿」&#xff0c;無論職場匯報、畢業答辯還是路演融資&#xff0c;零設計基礎也能…

最強開源視頻模型通義萬相wan2.1在comfyui中的安裝應用詳解

摘要&#xff1a;阿里巴巴開源通義萬相Wan2.1模型&#xff0c;支持文生視頻、圖生視頻等多種功能&#xff0c;并整合關鍵環節簡化創作流程。官方和Kiji版本需配套使用各自工作流。低顯存顯卡可使用GGUF模型解決方案&#xff0c;最低適配4G顯存。ComfyUI已原生支持該模型&#x…

機器學習:基于OpenCV和Python的智能圖像處理 實戰

機器學習&#xff1a;基于OpenCV和Python的智能圖像處理實戰——待填坑圖像處理基礎圖像的基本表示方法圖像處理的基本操作圖像運算圖像的色彩空間轉換圖像幾何變換4.1 仿射變換4.2 重映射4.3 投影變換 4.4 極坐標變換5 圖像直方圖處理7 圖像閾值處理8 圖像形態學處理github地址…

proteus實現簡易DS18B20溫度計(stm32)

一、新建proteus工程 具體看前面文章 二、搭建電路 需要配置供電網絡以及尋找元器件&#xff0c;細節看前面文章&#xff0c;下面給出電路圖 電路包含了五個部分&#xff1a; 1、DS18B20&#xff1a;數據引腳記得上拉 2、stm32電路 3、串口電路&#xff08;右下角那個器件…

Autoppt-AI驅動的演示文稿生成工具

本文轉載自&#xff1a;Autoppt-AI驅動的演示文稿生成工具 - Hello123工具導航 ** 一、 Autoppt&#xff1a;AI 驅動的智能演示文稿生成工具 Autoppt 是一款基于人工智能的在線演示文稿生成平臺&#xff0c;通過輸入主題或上傳文檔&#xff08;Word/PDF/ 圖片等&#xff09;&…