導航:首頁 > 文件管理 > ansible配置文件順序

ansible配置文件順序

發布時間:2023-12-04 00:02:26

A. Ansible安裝配置和基本使用

http://www.tuicool.com/wx/vUfYVfA

一、ansible 安裝

ansible 依賴於python2.6或更高的版本、paramiko、PyYAML及Jinja2。

https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

將python頭文件拷貝到標准目錄,以避免編譯ansible時,找不到所需的頭文件

備份舊版本的python,並符號鏈接新版本的python

修改yum腳本,使其指向舊版本的python,已避免其無法運行

1.1 編譯安裝

解決依賴關系

解壓安裝包

https://github.com/ansible/ansible/archive/v1.7.2.tar.gz

編譯安裝

拷貝配置文件

1.2 rpm包安裝

使用阿里雲鏡像源即可,這里為了方便使用,就直接使用yum安裝了。

Fedora 用戶可直接安裝Ansible, 但RHEL或CentOS用戶,需要 配置 EPEL # yum install -y epel-release # yum install -y ansible

注意:不同版本的ansible的功能差異可能較大。

二、配置

配置文件:/etc/ansible/ansible.cfg

hostfile=/etc/ansible/hosts #指定默認hosts配置的位置 host_key_checking = False #不進行host_key檢查,省去目標key發生變化時輸入(yes/no)的步驟 ask_pass=True # 每次執行ansible命令是否詢問ssh密碼 ask_sudo_pass=True # 每次執行ansible命令時是否詢問sudo密碼

主機清單:/etc/ansible/hosts

程序:ansible、ansible paly-book、ansible-doc

1、將要管理的主機納入 /etc/ansible/hosts配置文件中,可以填寫IP或是主機名

[WebServers] 10.10.10.3 10.10.10.4

2、.基於ssh的方式與被管理的主機進行通信,在管理的主機上(部署ansible的主機上)生成一對非對稱密鑰,將公鑰發給被管理的主機。

a,生成密鑰對:ssh-keygen -t rsa

b,將密鑰發放到要管理的主機:ssh--id -i 10.10.10.3 或 ssh--id -i /root/.ssh/id_rsa.pub [email protected]

3、使用ansible命令測試

[root@wlm yum.repos.d]# ansible all -m ping 10.10.10.4 | SUCCESS => { "changed": false, "ping": "pong" }

三、基本使用

1、常用命令

ansible-doc 命令:獲取模塊列表、模塊使用格式。

ansible-doc -l :獲取列表

ansible-doc -s mole_name:獲取指定模塊信息

2、ansible 命令格式

ansible <host-pattern> [-f forks] [-m mole_name] [-a args]

<host-pattern> 指明管控主機,以模式表示或者直接指定ip,必須事先指定在文件中;all所有

[-f forks] 指明每批管控多少主機,默認是5個主機一批次

[-m mole_name] 使用何種模塊操作,所有操作都需要通過模塊指定

[-a args] 指明模塊專用參數;args 一般是 key=value格式。註:command模塊的參數不是kv模式,而是直接給出要執行的命令。

注意:<host-pattern> 默認讀取/etc/ansible/hosts,也可以指明自定義文件路徑 -iPATH,--inventory=PATH:指明使用的 host inventory文件路徑;

3、常用模塊介紹

1、command模塊:遠程主機上運行命令

例:ansible hosts -m command -a "ls /tmp" 註:command模塊也可以省略。

給遠程主機添加用戶、設置密碼:

ansible hosts -a 'useradd user1'

ansible hosts -a 'echo abc | passwd --stdin user1'

2、shell模塊:遠程主機在shell進程下運行命令,支持shell特性,也支持管道符。

10.10.10.4 | SUCCESS | rc=0 >>

3、模塊:把當前主機文件復制到遠程主機位置,可以指定mode、own、group

10.10.10.4 | SUCCESS => { "changed": true, "checksum": "", "dest": "/root/abc.txt", "gid": 0, "group": "root", "md5sum": "", "mode": "0644", "owner": "ansible", "size": 15, "src": "/root/.ansible/tmp/ansible-tmp-1484639082.19-114656107854348/source", "state": "file", "uid": 0 }

4、cron模塊:在遠程主機指定crontab周期性計劃任務

