1. 程式人生 > >ansible基礎一

ansible基礎一

tar mov bre 變更 srv als modules art 步驟

在管理機器上安裝ansible工具

yum install ansible

將需要管理的主機加入absible,的主機管理清單配置文件/etc/ansible/hosts

格式:inventory文件遵循INI文件風格,中括號中的字符為組名。 可以將同一個主機同時歸並到多個不同的組中;此外,當如若 目標主機使用了非默認的SSH端口,還可以在主機名稱之後 使用冒號加端口號來標明

1)不分組方式 #不推薦這樣使用

192.168.136.5:2222 #冒號後面的2222表示端口號

192.168.136.6

2)分組方式

[web] # web表示組名,分組以後可以直接通過組名來進行管理組裏面的主機

192.168.136.5

192.168.136.6

[opt]

192.168.136.[7:10] #這表示範圍,從192.168.136.7到192.168.136.10之間的所有主機

[webservers]

www1.magedu.com

www2.magedu.com

ansible管理主機一般最好是先基於key驗證之後管理起來會比較方便

步驟:

1)生成公私鑰對

ssh-keygen

2)將公鑰復制到所有主機

可以編寫腳本:完成這一步

也可以用ssh-copy-id <主機ip>即可


ansible 配置文件

Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默認)

[defaults]

#inventory = /etc/ansible/hosts # 主機列表配置文件

#library = /usr/share/my_modules/ # 庫文件存放目錄

#remote_tmp = $HOME/.ansible/tmp #臨時py命令文件存放在遠程主 機目錄

#local_tmp = $HOME/.ansible/tmp # 本機的臨時命令執行目錄

#forks = 5 # 默認並發數

#sudo_user = root # 默認sudo 用戶

#ask_sudo_pass = True #每次執行ansible命令是否詢問ssh密碼

#ask_pass = True

#remote_port = 22

#host_key_checking = False # 檢查對應服務器的host_key,建議取消 註釋

#log_path = /var/log/ansible.log #會把你執行的命令生成日誌計入在/var/log/ansible.log文件中,建議把這一項啟用起來,


ansible

功能介紹

基於模塊化,遠程管理主機,並且是基於ssh方式連接主機的方式,安全性高

格式

<host-pattern> [-m module_name] [-a args]

特點

1)模塊化:調用特定的模塊,完成特定任務

2)有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模塊

3)支持自定義模塊

4)基於Python語言實現

5)部署簡單,基於python和SSH(默認已安裝),agentless

6)安全,基於OpenSSH

7)支持playbook編排任務

8)冪等性:一個任務執行1遍和執行n遍效果一樣,不因重復執行帶來意外情況

9)無需代理不依賴PKI(無需ssl)

10)可使用任何編程語言寫模塊

11)YAML格式,編排任務,支持豐富的數據結構

12)較強大的多層解決方案

ansable系列命令

ansible

ansible-doc

ansible-playbook

ansible-vault

ansible-console

ansible-galaxy

ansible-pull

ansible-doc 查看模

塊幫助用法

ansible-doc –l 列出所有模塊

ansible-doc ping 查看指定模塊幫助用法

ansible-doc –s ping 查看指定模塊幫助用法

ansible命令執行過程

1. 加載自己的配置文件 默認/etc/ansible/ansible.cfg

2. 加載自己對應的模塊文件,如command

3. 通過ansible將模塊或命令生成對應的臨時py文件,並將該 文 件傳輸至遠程服務器的對應執行用戶 $HOME/.ansible/tmp/ansible-tmp-數字/XXX.PY文件

4. 給文件+x執行

5. 執行並返回結果

6. 刪除臨時py文件,sleep 0退出

執行狀態:

綠色:執行成功並且不需要做改變的操作

黃色:執行成功並且對目標主機做變更

紅色:執行失敗

選項

說明

--version

顯示版本

-m module

指定模塊,默認為command

-v

詳細過程 –vv -vvv更詳細

--list-hosts

顯示主機列表,可簡寫—list

--ask-pass

提示連接密碼,默認Key驗證

-C, --check

檢查,並不執行

-T --timeout=TIMEOUT

執行命令的超時時間,默認10s

-u --user=REMOTE_USER

執行遠程執行的用戶

-b --become

代替舊版的sudo 切換

模塊介紹

模塊名成

功能介紹及常用參數

ping

一個簡單的測試模塊,這個模塊總是在成功的接觸中返回“乒乓”。這是不合理的

但是它對於驗證登錄的能力和可用的python來說是有用的。

