[自動化] 部署Ansible服務及其經常使用的命令模塊

Ansible簡介:

Ansible基於Python開發,默認經過SSH協議進行遠程命令執行或下發配置,無需部署任何客戶端代理軟件,可同時支持多臺主機進行管理。ansible是基於模塊工做的,自己沒有批量部署的能力,真正具備批量部署的是ansible所運行的模塊,可以實現批量運行命令、部署程序、配置系統等功能。mysql

Ansible的基本架構主要包括:

(1)Ansible core核心引擎。
(2)Host inventory 主機清單:用來定義Ansible管理的主機,默認是在Ansible配置文件中定義被管理主機,同時也支持自定義動態主機清單。
(3)Comecton pugins鏈接插件:負責和被管理主機實現通訊。除支持使用SSH鏈接被管理主機外,Ansible還支持其餘的鏈接方式,因此須要有鏈接插件將各個主機用鏈接插件鏈接到Ansible。
(4)Core modules核心模塊:是Ansible自帶的模塊,使用這些模塊將資源分發到被管理主機,使其執行特定任務或匹配特定的狀態。
(5)Custom meodle自定義模塊:用於完成模塊功能的補充,可藉助相關插件完成記
錄日誌、發送郵件等功能。
(6)Playbooks (yaml, jinja2) 劇本:用來集中定義Ansible任務的配置文件,即將多個任務定義在一個劇本中由Ansible自動執行,能夠由控制主機針對多臺被管理主機同時運行多個任務。web

系統環境sql

主機 操做系統 IP地址 組名
控制主機 CentOS 7.4 x86_64 192.168.100.138
被管理主機 CentOS 7.4 x86_64 192.168.100.131 webserver
被管理主機 CentOS 7.4 x86_64 192.168.100.132 mysql

安裝部署Ansible服務

1.安裝Ansible

準備yum源,直接使用yum命令安裝Ansibleshell

yum install -y epel-release  #安裝epel源
yum install ansible -y

查看ansible軟件的版本信息vim

ansible --version

[自動化] 部署Ansible服務及其經常使用的命令模塊
Ansible主要相關配置文件在/etc/ansible目錄下。bash

[root@promote ~]# cd /etc/ansible/
[root@promote ansible]# pwd
/etc/ansible
[root@promote ansible]# ll
總用量 24
-rw-r--r--. 1 root root 19549 7月   6 23:53 ansible.cfg  #配置文件
-rw-r--r--. 1 root root  1016 7月   6 23:53 hosts  #管控主機文件
drwxr-xr-x. 2 root root     6 7月   6 23:53 roles

2.配置主機清單

修改主機與組配置後,可同時鏈接到多個被管理主機上執行任務。架構

cd /etc/ansible
vim hosts
    [webserver]       #被管理主機分類
    192.168.100.131
    [mysql]
    192.168.100.132   #被管理主機分類

3.設置SSH無密碼登陸

使用ssh-keygen產生一對密鑰,使用ssh-copy-id來下發生成的公鑰。ssh

ssh-keygen -t rsa       #基於ssh密鑰的鏈接
ssh-copy-id root@192.168.100.131
ssh-copy-id root@192.168.100.132    #配置密鑰對驗證

[自動化] 部署Ansible服務及其經常使用的命令模塊
爲了實現免交互代理,能夠輸入如下命令:ide

ssh-agent bash
ssh-add

[自動化] 部署Ansible服務及其經常使用的命令模塊

Ansible命令應用

Ansible可使用命令行方式進行自動化管理,它的命令行管理工具都是由一系列模塊、參數所支持的,基本語法以下:工具

ansible [主機] [-m 模塊] [-a args]

Ansible自帶了不少模塊,可以下發執行Ansible的各類管理任務。不過查看模塊幫助信息能夠用ansible-doc工具。

ansible-doc -l     #列出全部已安裝的模塊 注:按q退出
ansible-doc -s yum   #-s列出yum模塊描述信息和操做動做

[自動化] 部署Ansible服務及其經常使用的命令模塊
[自動化] 部署Ansible服務及其經常使用的命令模塊

1.command模塊

-m選項指定使用模塊,默認使用command模塊,用於在被管理主機上運行命令。

(1)使用IP地址指定運行主機

ansible 192.168.100.131 -m command -a 'date'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(2)使用被管理主機的分類運行

ansible mysql -m command -a 'date'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(3)在全部主機清單中的主機運行

ansible all -m command -a 'date'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(4)不加-m選項,默認運行command模塊

ansible all -a 'tail -1 /etc/passwd'

[自動化] 部署Ansible服務及其經常使用的命令模塊

2.cron模塊

cron模塊用於定義任務計劃。其中有兩種狀態(state ):present表示添加(省略狀態默認使用),absent表示移除。

(1)添加任務計劃

ansible webserver -m cron -a 'minute="*/1" job="/bin/echo heihei" name="test cron job"'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看計劃是否添加成功
ansible webserver -a 'crontab -l'

[自動化] 部署Ansible服務及其經常使用的命令模塊
進webserver組的主機查看
[自動化] 部署Ansible服務及其經常使用的命令模塊
[自動化] 部署Ansible服務及其經常使用的命令模塊
(2)移除任務計劃

ansible webserver -m cron -a 'name="test cron job" state=absent'

[自動化] 部署Ansible服務及其經常使用的命令模塊

3.user模塊

user模塊用於建立新用戶和更改、刪除已存在的用戶。其中name選項用來指明建立的用戶名稱。請求的是useradd, userdel, usermod三個指令
(1)建立用戶