minute= hour= day= month= weekday= job= name= (必須填寫) state=

ansible all -m cron -a "minute=*/10 job='/sbin/ntpdate 10.10.10.10 & >/dev/null' name=synctime" 可使用crontab -l查看

在管理的主機上可以刪除制定的計劃任務

10.10.10.4 | SUCCESS => { "changed": true, "envs": [], "jobs": [] }

5、fetch模塊:和相反,從遠程主機拷貝文件到本地主機

可以不要flat=yes參數,但作用:

當dest=/root/kel/ ,abc.txt會保存在/root/kel/目錄下

當dest=/root/kel ,會拷貝abc.txt文件,並命名成kel

6、file模塊:file模塊包含了文件、文件夾、超級鏈接類的創建、拷貝、移動、刪除

path=/etc/foo.conf owner=foo group=foo mode=0644

src=/file/to/link/to dest=/path/ro/symlink owner=foo group=foo state=link

src=/tmp/{{item.path}} dest={{item.dest}} state=link with_items:

path=/etc/foo.conf state=touch mode="u=rw,g=w,o=r"

path=/etc/foo.conf state=touch mode="u+w,g-w,o-rw"

7、yum模塊:用於yum安裝安裝和卸載

8、service模塊:服務管理

9、user/group模塊:user模塊管理用戶;group模塊管理group

四、Playbook劇本

playbook 是ansible更強大的配置管理組件,實現基於文本文件編排執行的多個任務,且多次重復執行。playbook組織格式為使用YAML語言來編寫的。

playbook 是由一個或多個「play」組成的列表。play的主要功能在於將事先歸為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上講,所謂的task無非是調用ansible的一個mole。將多個play組織在一個playbook中,即可以讓他們聯通起來按事先編排的機制生效。

1、例子:

在ansible主機上的root目錄下創建httpd目錄,將本機的httpd.conf文件拷貝到該目錄下,修改配置文件里的監聽埠是8081

remote_user:root #root前不能有空格

tasks: #任務列表

yum name=httpd state=present #yum後的: 刪除掉

src=/root/httpd/httpd.conf dest=/etc/httpd/conf

service name=httpd state=started

注意:yaml文件中支持#;下面的操作要跟上面的name對齊。

測試:

ansible-playbook --check playbook :只檢測可能會發生的改變,但不真正執行操作

ansible-playbook playbook :直接執行

ansible-playbook --list-hosts :列出運行任務的主機

2、playbook介紹

設置在特定條件下觸發:

a,某任務的狀態在運行後為changed時,可通過「notify」通知給相應的handles;

handles:任務在特定條件下觸發;接收到其他任務的通知是被觸發;

b,任務可以通過「tags」打標簽,而後可在ansible-playbook命令上使用-t指定進行調用;

B. Ansible系列-基礎篇-Ansible 常見模塊的使用

原文地址: Ansible系列-基礎篇-Ansible 常見模塊的使用

上一篇中簡單嘗鮮了幾個模塊,本篇整理下實際中用到的模塊及其用法Demo,總計有19個模塊,分別為
ping、setup、debug、user、group、authorized_key、shell、script、command、service、systemd、、template、synchronize、file、lineinfile、yum、cron

ping 模塊主要是驗證 管理節點 和 目標節點 之間的連通性,是否正常配置好了對應賬號的ssh免密登錄

上一篇中配置的時候提到ansible facts 收集目標主機信息,也可以使用 setup 模塊。

這個模塊的好處就是讓了解到 Ansible 都有哪些內置的變數,這些變數在我們後續寫playbook的時候,在role templates 中配置很有幫助,

舉個列子,Ansible 批量部署 zabbix agent,每個agent的配置文件中的 ListenIP 和 Hostname 我們就可以使用facts中的變數 ansible_default_ipv4.address 和 ansible_hostname

另外一旦知道知道都有哪些變數的時候,下次我們就可以再收集信息展示的時候,加參數通過filter來過濾我們想看的變數就可。比如

顧名思義,就是我們想調試輸出一些結果的時候,比如上面提到的我想知道目標主機的IP地址

這里有兩種用法,一種是 msg 輸出,需要帶 {{ variable-name }} , 另外一種是 var 用法,直接寫變數名即可,不用添加 {{ }}

遠程管理用戶/用戶組

