Ansible學習筆記

Ansible學習筆記

1.安裝Ansible軟件

yum install -y ansible

2./etc/ansible/hosts
該文件代表需要管理的主機列表
格式爲:
組名
[test]
IP地址或主機名或域名
192.168.1.151
192.168.1.152
test1
test2
OS_controller
OS_compute

連續IP可以使用192.168.1.[151:160]來表示。
一個IP地址可以屬於多個組,例如
[test]
192.168.1.[151:152]
[test1]
192.168.1.151
[test2]
192.168.1.152

3.執行命令
ansible -i /etc/ansible/hosts test -u root -m command -a ‘ls /home’ -k
其中-i默認爲/etc/ansible/hosts,默認位置可以省略。
-u默認爲root,默認可省略
test爲hosts中的組名,必不可少
-m默認爲command,默認可省略
-k爲輸入密碼,SSH無密碼戶型後可省略

省略後的命令爲:
ansible test -a ‘ls /home’

4.ping模塊

ansible all -m ping
其中all表示hosts中的全部主機,會自動除重。
-m ping表示使用ping模塊
返回值:
(151和152能ping通,153不通)

[root@localhost ansible]# ansible test -m ping
192.168.1.152 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
192.168.1.151 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
192.168.1.153 | UNREACHABLE! => {
“changed”: false,
“msg”: “Failed to connect to the host via ssh: ssh: connect to host 192.168.1.153 port 22: No route to host\r\n”,
“unreachable”: true
}

5.使用遠程普通用戶
ansible all -u hanxinda -m ping --sudo
使用遠程主機的hanxinda用戶執行ping
需要指定使用sudo
並且保證hanxinda用戶與ansible本地主機SSH無密碼戶型,否則使用-k輸入密碼

6.處理用戶名不同,端口不同

在/etc/ansible/hosts文件中指定用戶名和端口
[test]
192.168.1.151 ansible_ssh_user=root
192.168.1.152 ansible_ssh_user=hanxinda ansible_ssh_port=2202

ansible_ssh_user #指定ssh該主機的用戶名
ansible_ssh_port #指定ssh該主機的端口
host_key_checking=false #在首次ssh一個主機時,可能會讓你輸入yes/no,該選項可以跳過這個過程。

7.主機組之間的嵌套

/etc/ansible/hosts文件中
[openstack:children]
controller #組名
compute
[controller]
192.168.1.140
192.168.1.141
[compute]
192.168.1.151
192.168.1.152
192.168.1.[160:170]

測試全部openstack節點是否存活
ansible openstack -m ping
測試controller節點是否存活
ansible controller -m ping
測試compute節點是否存活
ansible compute -m ping

8.查看Ansible模塊

查看所有模塊
ansible-doc -l
查看某個module的參數
ansible-doc -s module
例如ansible-doc -s ping,ansible-doc -s user

9.setup模塊

用於收集遠程主機的一些基本信息
ansible test -m setup

10.file模塊

用於設置文件屬性,創建刪除等:
file模塊包含以下選項:
force:在兩種情況下強制創建軟連接,一種是文件不存在,但之後會創建的情況。另一種是目標軟連接已存在,需要先取消之前的軟連接,然後創建新的軟連接。yes/no
group:定義文件或目錄的屬組
mode:定義文件或目錄的權限
owner:定義文件或目錄的屬主
path:定義文件或目錄的路徑(必不可少)
recurse:遞歸的設置文件的屬性,只對目錄有效
src:要被連接的源文件路徑,只應用於state=link的情況
dest:被鏈接到的路徑,只應用於state=link的情況
state:
directory:如果目錄不存在,則創建目錄
file:即使文件不存在,也不創建文件
link:創建軟鏈接
hard:創建硬鏈接
touch:如果文件不存在,則會創建一個新的文件,如果文件已存在,則更新最後修改時間
absent:刪除目錄、文件或取消鏈接文件

eg .
刪除一個文件aaa.txt
ansible test -m file -a “path=/tmp/aaa.txt state=absent”
創建一個文件bbb.txt
ansible test -m file -a “path=/tmp/bbb.txt state=touch”
創建一個文件的軟連接,force=yes表示/tmp/aaa不存在,也仍然創建軟連接。
ansible test -m file -a “src=/tmp/aaa dest=/tmp/aaa.ln state=link force=yes”

