導航:首頁 > 程序命令 > 常用ansible命令

常用ansible命令

發布時間:2023-01-05 02:27:28

㈠ 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模塊來操作容器,示例如下:

㈡ Linux裡面ansible作用是什麼

Ansible是一款簡單的運維自動化工具,只需要使用ssh協議連接就可以來進行系統管理,自動化執行命令,部署等任務。

Ansible的優點

㈢ ansible使用

Ansible使用

/etc/ansible/ansible.cfg 主配置文件 ansible的配置文件

/etc/ansible/hosts Inventory 要遠程式控制制的主機列表

/usr/bin/ansible-doc 幫助文件

/usr/bin/ansible-playbook 指定運行任務文件

默認: /etc/ansible/hosts

inventory file可以有多個,且也可以通過Dynamic Inventory來動態生成。

參考解釋例子ansible_ssh_host將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可通過此變數設置.ansible_ssh_host=192.169.1.123ansible_ssh_portssh埠號.如果不是默認的埠號,通過此變數設置.ansible_ssh_port=5000ansible_ssh_user默認的 ssh 用戶名ansible_ssh_user=cxpadminansible_ssh_passssh 密碼(這種方式並不安全,我們強烈建議使用 --ask-pass 或 SSH 密鑰)ansible_ssh_pass=』123456』

ansible2.0,ansible_ssh_user, ansible_ssh_host, ansible_ssh_port已經改變為ansible_user, ansible_host, ansible_port。具體參考官網

http://docs.ansible.com/ansible/latest/intro_inventory.html

常見的模塊及使用參考: ansible基本使用教程 - 陳小跑 - 博客園

命令行方式一次只能執行單條命令,如果命令量較多,可以使用playbook的方式。 https://segmentfault.com/a/1190000038230424

playbook使用yaml格式編寫。組成結構如下:

舉例如下:

使用參考: https://segmentfault.com/a/1190000038230424

"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."

通常情況下,通過&指定的後台任務在終端退出後會自動退出執行。一般來說,加上nohup即可在後台一直執行。但在使用ansible時,發現 ansible all -m shell -a 'nohup cmd &' 命令無法在後台一直執行。後來想了個辦法,將命令寫入腳本,然後通過執行腳本來實現。
腳本內容為

ansible命令為 ansible all -m script -a 'bash xxx.sh' 。sleep的原因是退出太快可能腳本沒跑起來就退出了。

㈣ Linux裡面ansible -a命令作用是什麼

Ansible是一款系統運維的批量管理伺服器軟體,下面是批量管理的命令例子:

ansible oldboy -m shell -a 'ps -ef |grep ssh' -k

  1. ansible是命令。

  2. oldboy是主機組(裡麵包含很多機器)。

  3. -m shell,-m是指定模塊,shell就是一個模塊。

  4. -a接模塊對應參數。'ps -ef |grep ssh',就是模塊對應的參數,傳給shell解析處理。

㈤ 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指定進行調用;

㈥ ansible日常使用命令

從本地分發文件到遠程主機
ansible -i hosts文件 hosts -m -a "src=/local_path/file dest=/remote_path/file mode=0755"

執行一些遠程的命令
ansible -i hosts文件 hosts -m shell -a "bash /remote_path/xxx.sh"
ansible -i hosts文件 hosts -m shell -a "ls -h /remote_path/file"

遠程伺服器有些文件,需要拉取到ansible所在主機
ansible -i mysql_hosts hosts -m fetch -a "src=/remote_path/file dest=/local_path/{{inventory_hostname}}_file flat=yes "

有時候伺服器為了安全,禁止root ssh遠程跳轉到其他主機的,所以執行一些高許可權的命令,需要sudo許可權的。

上面的host文件需要修改為如下

sudo_user : 可以sudo的用戶
示例如下,普通用戶無法yum ,需要sudo或者root去yum
ansible -i host文件 hosts -b --become-method su --become-user root -m shell -a "yum install per*"

閱讀全文

與常用ansible命令相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163