主要用來給目標主機用戶配置公鑰,默認到目標用戶家目錄的.ssh目錄的authorized_keys文件 沒有則創建authorized_keys文件

這里是把 shell 和 script、command放到一起做對比,其實還有個 raw

其中 command 執行單一命令不能使用管道符、重定向符等,raw 類型command,可以使用管道符等;

shell 和 script 類似,都可以執行腳本,卻別在於script執行的腳本在ansible管理機上,而shell執行的腳本必須先放到目標節點上去,才能執行;

另外shell執行可以使用環境變數,bash等,但是script只是執行腳本,不能帶 bash

都是用來管理伺服器上的服務,區別在於Service服務管理用於centos6及以前的系統,而systemd命令應用於centos7系統

核心參數 namestateenabled

把管理節點的文件到目標節點,並配置相關屬性

template 的作用和一樣,區別在於源文件是jinja2格式,文件中可以配置 Ansible變數,然後在目標節點上替換成對應的目標值

另外一個需要住的就是在roles中,默認是從files目錄獲取文件,template默認是 templates 文件夾獲取模板文件

主要用於目錄、文件的同步,基於 rsync實現,主要是有 push 和 pull 兩種方式, 如果是push 推送,則src是管理節點,dest是目標節點;如果是pull拉取,則src是目標節點,dest是管理節點

在目標節點創建文件或目錄,刪除文件或目錄,修改文件或目錄的許可權等;核心參數有:path、state、owner、group、mode、recurse

在文件中添加、修改、刪除一行記錄,在實踐中用的很多,這里做簡單介紹,後續有單獨文章詳細介紹

顧名思義,就是我們在Centos下進行yum安裝,核心參數主要關註: name 需要安裝的軟體名、state 軟體的狀態(present、absent、removed、latest)和 enablerepo 特殊情況指定yum源

管理Linux定時任務,核心參數說明
name 定時任務的名稱、 state 任務的狀態、minute/hour/day/month/weekday 分別設定任務執行的時間配置、user指定是哪個用戶配置任務,默認是管理員

C. 使用pip方式安裝ansible的配置文件在哪

1. 打開上節的解決方案,為JackWangServiceClient工程添加一個App.config文件
2. 修改App.config的文件如下 <xml version="1.0" encoding="utf-8" >
<configuration> <system.serviceModel> <client>
<endpoint name="MyEndPoint"

我安裝ansible的方式用pip安裝,但是找不到配置文件,pip方式安裝的配置文件在哪的?/etc目錄下是沒有的[root@localhost logs]# cd /etc/ananacrontab
anthy-conf
find找了,也沒[root@localhost ~]# find / -name
ansible/usr/local/python27/bin/ansible/usr/local/python27/lib/python2.7/site-packages/ansible[root@localhost
~]# cd /usr/local/python27/lib/python2.7/site-packages/ansible

D. Ansible-基本概述

為什麼要自動化運維

我們以 10 台機器部署 Nginx 為例。部署步驟如下:

1、通過 ssh 登錄一台機器;

2、yum install -y nginx 或者 獲取安裝包自行編譯安裝;

3、配置 Nginx

4、啟動 Nginx ,如有必要加入開機自啟動;

5、退出登錄

上面步驟重復 10 次,即可完成我們的部署要求。

痛點:

1、重復操作頻繁,增加了人工成本和後續維護成本;

2、機器太多時,容易落下某些機器且未操作,進而產生後續影響;

3、人工頻繁操作時可能有操作步驟不完整的情況,造成該機器和其他機器狀態不一致。

我們還是以 10 台機器部署 Nginx 為例。部署步驟如下:

1、在控制機或者稱為管理機的機器上寫好相關腳本。「當然該腳本我們是測試通過的,腳本中包括安裝、配置、啟動等等」

2、將寫好的腳本從控制機推送到受控機;

3、在受控機執行相關腳本,根據腳本部署我們需要的 Nginx。

好處

1、減少了重復操作,提高了工作效率;

2、減小了出錯幾率,提高了准確率;

3、所有機器狀態一致,降低了後續維護成本。

軟體安裝部署

配置同步

代碼變更

命令執行

任務執行

Ansible 是基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能的自動化管理工具。

Ansible 是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是 Ansible 所運行的模塊,Ansible 只是提供一種框架。進而能減少我們的重復操作,提高工作效率。