11.copy模塊

用於拷貝本地文件到遠程主機:
copy有以下選項:
src:本地文件路徑
dest:遠程主機路徑
backup:若文件同名,是否備份原文件,如果已存在文件的內容與當前拷貝文件一致,則不會備份(checknum一致?)

eg.
將ansible本地文件/tmp/aaa遠程拷貝到目的主機的/tmp下
ansible test -m copy -a “src=/tmp/aaa dest=/tmp/ backup=yes”

12.command模塊

用於在遠程主機執行一段shell命令:
command有以下常用選項:
creates:creates=文件名,當該文件存在時,執行後面的命令。
chdir:切換工作目錄,chdir=/tmp/
removes:removes=文件名,當該文件不存在時,執行後面的命令。與creates相反。

eg.
若/tmp/aaa不存在時,執行ls /home
ansible test -m command -a ‘creates=/tmp/aaa ls /home’

[root@localhost ansible]# ansible test -m command -a ‘creates=/tmp/aaa ls /home’
192.168.1.152 | SUCCESS | rc=0 >>
skipped, since /tmp/aaa exists
192.168.1.151 | SUCCESS | rc=0 >>
skipped, since /tmp/aaa exists

切換工作目錄到/tmp/下,然後執行命令
ansible test -m command -a ‘chdir=/tmp/ tar zcf aaa.tar.gz aaa’

13.shell模塊
功能和command模塊相似,參數也相似,不同的是shell支持管道:
下面命令只能用shell模塊執行,command不支持管道
ansible test -m shell -a ‘chdir=/tmp ls >>~/log.txt’
ansible test -m shell -a ‘chdir=/usr ls | grep game’

還有個類似的模塊叫raw:(測試時報錯?)
ansible test -m raw -a ‘chdir=/usr ls -lh | grep game’

[root@localhost ansible]# ansible test -m raw -a ‘chdir=/usr ls -lh | grep game’
192.168.1.151 | FAILED | rc=1 >>
Shared connection to 192.168.1.151 closed.
192.168.1.152 | FAILED | rc=1 >>
Shared connection to 192.168.1.152 closed.

14.service模塊

用於遠程管理服務,例如enable,start等:
service模塊有以下常用選項:
enabled:設置開機啓動服務
name:name=服務名
state:有以下幾種值
started:啓動服務
stopped:關閉服務
restarted:重啓服務
reloaded:
sleep:當使用state=restarted時。使用sleep設置結束服務到啓動服務之間的時間間隔,例如sleep=3,即restarted中間停頓3秒
pattern:指定服務的路徑,例如/usr/bin/foo
arguments:參數

eg.
啓動nginx服務
ansible test -m service -a ‘name=nginx state=started’
關閉nginx服務
ansible test -m service -a ‘name=nginx state=stopped’
重啓nginx服務,停止與啓動之間休息3秒
ansible test -m service -a ‘name=nginx state=restarted sleep=3’

14.cron模塊
用於管理任務計劃
cron模塊擁有以下選項:
backup:是否對遠程主機上的原計劃任務做備份
cron_file:如果指定該選項,則用該文件替換遠程主機上cron.d目錄下的計劃任務
day:日
hour:小時,hour=4每天4點,hour="5,2"每天5點和2點,*/2每兩小時
minute:分鐘
month:月
weekday:周
job:要執行的任務, 依賴於state=present
name:該任務的描述,自定義
special_time:指定什麼時候執行,參數reboot,yearly,annually,weekly,daily,hourly
state:確認該任務計劃是創建還是刪除
user:以哪個用戶的身份執行

eg.
每天兩天重啓系統
ansible test -m cron -a ‘name=“this is a reboot task” hour=2 user=root job="/sbin/reboot"’
刪除該重啓計劃
ansible test -m cron -a ‘name=“this is a reboot task” hour=2 user=root job="/sbin/reboot" state=absent’
每隔三分鐘查看一下目錄
ansible test -m cron -a ‘name=“check home dir” minute=*/3 user=root job=“ls /home -l >>~/log.txt”’

15.yum模塊
用於使用yum工具安裝管理包

yum模塊擁有以下選項:
state:對軟件包的操作,包含installed或present,latest。absent或removed。
name:軟件名

eg.
安裝apache,httpd
ansible test -m yum -a ‘name=httpd state=installed’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章