ansible基礎
- 配置ansible的hosts檔案
sudo vim /etc/ansible/hosts
新增以下內容
client1
client2
client3
- 測試ansible能否通
命令
ansible [主機名] -m ping -o
# -O 簡潔輸出
例:
ansible localhost -m ping -o
ansible client1 -m ping -o
可以看到結果如下
- ping自己可以通
- ping client1可以通
- ping client2和client3不可以通,因為沒有配置免密,沒有授權,無法識別到
如果要連線,可以在後面加上賬號密碼
- ping client4未匹配到,因為前面在hosts檔案沒有新增上
Inventory-主機清單
含義:清查;存貨清單,財產目錄,主機清單
- 增加主機組,增加後可以透過組進行管理主機
sudo vim /etc/ansible/hosts
新增以下內容
[webserver] #組名,可自定義
client1
client2
client3
client4
測試結果
ansible webserver -m ping -o -u ops -k --ssh-common-args="-o StrictHostKeyChecking=no"
#--ssh-common-args="-o StrictHostKeyChecking=no"作用是忽略ssh首次連線手動輸入yes/no來進行公鑰確認,也可以不寫
- 增加使用者名稱 密碼
sudo vim /etc/ansible/hosts
新增以下內容
[webserver]
client1 ansible_ssh_user='ops' ansible_ssh_pass='password'
client2 ansible_ssh_user='ops' ansible_ssh_pass='password'
client3 ansible_ssh_user='ops' ansible_ssh_pass='password'
client4 ansible_ssh_user='ops' ansible_ssh_pass='password'
或
[webserver]
client[1:4] ansible_ssh_user='ops' ansible_ssh_pass='password'
3. 增加埠
修改client1的ssh埠
vim /etc/ssh/sshd_config
修改以下內容
#Port 22改為Port 2222
重啟ssh服務
systemcetl restart sshd
到ansible伺服器測試能否通,結果失敗
新增埠
vim /etc/ansible/hosts
[webserver]
client1 ansible_ssh_user='ops' ansible_ssh_pass='password' ansible_ssh_port='222'
client2 ansible_ssh_user='ops' ansible_ssh_pass='password'
client3 ansible_ssh_user='ops' ansible_ssh_pass='password'
client4 ansible_ssh_user='ops' ansible_ssh_pass='password'
再次到ansible伺服器測試能否通,結果成功
4. 組:變數
修改組變數
[webserver]
client1
client2
client3
client4
[webserver:vars]
ansible_ssh_user='ops'
ansible_ssh_pass='password'
常用組變數
引數 | 用途 | 例子 |
---|---|---|
ansible_ssh_host | 定義 hosts ssh 地址 | ansible_ssh_host=192.168.1.100 |
ansible_ssh_port | 定義 hosts ssh 埠 | ansible_ssh_port=3000 |
ansible_ssh_user | 定義 hosts ssh 認證使用者 | ansible_ssh_user=user |
ansible_ssh_pass | 定義 hosts ssh 認證密碼 | ansible_ssh_pass=pass |
ansible_sudo | 定義 hosts sudo 密碼 | ansible_sudo=www |
ansible_sudo_exe | 定義 hosts sudo 路徑 | ansible_sudo_exe=/usr/bin/sudo |
ansible_connection | 定義 hosts 連線方式 | ansible_connection=local |
ansible_ssh_private_key_file | 定義 hosts 私鑰 | ansible_ssh_private_key_file=/root/key |
ansible_ssh_shell_type | 定義 hosts shell型別 | ansible_ssh_shell_type=bash |
ansible_python_interpreter | 定義 hosts 任務執行python路徑 | ansible_python_interpreter=/usr/bin/python2.6 |
ansible_*_interpreter | 定義 hosts其他語言解析路徑 | ansible_*_interpreter=/usr/bin/ruby |
- 子分組
將不同的組合併到一個組
[apacheserver]
client1
client2
[tomcatserver]
client3
client4
[webserver:children]
apacheserver
tomcatserver
測試
6. 自定義主機列表
把hosts檔案移動到家目錄下
sudo mv /etc/ansible/hosts ~
使用-i引數呼叫家目錄下的hosts檔案
ansible -i hosts webserver -m ping -o -u ops -k
做完實驗後切記把hosts檔案還原回去,以免影響下面的實驗
Ad-Hoc-點對點模式
簡介
-
shell模組
-
複製模組
- 幫助
ansible-doc copy
- 案例
(1)將伺服器的/etc/ansible/hosts檔案分發到各個client
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777' -u ops -k
到各個client檢視
[ops@ansible-client1 ~]$ cat /tmp/2.txt
(2)將伺服器的/etc/ansible/hosts檔案分發到各個client並備份
ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777' -u ops -k backup=yes
#backup=yes表示當有同名的原檔案存在時則進行備份
- 使用者模組
- 建立使用者
ansible webserver -m user -a 'name=xiaodunan state=present' -u ops -k --become-user root -K --become
#-k:ssh使用者的密碼;-K:sudo的密碼;--become-user:用sudo的使用者(預設是root,可不寫);--become:提升許可權
到client驗證使用者是否存在
id xiaodunan
- 修改密碼
(1)生成加密密碼
echo "123456" | openssl passwd -1 -stdin
(2)修改密碼
ansible webserver -m user -a 'name=xiaodunan password="$1$aQkYQKlU$VSaWvQPHXVopR/KBrGbwA1"' -b -K -u ops -k
驗證
- 修改shell
ansible webserver -m user -a 'name=xiaodunan shell=/sbin/nologin append=yes' -o -k -b -K
驗證
- 刪除使用者
ansible webserver -m user -a 'name=xiaodunan state=absent' -o -k -b -K
驗證
4. 軟體包管理
- 對httpd進行更新
ansible webserver -m yum -a 'name="httpd" state=latest' -o -u ops -k -b -K
驗證
- 解除安裝
ansible webserver -m yum -a 'name="httpd" state=absent' -o -u ops -k -b -K
驗證
5. 服務模組
- 重新安裝httpd服務
- 呼叫httpd服務
ansible webserver -m service -a 'name=httpd state=started' -u ops -k -b -K
驗證
- 檔案模組
- 建立一個檔案
ansible webserver -m file -a 'path=/tmp/88.txt mode=777 state=touch' -u ops -k -b -K
驗證
- 建立一個目錄
ansible webserver -m file -a 'path=/tmp/99 mode=777 state=directory' -u ops -k -b -K
驗證
7. 收集模組
- 收集client1的q全部資訊
ansible client1 -m setup
- 收集client1的ansible的ipv4資訊
ansible client1 -m setup -a 'filter=ansible_all_ipv4_addresses' -k -b -K
8. fetch模組
fetch從遠端某主機獲取檔案到本地
- 引數
dest:用來存放檔案的目錄,例如存放目錄為backup,原始檔名稱為/etc/profile;那麼在主機中,儲存為/backup/master/etc/profile
src:在遠端拉取的檔案,並且必須是一個file,不能是目錄
- 案例
在client1建立一個file23檔案
[ops@ansible-client1 ~]$ touch /tmp/file23.txt
[ops@ansible-client1 ~]$ vim /tmp/file23.txt
在server用ansible把client1的file23檔案拉取過來
ansible client1 -m fetch -a 'src=/tmp/file23.txt dest=/tmp' -u ops -k -b -K
驗證
9. cron模組
- group模組