Ansible 不需要在遠程主機上安裝 client/agents,因為它們是基於 SSH 來和遠程主機通訊的。

Ansible 目前已經已經被紅帽官方收購,是自動化運維工具中大家認可度最高的,並且上手容易,學習簡單。是每位運維工程師必須掌握的技能之一。

1、批量執行遠程命令:可以對 N 台主機同時進行命令的執行;

2、批量配置軟體服務:可以用自動化的方式管理配置和服務;

3、實現軟體開發功能:例如 jumpserver 底層使用 Ansible 來實現自動化管理;

4、編排高級的 IT 任務:Ansible 的 Playbooks 是一門編程語言,可以用來描繪一套 IT 架構。

1、部署簡單,只需在主控端部署 Ansible 環境,被控端無需做任何操作;

2、安全可靠,默認使用 SSH 協議對被控端進行管理;

3、有大量的常規運維操作模塊,可實現日常絕大部分操作;

4、配置簡單、功能強大、擴展性強;

5、支持 API 及自定義模塊,可通過 Python 輕松擴展;

6、通過 Playbooks 來定製強大的配置、狀態管理;

7、輕量級,無需在客戶端安裝 Agent,更新時只需在操作機上進行一次更新即可。

模塊說明如下:

Ansible:Ansible 核心程序。

Host Inventory:記錄由 Ansible 管理的主機信息清單,包括埠、密碼、IP 等。

Playbooks:「劇本」 YAML 格式文件,多個任務定義在一個文件中,定義主機需要調用哪些模塊來完成的功能。

Core Moles:核心模塊,主要操作是通過調用核心模塊來完成管理任務。

Custom Moles:自定義模塊,完成核心模塊無法完成的功能,支持多種語言。

Connection Plugins:連接插件,Ansible 和 Host 通信使用

Ansible 控制主機對被管節點的操作方式可分為兩類,即 ad-hoc 和 playbook:

ad-hoc 模式(點對點模式)

使用單個模塊,支持批量執行單條命令。ad-hoc 命令是一種可以快速輸入的命令,而且不需要保存起來的命令。 就相當於 bash 中的一句 shell。

playbook 模式(劇本模式)

是 Ansible 主要管理方式,也是 Ansible 功能強大的關鍵所在。 playbook 通過多個 tasks 集合完成一類功能 ,如 Web 服務的安裝部署、資料庫伺服器的批量備份等。可以簡單地把 playbook 理解為通過組合多條 ad-hoc 操作的配置文件。

簡單理解就是:Ansible 在運行時,首先讀取 ansible.cfg 中的配置,根據規則獲取 Inventory 中的管理主機列表,並行的在這些主機中執行配置的任務,最後等待執行返回的結果。

1、載入自己的配置文件,默認 /etc/ansible/ansible.cfg;

2、查找對應的主機配置文件,找到要執行的主機或者組;

3、載入自己對應的模塊文件,如 command;

4、通過 Ansible 將模塊或命令生成對應的臨時py文件(python腳本),並將該文件傳輸至遠程伺服器;

5、對應執行用戶的家目錄的 .ansible/tmp/XXX/XXX.PY文件;

6、給文件 +x 執行許可權;

7、執行並返回結果;

8、刪除臨時py文件,sleep 0退出;


E. ansible總結

ansible是一種自動化運維工具,基於paramiko開發的,並且基於模塊化工作,Ansible是一種集成IT系統的配置管理、應用部署、執行特定任務的開源平台,它是基於python語言,由Paramiko和PyYAML兩個關鍵模塊構建。集合了眾多運維工具的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能.ansible是基於模塊工作的,本身沒有批量部署的能力.真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架.ansible不需要在遠程主機上安裝client/agents,因為它們是基於ssh來和遠程主機通訊的.

ansible被定義為配置管理工具,配置管理工具通常具有以下功能:

常用的自動化運維工具技術特性比較:

ansible系統由控制主機和被管理主機組成,控制主機不支持windows平台

部署簡單, 只需要在控制主機上部署ansible環境,被控制端上只要求安裝ssh和python 2.5以上版本,這個對於類unix系統來說相當與無需配置.

Ansible任務執行模式分為以下兩種:

ansible配置文件查找順序