ansible mysql -m user -a 'name="test01"'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看用戶是否添加成功
ansible mysql -m command -a 'tail /etc/passwd'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(2)刪除用戶

ansible mysql -m user -a 'name="test01" state=absent'

[自動化] 部署Ansible服務及其經常使用的命令模塊

4.group模塊

group模塊用於對用戶組進行管理。請求的是groupadd, groupdel, groupmod 三個指令。

例如:建立mysql組,將已建立好的用戶test01添加到mysql組中。

#建立mysql組
ansible mysql -m group -a 'name=mysql gid=306 system=yes'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看組是否添加
ansible mysql -a 'tail /etc/group'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#將用戶mysql添加到mysql組中
ansible mysql -m user -a 'name=mysql uid=306 system=yes group=mysql'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看用戶mysql是否添加到mysql組中
ansible mysql -a 'tail -1 /etc/passwd'

[自動化] 部署Ansible服務及其經常使用的命令模塊

5.copy模塊

copy模塊用於實現文件複製和批量下發文件。其中使用src來定義本地源文件路徑,使用dest定義被管理主機文件路徑,使用content則是經過指定信息內容來生成目標文件。

(1)將本地文件/etc/fstab複製到被管理主機上的/opt/fstab.back,將全部者設置爲root,權限設置爲640.

ansible mysql -m copy -a 'src=/etc/fstab dest=/opt/fstab.back owner=root mode=640'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看是否存在複製的文件
ansible mysql -a 'ls -l /opt'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(2)將hello heihei!寫入/opt/fstab.back。

ansible mysql -m copy -a 'content="hello heihei!"
dest=/opt/fstab.back'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看內容是否寫入
ansible mysql -a 'cat /opt/fstab.back'

[自動化] 部署Ansible服務及其經常使用的命令模塊

6.file模塊

file模塊來設置文件屬性。其中使用path指定文件路徑,使用src定義源文件路徑,使用name或dest來替換建立文件的符號連接。

(1)設置文件/opt/fstab.back的所屬主爲mysql,所屬組爲mysql,權限爲644.

ansible mysql -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.back'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看文件的屬性
ansible mysql -a 'ls -l /opt/'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(2)設置/opt/fstab.link爲/opt/fstab.back的連接文件。

ansible mysql -m file -a 'path=/opt/fstab.link src=/opt/fstab.back state=link'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看連接文件
ansible mysql -a 'ls -l /opt/'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(3)刪除文件/opt/fstab.back

ansible mysql -m file -a "path=/opt/fstab.back state=absent"

[自動化] 部署Ansible服務及其經常使用的命令模塊
(4)建立文件/opt/test。

ansible mysql -m file -a "path=/opt/test state=touch"

[自動化] 部署Ansible服務及其經常使用的命令模塊

7.ping模塊

ping,模塊是用來檢測指定主機的連通性。

ansible all -m ping

[自動化] 部署Ansible服務及其經常使用的命令模塊

8.shell模塊

shell模塊能夠在被管理主機上運行命令,並支持像管道符等功能的複雜命令。

例如,建立用戶使用無交互模式給用戶設置密碼。

#建立用戶user1
ansible mysql -m user -a 'name=user1'
#無交互給用戶user1設置密碼
ansible mysql -m shell -a 'echo abc123|passwd --stdin user1'

[自動化] 部署Ansible服務及其經常使用的命令模塊

9.script模塊

script模塊能夠將本地腳本複製到被管理主機上進行運行。須要注意的是,使用相對路徑來指定腳本。

例如,編輯一個本地腳本test.sh,複製到被管理主機上運行。

vi /opt/test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x /opt/test.sh

ansible mysql -m script -a '/opt/test.sh'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看腳本實現
ansible mysql -a 'cat /opt/script.txt'

[自動化] 部署Ansible服務及其經常使用的命令模塊

10.yum模塊

yum模塊復責在被管理主機上安裝與卸載軟件包,其中使用name指定要安裝的軟件包,使用state指定安裝軟件包的狀態,present、latest用來表示安裝,absent表示卸載。

(1)安裝zsh軟件包

ansible mysql -m yum -a 'name=zsh'

[自動化] 部署Ansible服務及其經常使用的命令模塊

#查看是否安裝
ansible mysql -a 'rpm -q zsh'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(2)卸載zsh軟件包

ansible mysql -m yum -a 'name=zsh state=absent'

[自動化] 部署Ansible服務及其經常使用的命令模塊
(3)安裝httpd軟件包

ansible webserver -m yum -a 'name=httpd'

[自動化] 部署Ansible服務及其經常使用的命令模塊

11.service模塊

service模塊用來控制管理服務的運行狀態。其中enabled表示是否開機自啓動,取值爲true或false,使用name定義服務名稱,使用state指定服務狀態,取值分別爲started、stoped、restarted.

(1)啓動httpd服務並設置開機自啓動。

ansible webserver -m service -a 'enabled=true name=httpd state=started'

[自動化] 部署Ansible服務及其經常使用的命令模塊

(2)查看httpd服務的狀態

ansible webserver -a 'systemctl status httpd'

[自動化] 部署Ansible服務及其經常使用的命令模塊

12.setup模塊

setup模塊收集、查看被管理主機的facts。每一個被管理主機在接並運行管理命令以前,都會將本身的相關信息(操做系統、IP地址)發送給控制主機。

例如,查看mysql組的facts信息。

ansible mysql -m setup

[自動化] 部署Ansible服務及其經常使用的命令模塊
以上皆是Ansible經常使用的模塊,若是用到其餘模塊可使用ansible-doc工具。

相關文章
相關標籤/搜索