1. 程式人生 > >超詳細Ansible安裝及模塊詳解

超詳細Ansible安裝及模塊詳解

cfengine 核心模塊 and 查看版本 vpd 安裝ansible ansible命令 一個 技術

簡介:
ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。

ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:

(1)、連接插件connection plugins:負責和被監控端實現通信;

(2)、host inventory:指定操作的主機,是一個配置文件裏面定義監控的主機;

(3)、各種模塊核心模塊、command模塊、自定義模塊;

(4)、借助於插件完成記錄日誌郵件等功能;

(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務
技術分享圖片
實驗環境介紹:
三臺CentOS7服務器
管理端:192.168.120.138
被管理端:192.168.120.139
被管理端:192.168.120.140
具體部署步驟:
[root@localhost ~]# hostname manage
[root@localhost ~]# bash
[root@manage ~]# systemctl stop firewalld.service //關閉防火墻
[root@manage ~]# setenforce 0
[root@manage ~]# yum install epel-release -y //安裝epel源

[root@manage ~]# yum install ansible -y //安裝ansible
##查看版本號##
[root@manage ~]# ansible --version
[root@manage ~]# yum install tree -y
[root@manage ~]# tree /etc/ansible //樹狀結構展示文件夾
/etc/ansible
├── ansible.cfg #ansible的配置文件
├── hosts #ansible的主倉庫,用於存儲需要管理的遠程主機的相關信息
└── role #角色

[root@manage ~]# vim /etc/ansible/hosts //配置主機清單

##第25行插入##
[webserver]
192.168.120.139
[mysql]
192.168.120.140

[root@manage ~]# ssh-keygen -t rsa //生成密鑰對,根據提示輸入密碼(我輸入的是abc123)
[root@manage ~]# cd .ssh/
[root@manage .ssh]# ls
id_rsa id_rsa.pub #私鑰/公鑰

##將密鑰推送給兩臺被管理機
[root@manage .ssh]# ssh-copy-id [email protected] //過程需要輸入被管理機器的登錄密碼
[root@manage .ssh]# ssh-copy-id [email protected]
##登錄連接對方(方法一,主機名)
[root@manage .ssh]# ansible webserver -m command -a ‘date‘
Enter passphrase for key ‘/root/.ssh/id_rsa‘: //密碼為剛才輸入的密碼abc123
192.168.120.139 | CHANGED | rc=0 >>
2018年 10月 17日 星期三 15:10:53 CST

##方法二:IP
[root@manage .ssh]# ansible 192.168.120.140 -m command -a ‘date‘
Enter passphrase for key ‘/root/.ssh/id_rsa‘:
192.168.120.140 | CHANGED | rc=0 >>
2018年 10月 17日 星期三 15:12:29 CST

---------免交互代理--------------
[root@manage .ssh]# ssh-agent bash
[root@manage .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa: //輸入密碼abc123
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
##再進行登錄
[root@manage .ssh]# ansible mysql -m command -a ‘date‘
192.168.120.140 | CHANGED | rc=0 >> //無需密碼,直接登錄
2018年 10月 17日 星期三 15:15:20 CST
===========模塊詳解==========
---------ansible命令行模塊--------
------command模塊------
命令格式:ansible [主機] [-m 模塊] [-a args]

[root@manage .ssh]# ansible all -a ‘date‘
192.168.120.140 | CHANGED | rc=0 >>
2018年 10月 17日 星期三 15:34:18 CST

192.168.120.139 | CHANGED | rc=0 >>
2018年 10月 17日 星期三 15:34:18 CST

ansible-doc -l //列出所有已安裝的模塊 註:按q退出
ansible-doc -s yum //-s列出yum模塊描述信息和操作動作

ansible 192.168.80.182 -m command -a ‘date‘ //指定ip執行date
ansible webserver -m command -a ‘date‘ //指定分類執行date
ansible mysql -m command -a ‘date‘
ansible all -m command -a ‘date‘ //所有hosts主機執行date命令
ansible all -a ‘ls /‘ 如果不加-m模塊,則默認運行command模塊

-----cron模塊------
兩種狀態(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron //查看cron模塊信息
ansible webserver -m cron -a ‘minute="*/1" job="/bin/echo heihei" name="test cron job"‘
ansible webserver -a ‘crontab -l‘
ansible webserver -m cron -a ‘name="test cron job" state=absent‘ //移除計劃任務,假如該計劃任務沒有取名字,name=None即可

-----user模塊------
user模塊是請求的是useradd, userdel, usermod三個指令
ansible-doc -s user
ansible mysql -m user -a ‘name="test01"‘ //創建用戶test01
ansible mysql -m command -a ‘tail /etc/passwd‘
ansible mysql -m user -a ‘name="test01" state=absent‘ //刪除用戶test01

-----group模塊-----
group模塊請求的是groupadd, groupdel, groupmod 三個指令。
ansible-doc -s group
ansible mysql -m group -a ‘name=mysql gid=306 system=yes‘
ansible mysql -a ‘tail /etc/group‘
ansible mysql -m user -a ‘name=test01 uid=306 system=yes group=mysql‘
ansible mysql -a ‘tail /etc/passwd‘
ansible mysql -a ‘id test01‘

------copy模塊--------
ansible-doc -s copy
ansible mysql -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘
ansible mysql -a ‘ls -l /opt‘
ansible mysql -a ‘cat /opt/fstab.back‘

ansible mysql -m copy -a ‘content="hello heihei!"
dest=/opt/fstab.back‘ //將hello heihei!寫入/opt/fstab.back
ansible mysql -a ‘cat /opt/fstab.back‘

------file模塊--------
ansible-doc -s file
ansible mysql -m user -a ‘name=mysql system=yes‘
ansible mysql -m group -a ‘name=mysql system=yes‘
ansible mysql -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘ //修改文件的屬主屬組權限等
ansible mysql -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘ //設置/opt/fstab.link為/opt/fstab.back的鏈接文件
ansible mysql -m file -a "path=/opt/fstab.back state=absent" //刪除一個文件
ansible mysql -m file -a "path=/opt/test state=touch" 創建一個文件

-----ping模塊-------
ansible all -m ping

-----service模塊--------
ansible-doc -s service
[root@ab ~]# yum install -y httpd
[root@aa ~]# ansible webserver -a ‘systemctl status httpd‘ //查看web服務器httpd運行狀態
ansible webserver -m service -a ‘enabled=true name=httpd state=started‘ //啟動httpd服務
[root@ab ~]# systemctl status httpd //查看是否開啟

------shell模塊-----
ansible-doc -s shell
ansible mysql -m shell -a ‘echo abc123|passwd --stdin mysql‘ //創建用戶使用無交互模式給用戶設置密碼

------script模塊---------
ansible-doc -s script
vi test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x test.sh
ansible mysql -m script -a ‘test.sh‘
[root@ac ~]# cat /opt/script.txt

-----yum模塊-----
ansible-doc -s yum
ansible mysql -m yum -a ‘name=zsh‘ //yum安裝zsh
[root@ac ~]# rpm -q zsh

ansible mysql -m yum -a ‘name=zsh state=absent‘ //卸載zsh
[root@ac ~]# rpm -q zsh

-----setup模塊-------
ansible-doc -s setup
ansible mysql -m setup //獲取mysql組主機的facts信息

超詳細Ansible安裝及模塊詳解