配置。這不是ICMP ping,這只是一個簡單的測試模塊。對於Windows目標,使用

(win_ping)模塊。

用法: anisble 主機 -m ping

command

命令的模塊接受命令名,後面是空格分隔的參數列表。給定的

命令將在所有選定的節點上執行。它不會通過shell進行處理,所以變量

“$ HOME”和操作,比如“<“”、“”>“”,“”|“”、“”;“和”不會起作用(使用shell模塊

如果您需要這些特性)。

常見選項:

1),chdir <切換目錄> 格式: ansible 主機組 -m command -a ‘chdir=/app/ ls -al /app ’

2),creates <判斷如果文件不存在就執行後面的命令> 格式: ansible 主機組 -m command -a ‘creates=/etc/fstab ls -al /app’

3),removes <判斷如果文件存在就執行後面的命令> 格式: ansible 主機組 -m command -a 'removes=/etc/fstab ls-al /app/'

shell

shell的模塊接受命令名,後面是空格分隔的參數列表。這幾乎是

與命令模塊完全一樣,但是在遠程節點上通過shell(/bin/sh')運行命令

支持 特殊符號$ HOME”和操作,比如“<“”、“”>“”,“”|“”、“”;“

在執行命令是盡量使用單引號,

其他用法基本跟command模塊相同

script

腳本的模塊接受腳本名稱,發送到遠程主機上執行,

格式:ansible 主機組 -m script -a ‘/app/f1 .sh ’

copy

copy'模塊將一個文件從本地或遠程機器復制到遠程機器上的一個位置。使用com

fetch模塊將文件從遠程位置復制到本地框。如果你需要變量插值

在復制的文件中,使用模板模塊。

註意:copy模塊復制文件如果目錄不存在會自動創建目錄

常用參數:

content:<把自定義內容復制到遠程主機文件中> 格式 : content=“df -h \nls\n\hostname dest=/app/f1.sh”

src:<本機源文件>

dest:<指定復制到目標主機的某個目錄或者覆蓋某個文件>

backup:<文件復制到遠程主機如果文件已存在可以將源文件做備份,再覆蓋> 格式: backup=yes /no yes表示做備份,no表示不做備份

directory_mode :<復制整個目錄>

mode:<更改復制過去的文件權限> 格式: mode=644......

owner:<更改復制過去的文件屬主> 格式:owner=wang

格式:ansible 主機組 -m copy -a ‘src=/etc/fstab dest=/app/ backup=yes mode=644 owner=wang’

fetch

這個模塊的工作方式類似於復制,但反過來。它用於從遠程機器獲取文件

將它們存儲在本地目錄下

常用參數:

src:<指定遠程主機的文件>

dest:<指定本地主機的目錄>

格式:ansible 主機組 -m fetch -a ‘src=/etc/fstab best=/app/’

file

支持在被控主機創建空文件,創建軟連接,刪除文件等作

常用選項:

創建空文件:path=<指定創建文件路徑> 一般配合state=touch使用

創建軟連接:src=<指定原始文件路徑> 一般配合path=<創建到那個目錄>,state=link<連接>

創建目錄:path=<指定路徑> 一般配合state=directory使用

刪除文件: path=<指定文件路徑> 一般配合state=absent使用

設置文件權限:mode<設置文件權限> owner<設置文件屬組>

格式:

創建文件

ansible 主機組 -m file -a ‘path=/app/testfile state=touch’

創建軟連接

absible 主機組 -m file -a ‘src=/app/testfile path=/tmp/testfile-link stare=link’

創建目錄

absible 主機住 -m file -a 'path=/app/dir1 state=directory'

刪除文件

ansible 主機組 -m file -a ‘path=/app/testfile state=absent’e

hostname

更改被控主機端的主機名

格式:

ansible 主機 -m hostname -a 'name=名字'

cron

創建計劃任務

minute<分鐘>

day <天>

hour<小時>

weekday<周>

month<月>

job<執行的操作> 註意:命令需要寫全路徑

name<計劃任務的名字>

disabled=yes <yes表示禁用計劃任務,no表示啟用計劃任務>

start=absent <表示刪除計劃任務>

例子:

ansible 主機組 -m cron -a 'minute=*/5 hour=12 weekday=0,6 job="/usr/sbin/wall is jobs " name="test job"'

此命令原理: 創建一個名為test job計劃任務 每周六周天,淩晨12點沒5分鐘執行一次wall廣播 is job

禁用,啟用計劃任務

ansible 主機組 -m cron -a 'disabled=yes/on job="執行的操作" name="計劃任務名字"'

刪除計劃任務

ansible 主機組 -m cron -a 'start=adsent job="執行的操作" name="計劃任務名字"'

yum

管理軟件包模塊

安裝軟件包

name=包名

start=absent 卸載包

start=latest 裝最新版

updata_cache=yes 更新yum緩存

service

管理服務狀態模塊

常用選項

name=<指定包名>

state=<指定運行狀態> 如:stopped<停止>,started<啟動>,restarted<重啟服務>, reloaded<重讀配置文件> ,

enabled=yes 表示把服務設置為開機自動重啟

格式:

設置服務開機自動啟動並且啟動

ansible 主機組 -m service -a 'name=httpd state=started enabled=yes'

user

創建管理用戶

常用選項:

name=<指定用戶名>

comment=<描述信息>

uid=<指定uid>

home=<指定家目錄路徑>

group=<指定 主組>

groups=<指定輔助組>

system=yes<yes表示創建的是系統用戶>

shell=<指定shell類型>

remove=yes <yes表示把家目錄等等相關數據全刪除>

例子:

創建普通用戶

ansible 主機組 -m user -a 'name="test" uid=2000 home=/app/test group=wang groups=root,bin '

創建系統用戶 <註意:默認創建系統用戶會創建家目錄>

ansible 主機組 -m user -a 'name=sys system=yes shell=nologin'

刪除用戶並把家目錄刪除

ansible 主機組 -m user -a 'name="test" state=absent remove=yes’

group

管理組

name=<指定組名>

state=<指定操作>

例子

創建組

ansible 主機組 -m group -a 'name=group1 '

刪除組

ansible 主機組 -m group -a 'name=group1 state=absent'

setup

顯示所有被控主機的,所有主機信息,例如:IP,主機名,版本,等等信息

常用選項

filter="*信息*"<作用用來匹配想要查看的信息>

例子:

ansible 主機組 -m setup -a 'filter="*hostname*"' 註意匹配時需要把匹配的值放在雙星*號裏面

匹配主機列表的方式:

All :表示所有Inventory中的所有主機

ansible all –m ping

* :通配符

ansible “*” -m ping #匹配所有主機執行ping模塊操作

ansible 192.168.1.* -m ping #匹配192.168.1.這個網段的所有主機,執行平模塊操作

ansible “*srvs” -m ping #匹配主機組名後面srvs的主機組執行ping模塊操作

或關系:

ansible “websrvs:appsrvs” -m ping #這表示匹配兩個主機組裏面的所有主機

ansible “192.168.1.10:192.168.1.20” -m ping #這是只針對兩臺主機執行ping模塊操作

邏輯與

ansible “websrvs:&dbsrvs” –m ping 在websrvs組並且在dbsrvs組中的主機,才執行ping模塊操作

邏輯非

ansible 'websrvs:!dbsrvs' –m ping #在websrvs組,但不在dbsrvs組中的主機 ,執行平模塊中操作

綜合邏輯

ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' –m ping #匹配在websrvszu或者在dbsrvs組,並且在appsrvs組,但不在ftpsrvszu裏的主機,才會執行ping模塊操作

正則表達式

ansible “~(web|db).*\.magedu\.com” –m ping #匹配以帶有web關鍵字後面跟任意字符.magedu.com的主機組,或者帶有db關鍵字後面跟任意字符.magedu.com的主機組,執行ping模塊操作


ansible系列命令

Ansible-vault

功能:管理加密解密yml文件

ansible-vault [create|decrypt|edit|encrypt|rekey|view]

ansible-vault encrypt hello.yml 加密

ansible-vault decrypt hello.yml 解密

ansible-vault view hello.yml 查看

ansible-vault edit hello.yml 編輯加密文件

ansible-vault rekey hello.yml 修改口令

ansible-vault create new.yml 創建新文件


Ansible-console:2.0+新增,可交互執行命令,支持tab

root@test (2)[f:10] $ 執行用戶@當前操作的主機組 (當前組的主機數量)[f:並發數]$

設置並發數: forks n 例如: forks 10

切換組: cd 主機組 例如: cd web

列出當前組主機列表: list

列出所有的內置命令: ?或help

示例:

root@all (2)[f:5]$ list

root@all (2)[f:5]$ cd appsrvs

root@appsrvs (2)[f:5]$ list

root@appsrvs (2)[f:5]$ yum name=httpd state=present

root@appsrvs (2)[f:5]$ service name=httpd state=started


常用選項示例:

查看主機組名裏包括多少臺主機

anisble 主機分組名 --list-host

如圖:

技術分享圖片


ansible基礎一