ansible模組

小肚腩吖發表於2024-08-31

ansible基礎

  1. 配置ansible的hosts檔案
sudo vim /etc/ansible/hosts

新增以下內容

client1
client2
client3
  1. 測試ansible能否通
    命令
ansible [主機名] -m ping -o
# -O 簡潔輸出

例:

ansible localhost -m ping -o
ansible client1 -m ping -o

可以看到結果如下

  • ping自己可以通
    img
  • ping client1可以通
    img
  • ping client2和client3不可以通,因為沒有配置免密,沒有授權,無法識別到
    img
    如果要連線,可以在後面加上賬號密碼
    img
  • ping client4未匹配到,因為前面在hosts檔案沒有新增上
    img

Inventory-主機清單

含義:清查;存貨清單,財產目錄,主機清單

  1. 增加主機組,增加後可以透過組進行管理主機
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來進行公鑰確認,也可以不寫

img

  1. 增加使用者名稱 密碼
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'

img
3. 增加埠
修改client1的ssh埠

vim /etc/ssh/sshd_config

修改以下內容

#Port 22改為Port 2222

重啟ssh服務

systemcetl restart sshd

到ansible伺服器測試能否通,結果失敗
img
新增埠

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伺服器測試能否通,結果成功
img
4. 組:變數
修改組變數

[webserver]
client1
client2
client3
client4
[webserver:vars]
ansible_ssh_user='ops'
ansible_ssh_pass='password'

img
常用組變數

引數 用途 例子
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
  1. 子分組
    將不同的組合併到一個組
[apacheserver]
client1
client2
[tomcatserver]
client3
client4
[webserver:children]
apacheserver
tomcatserver

測試
img
img
img
6. 自定義主機列表
把hosts檔案移動到家目錄下

sudo mv /etc/ansible/hosts ~

img
使用-i引數呼叫家目錄下的hosts檔案

ansible -i hosts webserver -m ping -o -u ops -k

img
做完實驗後切記把hosts檔案還原回去,以免影響下面的實驗

Ad-Hoc-點對點模式

簡介

  1. shell模組

  2. 複製模組

  • 幫助
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

img
(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表示當有同名的原檔案存在時則進行備份
  1. 使用者模組
  • 建立使用者
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:提升許可權

img
到client驗證使用者是否存在

id xiaodunan

img

  • 修改密碼
    (1)生成加密密碼
echo "123456" | openssl passwd -1 -stdin

img
(2)修改密碼

ansible webserver -m user -a 'name=xiaodunan password="$1$aQkYQKlU$VSaWvQPHXVopR/KBrGbwA1"' -b -K -u ops -k

驗證
img
img

  • 修改shell
ansible webserver -m user -a 'name=xiaodunan shell=/sbin/nologin append=yes' -o -k -b -K

img
驗證
img

  • 刪除使用者
ansible webserver -m user -a 'name=xiaodunan state=absent' -o -k -b -K

驗證
img
4. 軟體包管理

  • 對httpd進行更新
ansible webserver -m yum -a 'name="httpd" state=latest' -o -u ops -k -b -K

img
驗證
img

  • 解除安裝
ansible webserver -m yum -a 'name="httpd" state=absent' -o -u ops -k -b -K

img
驗證
img
5. 服務模組

  • 重新安裝httpd服務
  • 呼叫httpd服務
ansible webserver -m service -a 'name=httpd state=started' -u ops -k -b -K

驗證
img

  1. 檔案模組
  • 建立一個檔案
ansible webserver -m file -a 'path=/tmp/88.txt mode=777 state=touch' -u ops -k -b -K

img
驗證
img

  • 建立一個目錄
ansible webserver -m file -a 'path=/tmp/99 mode=777 state=directory' -u ops -k -b -K

驗證
img
7. 收集模組

  • 收集client1的q全部資訊
ansible client1 -m setup
  • 收集client1的ansible的ipv4資訊
ansible client1 -m setup -a 'filter=ansible_all_ipv4_addresses' -k -b -K

img
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

img
驗證
img
9. cron模組

  1. group模組

YAML-YAML Ain't Markup Language-非標記語言

Role-角色扮演

Homework

相關文章