ansible配置文件
ansible 有許多參數,下面我們列出一些常見的參數:

ansible的主要功用在於批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中將其分組命名。默認的inventory file為/etc/ansible/hosts。
inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成。

Inventory文件格式:

inventory其他的參數

ansible通過ssh實現配置管理、應用部署、任務執行等功能,因此,需要事先配置ansible端能基於密鑰認證的方式聯系各被管理節點。

ansible命令使用語法:

例如:

可以通過 ansible-doc -l 列出所有可用的mole,常用的mole有:

ansible -s <mole-name> 可以查看指定mole的用法,或者參看 官方幫助文檔 :

playbook是由一個或多個「play」組成的列表。play的主要功能在於將事先歸並為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的一個mole。將多個play組織在一個playbook中,即可以讓它們聯同起來按事先編排的機制同唱一台大戲。

下面是一個簡單示例:

playbooks的組成部分

執行過程:

playbook安裝配置apache實戰

ansilbe自1.2版本引入的新特性,用於層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變數文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變數、文件、任務、模塊及處理器放置於單獨的目錄中,並可以便捷地include它們的一種機制。角色一般用於基於主機構建服務的場景中,但也可以是用於構建守護進程等場景中。

一個roles的案例如下所示:

在playbook中,可以這樣使用roles:

也可以向roles傳遞參數:

也可以用條件來使用roles:

ansible運行playbook時會啟動很多ssh連接來執行復制文件,運行命令這樣的操作.openssh支持這樣一個優化,叫做ssh Multiplexing,當使用這個ssh Multiplexing的時候,多個連接到相同主機的ssh回話會共享相同的TCP連接,這樣就只有第一次連接的時候需要進行TCP三次握手.

ansible會默認使用ssh Multiplexing特性,一般不需要更改配置,相關的配置項為:

ansible執行過程中,他會基於調用的模塊生成一個python腳本,然後將python腳本復制到主機上,最後執行腳本.ansible支持一個優化,叫做pipelining,在這個模式下ansible執行腳本時並不會去復制它,而是通過管道傳遞給ssh會話,這會讓ansible的ssh會話從2個減少到1個,從而節省時間.

pipelining默認是關閉的, 因為他需要確認被管理主機上的/etc/sudoers文件中的 requiretty 沒有啟用, 格式如下:

ansible開啟pipelining方法, 修改ansible.cfg配置文件:

ansible playbook會默認先收集fact信息,如果不需要fact數據可以在playbook中禁用fact採集:

也可以全局禁用fact採集:

另一種解決方案就是使用fact緩存,目前ansible支持下面幾種fact緩存:

jsON文件做fact緩存示例
ansible把採集到的fact寫入控制主機的json文件中,如果文件已經存在,那麼ansible不會再去主機上採集fact

啟用JSON文件緩存,修改ansible.cfg文件:

ansible默認並發數是5,可以用下面兩種方法修改並發數:

ansible內置多種雲計算相關模塊,如aws,openstack,docker等,下圖是ansible與docker相關的模塊:

通過playbook和dockerfile相結合的方式生成鏡像, 示例如下:

ansible可以通過docker模塊來操作容器,示例如下:

閱讀全文

與ansible配置文件順序相關的資料

熱點內容
HX基礎編程怎麼改變字體 瀏覽:876
怎麼開網路教學 瀏覽:915
630升級工程武器 瀏覽:936
用換機助手接收的軟體文件在哪找 瀏覽:282
閱達app一教一輔五年級有哪些 瀏覽:7
win10系統用f2調節音量 瀏覽:19
壓縮文件密碼器 瀏覽:840
線下活動數據分析有哪些 瀏覽:314
助聽器插片式編程線如何連接 瀏覽:293
怎麼刪除系統休眠文件 瀏覽:914
搜索文件內容中包含的文字並替換 瀏覽:542
微信相冊程序圖標 瀏覽:714
win8怎麼顯示文件格式 瀏覽:547
文件伺服器中毒 瀏覽:721
如何修改網站訪問次數 瀏覽:518
mdfldf是什麼文件 瀏覽:569
文件在桌面怎麼刪除干凈 瀏覽:439
馬蘭士67cd機版本 瀏覽:542
javaweb爬蟲程序 瀏覽:537
word中千位分隔符 瀏覽:392

友情鏈接