Ansible是一個當時最爲流行的集羣部署與配置工具,在服務器配置和運維管理的過程當中有重要的做用和優點。本文主要爲結合我的的學習心得,向對ansible有興趣的朋友儘量深刻簡出、詳盡的介紹這個工具的原理和用法。html
Ansible是由Ansible Inc.和Red Hat共同開發的一款開源集羣配置軟件,編寫語言爲python,使用時的配置文件語言爲yaml。核心組件使用了paramiko和PyYaml。其中paramiko是python的ssh支持庫,而PyYaml則用於支持yaml配置文件的使用和playbook的應用。node
Ansible有着很是突出的優勢,從而使其在saltstack等集羣配置工具中脫穎而出。優點以下:python
$ yum install -y ansible
複製代碼
$ ssh-keygen -t rsa ##若是以前已經生成過祕鑰了則不須要這一步
$ ssh-copy-id root@<agent_ip> ##向受管機配置管理機的公鑰,這一步可能須要輸入受管機密碼
複製代碼
/etc/ansible/hosts
文件中,若是你須要使用的是以後的ansible-playbook,則須要在對應的工做文件夾內建立一個hosts文件記錄受管機IP。如下爲一個標準的ansible hosts文件的格式:172.26.0.81 ##不分組直接聲明IP
172.26.0.82:54208 ##申明特殊的ssh端口
[fangwei-test] ##申明瞭受管機的列表和分類名
172.26.0.83 ##直接聲明IP
Printer ansible_ssh_host=172.26.0.84 ##定義別名和IP
EMR-master ansible_ssh_host=172.26.0.85
Snipe-it ansible_ssh_host=172.26.0.86
Kubernetes ansible_ssh_host=172.26.0.87
[fangwei-test:vars] ##配置對應的用戶等ansible變量
ansible_user=root
複製代碼
這裏順便介紹一下hosts文件中經常使用的ansible變量聲明:web
ansible_ssh_host ##鏈接目標主機的地址
ansible_ssh_port ##鏈接目標主機的端口,默認 22 時無需指定
ansible_ssh_user ##鏈接目標主機默認用戶
ansible_ssh_pass ##鏈接目標主機默認用戶密碼
ansible_ssh_connection ##目標主機鏈接類型,能夠是 local 、ssh 或 paramiko
ansible_ssh_private_key_file ##鏈接目標主機的 ssh 私鑰,用於安全要求高的機器。可使用其餘管理主機的公鑰來登陸特定的主機。
ansible_*_interpreter ##指定採用非 Python 的其餘腳本語言
複製代碼
$ ansible fangwei-test -m ping
複製代碼
ansible自己自帶很是多的參數選項,能夠適配幾乎任何集羣部署的需求和各類測試需求。 這些參數在ansible-playbook等延伸指令中每每也通用。shell
$ ansible --help
Usage: ansible <host-pattern> [options]
Define and run a single task 'playbook' against a set of hosts ##單純的ansible指令用於對一個或者一組受管機執行一個playbook任務
普通參數:
-a MODULE_ARGS, --args=MODULE_ARGS
#[重要]模塊參數
--ask-vault-pass # 要求輸入管理密碼
-B SECONDS, --background=SECONDS
#異步運行,X秒後失敗(默認關閉)
-C, --check #不對受管機執行任何改變,可是假設已執行語句並返回結果(用於測試)
-D, --diff #當改變小體積文件的時候,顯示二者的區別,經常和-C參數一塊兒用(用於測試)
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
#將其餘變量設置爲key = value或YAML / JSON,若是filename前綴爲@
-f FORKS, --forks=FORKS
#指定要使用的並行進程數(默認值= 5)
-h, --help #顯示此幫助消息並退出
-i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
#指定庫存主機路徑或逗號分隔的主機列表。PS: --inventory-file已棄用
-l SUBSET, --limit=SUBSET
#進一步將所選主機限制爲其餘模式
--list-hosts #輸出匹配主機列表;不會執行任何其餘操做
-m MODULE_NAME, --module-name=MODULE_NAME
##[重要]要執行的模塊名稱(默認爲command)
-M MODULE_PATH, --module-path=MODULE_PATH
##將冒號分隔的路徑預先添加到模塊庫(默認爲[u'/root/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modules'])
-o, --one-line ##壓縮輸出。
--playbook-dir=BASEDIR
##因爲此工具不使用playbooks,所以將其用做替代playbook目錄。這將設置許多功能的相對路徑,包括roles/group_vars/etc. 也就是變相實現部分playbook功能。
-P POLL_INTERVAL, --poll=POLL_INTERVAL
##若是使用-B(默認值= 15),則設置輪詢間隔。
--syntax-check ##對playbook執行語法檢查,但不執行它.
-t TREE, --tree=TREE ##將輸出記錄到此目錄
--vault-id=VAULT_IDS ##顯示要使用的保管庫標識
--vault-password-file=VAULT_PASSWORD_FILES
##保管庫密碼文件
-v, --verbose ##詳細模式(-vvv表示更多,-vvvv表示啓用鏈接調試)
--version ##顯示ansible版本並退出
鏈接相關參數:
主要關於控制哪些受管機以及如何鏈接到主機。
-k, --ask-pass ##要求輸入受管機密碼
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE
##使用特色文件來認證連接
-u REMOTE_USER, --user=REMOTE_USER
##以特定user來進行鏈接。
-c CONNECTION, --connection=CONNECTION
##要使用的鏈接類型(默認=智能)
-T TIMEOUT, --timeout=TIMEOUT
##以秒爲單位覆蓋鏈接超時(默認值= 10)
--ssh-common-args=SSH_COMMON_ARGS
##指定傳遞給sftp / scp / ssh的公共參數(例如ProxyCommand)
--sftp-extra-args=SFTP_EXTRA_ARGS
##指定僅傳遞給sftp的額外參數(例如-f,-l)
--scp-extra-args=SCP_EXTRA_ARGS
##指定僅傳遞給scp的額外參數(例如-l)
--ssh-extra-args=SSH_EXTRA_ARGS
##指定僅傳遞給ssh的額外參數(例如-R)
特權升級參數:
控制你在目標主機上若是成爲或者成爲哪一個用戶
-s, --sudo ##用sudo(nopasswd)運行操做(不推薦,推薦使用--become-method)
-U SUDO_USER, --sudo-user=SUDO_USER
##所需的sudo用戶(默認= root)(不建議使用,推薦使用--become-method)
-S, --su ##用su運行操做 (不建議使用,推薦使用--become-method)
-R SU_USER, --su-user=SU_USER
##以su做爲此用戶運行操做(默認=無)(不建議使用,推薦使用--become-method)
-b, --become ##用run運行操做(不顯示密碼提示)
--become-method=BECOME_METHOD
##要使用的權限升級方法(默認= sudo),可選項有: [ sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | pmrun | enable | machinectl ]
--become-user=BECOME_USER
##以此用戶身份運行操做(默認= root)
--ask-sudo-pass ##請求sudo密碼(不推薦使用,推薦使用--become-method)
--ask-su-pass ##請求su密碼 (不推薦使用,推薦使用--become-method)
-K, --ask-become-pass
##要求提供權限提高密碼
複製代碼
Ansible內置了海量的原生模塊和大量的用於鏈接第三方API的支持模塊,熟練掌握基礎模塊,而且活用各類擴展模塊,是熟練掌握Ansible的必經之路。這一章裏面咱們會對Ansible的模塊進行基礎的介紹和使用案例分析。至於詳細的模塊介紹能夠查看我寫的Ansible支持模塊詳表。npm
在ansible中查看全部的模塊只須要一個命令:vim
$ ansible-doc -l
複製代碼
若是須要查看某一個特定的模塊的詳細解釋則能夠直接查詢,以ping模塊爲例:centos
[root@Host ~]# ansible-doc ping
> PING (/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py)
A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability... ##以後省略
複製代碼
模塊的重要性除了自己的強大功能外,熟練地掌握模塊也是以後playbook部分的基礎。一個優秀的playbook使用者必然對經常使用模塊的參數瞭如指掌。安全
ping這個模塊主要用來測試可否連通目標服務器。bash
$ ansible test -m ping
複製代碼
Command模塊自如其名,就是一個很純粹的命令執行模塊,用於在受管機上進行命令的執行,其自己也能夠配合不少二級參數和指令進行功能的擴展。不支持管道功能。例如最簡單的查看hostname功能:
[root@Printer ~]# ansible fangwei -m command -a 'hostname'
EMRtest | CHANGED | rc=0 >>
EMR-master
Snipeit | CHANGED | rc=0 >>
localhost.localdomain
複製代碼
須要注意的是,在沒有特意指定ansible的-m
參數的時候,默認調用的Module就是command
。 下面是command經常使用的幾個二級參數:
ansible $目標host -a '$二級參數=$目標文件或路徑 $待執行指令'
[root@Printer ~]# ansible fangwei -a 'chdir=/etc/ansible ls -l'
EMRtest | CHANGED | rc=0 >>
總用量 28
-rw-r--r-- 1 root root 20277 12月 14 13:57 ansible.cfg
-rw-r--r-- 1 root root 1070 12月 26 11:26 hosts
drwxr-xr-x 2 root root 4096 12月 14 13:57 roles
複製代碼
這個模塊的主要特色就是囊括了全部的command的功能和二級參數支持,而且支持管道。
[root@Printer ~]# ansible fangwei -m shell -a 'ps -ef | grep crond | grep -v grep'
EMRtest | CHANGED | rc=0 >>
root 6030 1 0 2018 ? 00:00:13 /usr/sbin/crond -n
Snipeit | CHANGED | rc=0 >>
root 1042 1 0 2月12 ? 00:00:04 /usr/sbin/crond -n
複製代碼
File模塊主要是對於文件的一些簡單操做,主要是建立或者權限設定,已經文件的存在判斷等。
directory:若是目錄不存在,建立目錄
file:即便文件不存在,也不會被建立
link:建立軟連接;hard:建立硬連接
touch:若是文件不存在,則會建立一個新的文件,若是已存在,則更新其最後修改時間
absent:刪除目錄/文件或者取消連接文件
[root@Printer ~]# ansible fangwei -m file -a 'path=/root/ninngenn.cfg state=touch'
Snipeit | CHANGED => {
"changed": true,
"dest": "/root/ninngenn.cfg",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
EMRtest | CHANGED => {
"changed": true,
"dest": "/root/ninngenn.cfg",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
複製代碼
Copy模塊主要用於複製文件到遠程主機。具體參數以下:
[root@Printer ~]# ansible fangwei -m copy -a 'src=/root/ninngenn.cfg dest=/root/ninngenn.cfg force=yes'
EMRtest | CHANGED => {
"changed": true,
"checksum": "458bd6a39e16bc1e00255b66c67b5cb92180166b",
"dest": "/root/ninngenn.cfg",
"gid": 0,
"group": "root",
"md5sum": "cf35206b8cca3e51082bb32ce278ed8d",
"mode": "0644",
"owner": "root",
"size": 56,
"src": "/root/.ansible/tmp/ansible-tmp-1551949966.41-24885251361529/source",
"state": "file",
"uid": 0
}
Snipeit | CHANGED => {
"changed": true,
"checksum": "458bd6a39e16bc1e00255b66c67b5cb92180166b",
"dest": "/root/ninngenn.cfg",
"gid": 0,
"group": "root",
"md5sum": "cf35206b8cca3e51082bb32ce278ed8d",
"mode": "0644",
"owner": "root",
"size": 56,
"src": "/root/.ansible/tmp/ansible-tmp-1551949966.4-190980703709511/source",
"state": "file",
"uid": 0
}
複製代碼
用於受管機服務的配置與管理,相似於systemd,經常使用選項:
[root@Printer ~]# ansible fangwei -m service -a 'name=sshd state=restarted enabled=yes'
Snipeit | CHANGED => {
"changed": true,
"enabled": true,
"name": "sshd",
"state": "started"
}
EMRtest | CHANGED => {
"changed": true,
"enabled": true,
"name": "sshd",
"state": "started"
}
複製代碼
相似於Linux的Crontab功能,用來控制服務或者進程的定時執行功能。經常使用參數:
[root@Printer ~]# ansible fangwei -m cron -a 'name="check home directory" minute=*/10 job="ls -lht /home"'
Snipeit | CHANGED => {
"changed": true,
"envs": [],
"jobs": [
"check home directory"
]
}
EMRtest | CHANGED => {
"changed": true,
"envs": [],
"jobs": [
"check home directory"
]
}
複製代碼
FileSystem模塊用於配置受管機的文件系統。改模塊涉及高位操做,請務必當心,經常使用參數爲:
[root@Printer ~]# ansible test_hosts -m filesystem -a 'dev=/dev/sdb fstype=ext4'
172.26.0.84 | SUCCESS => {
"changed": true
}
複製代碼
Mount模塊用於配置受管機的磁盤掛載,高危模塊,請慎重使用,下面爲經常使用參數:
present:只處理fstab中的配置
absent:刪除掛載點
mounted:自動建立掛載點並掛載
unmounted:卸載
[root@Ansible ~]# ansible test_hosts -m mount -a 'name=/mnt src=/dev/sdb1 fstype=ext4 state=mounted opts=rw'
172.26.0.84 | SUCCESS => {
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"fstype": "ext4",
"name": "/mnt",
"opts": "rw",
"passno": "0",
"src": "/dev/sdb1"
複製代碼
若是熟悉CentOS的朋友應該就會知道,這是使用yum包管理器來管理軟件包的模塊,參數以下:
[root@Printer ~]# ansible fangwei -m yum -a 'name=sl state=latest'
Snipeit | CHANGED => {
"ansible_facts": {
"pkg_mgr": "yum"
},
"changed": true,
"msg": "",
"obsoletes": {
"grub2": {
"dist": "x86_64",
"repo": "@anaconda",
"version": "1:2.02-0.65.el7.centos.2"
},
"grub2-tools": {
"dist": "x86_64",
"repo": "@anaconda",
"version": "1:2.02-0.65.el7.centos.2"
}
},
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * ius: dfw.mirror.rackspace.com\n * webtatic: uk.repo.webtatic.com\nResolving Dependencies\n--> Running transaction check\n---> Package sl.x86_64 0:5.02-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n sl x86_64 5.02-1.el7 epel 14 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 14 k\nInstalled size: 17 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : sl-5.02-1.el7.x86_64 1/1 \n Verifying : sl-5.02-1.el7.x86_64 1/1 \n\nInstalled:\n sl.x86_64 0:5.02-1.el7 \n\nComplete!\n"
]
}
EMRtest | CHANGED => {
"ansible_facts": {
"pkg_mgr": "yum"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\nResolving Dependencies\n--> Running transaction check\n---> Package sl.x86_64 0:5.02-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n sl x86_64 5.02-1.el7 epel 14 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 14 k\nInstalled size: 17 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : sl-5.02-1.el7.x86_64 1/1 \n Verifying : sl-5.02-1.el7.x86_64 1/1 \n\nInstalled:\n sl.x86_64 0:5.02-1.el7 \n\nComplete!\n"
]
}
複製代碼
User模塊顧名思義就是用於用戶參數設置的模塊。經常使用參數:
[root@Ansible ~]# ansible test_hosts -m user -a 'name=user1 uid=1001 group=yfshare createhome=yes home=/home/user1 password="P@ssw0rd" shell=/bin/bash state=present'
172.26.0.84 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 1000,
"home": "/home/user1",
"name": "user1",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
複製代碼
顧名思義用於配置Group信息的模塊,參數以下:
主要用於從http、ftp、https服務器上下載文件(相似於wget),主要參數以下:
[root@Printer ~]# ansible fangwei -m get_url -a 'dest=/root url=http://172.26.0.84/file/drivers/Canon/mac-10-14-canon.dmg'
EMRtest | CHANGED => {
"changed": true,
"checksum_dest": null,
"checksum_src": "eff3bd83c5966373f04d8c4576cbbe610ba0d638",
"dest": "/root/mac-10-14-canon.dmg",
"gid": 0,
"group": "root",
"md5sum": "59b6a0a3dcb9dd3e6e46d1e8374d9c43",
"mode": "0644",
"msg": "OK (23166785 bytes)",
"owner": "root",
"size": 23166785,
"src": "/root/.ansible/tmp/ansible-tmp-1551951882.53-86480089864174/tmp_7guIp",
"state": "file",
"status_code": 200,
"uid": 0,
"url": "http://172.26.0.84/file/drivers/Canon/mac-10-14-canon.dmg"
}
Snipeit | CHANGED => {
"changed": true,
"checksum_dest": null,
"checksum_src": "eff3bd83c5966373f04d8c4576cbbe610ba0d638",
"dest": "/root/mac-10-14-canon.dmg",
"gid": 0,
"group": "root",
"md5sum": "59b6a0a3dcb9dd3e6e46d1e8374d9c43",
"mode": "0644",
"msg": "OK (23166785 bytes)",
"owner": "root",
"size": 23166785,
"src": "/root/.ansible/tmp/ansible-tmp-1551951882.52-38856232211770/tmpPLN4Wf",
"state": "file",
"status_code": 200,
"uid": 0,
"url": "http://172.26.0.84/file/drivers/Canon/mac-10-14-canon.dmg"
複製代碼
playbooks自動收集遠程主機上可用變量,這些變量用於playbooks配置。
[root@Ansible ~]# ansible test_hosts -m setup
172.26.0.84 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"172.26.0.84"
],
"ansible_all_ipv6_addresses": [
"fe80:****:****:fe5c:dc6d"
],
"ansible_architecture": "x86_64",
複製代碼
這個模塊用於在受管機上執行sh腳本。
[root@Ansible ~]# ansible test_hosts -m script -a '/tmp/script.sh'
Enter passphrase for key '/root/.ssh/id_rsa':
172.26.0.84 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.26.0.84 closed.\r\n",
"stdout": "",
"stdout_lines": []
複製代碼
Yaml語言是一種配置語言,主要用於配置文件的設定和數據塊的儲存,做爲一種xml語言的進化形態出現。起主要的優點在於:
上面5條也就是XML不足的地方。同時,YAML也有XML的下列優勢:
更多的內容及規範參見yaml官網。 語法結構經過空格來展現。Sequence裏的項用"-"來表明,Map裏的鍵值對用":"分隔。 這幾乎就是全部的語法了。如下爲一個標準的ansible-playbook的yaml配置文件:
---
- hosts: rotest2
roles:
- sshd
- snmp
- hostname
- vim
- parted
- authorized_keys
複製代碼
roles:角色(主模塊,和主yaml文件、ansible配置文件、host文件同在playbook根目錄,同時在roles文件夾下則是各類自定義的role。在role文件夾下才包括了後續的其餘次級模塊)
root@Ansible ~/ansible-test $ ls
ansible.cfg hosts roles main.yml
root@Ansible ~/ansible-test/roles $ ls
audit authorized_keys hostname megacli nrpe parted snmp sshd telegraf vim
複製代碼
在role文件夾下,會調用下面的各個子模塊,可是除了task之外都不是必須,而是可選項。例如這個telegraf的部署role,下面只包含了files、handlers、tasks三個子模塊。在子模塊中咱們能夠調用任何ansible支持的模塊功能,尤爲是上一章咱們介紹的那些重要功能模塊。
root@Ansible ~/ansible-test/roles/telegraf $ ls
files handlers tasks
複製代碼
ansible-playbook的使用基本和ansible相似,哪怕調用--help
指令查看,也是同樣的參數結果。通常來講因爲playbook調用的模塊較多,配置的內容較豐富,後續的部署影響較大,因此在使用的時候請務必先調用-D -C
兩個參數進行結果測試,排查報錯,確認一切無誤後再進行推送和部署。例如:
~$ ansible-playbook -i hosts ro.yml -t authorized_keys -DC
~$ ansible-playbook -i hosts ro.yml -t authorized_keys
複製代碼
這裏咱們就用一個案例來對ansible-playbook進行詳細的解釋。這個案例比較完整,有助於咱們方便理解。 這個案例的文件架構爲:
root@Ansible ~/ansible-test $ ls
ansible.cfg hosts roles main.yml
複製代碼
具體的main.yml
文件爲:
root@Ansible ~/ansible-test $ cat main.yml
---
- hosts: test
roles:
- sshd
- snmp
- hostname
- vim
- parted
- authorized_keys
- telegraf
- audit
複製代碼
咱們進入roles
文件夾,查看具體的role內容。
root@Ansible ~/ansible-test/roles $ ls
audit authorized_keys hostname megacli nrpe parted snmp sshd telegraf vim
複製代碼
若是咱們須要在受管機上安裝某個軟件,以telegraf這個role爲例:
root@Ansible ~/ansible-test/roles/telegraf $ tree
.
├── files
│ ├── telegraf-1.8.0-1.x86_64.rpm #安裝包rpm文件
│ ├── telegraf.conf #自定義的配置文件
│ └── telegraf.conf.bak #原始默認配置文件(非必須)
├── handlers
│ └── main.yml #處理器配置
└── tasks
└── main.yml #role的任務主配置
3 directories, 5 files
-------------------------------------
root@Ansible ~/ansible-test/roles/telegraf $ cat ./tasks/main.yml
---
- name: install telegraf #配置npm的下載地址
yum: name=https://dl.influxdata.com/telegraf/releases/telegraf-1.8.0-1.x86_64.rpm state=present
tags: telegraf
- name: copy telegraf config #配置文件的複製
copy: src=telegraf.conf dest=/etc/telegraf/
notify: reload telegraf
tags: telegraf
- name: ensure service telegraf is started and enabled
service: name=telegraf state=started enabled=yes
tags: telegraf #確保在受管機上開機啓動telegraf服務
-------------------------------------
root@Ansible ~/ansible-test/roles/telegraf $ cat ./handlers/main.yml
---
- name: reload telegraf #異常情況從新加載
service: name=telegraf state=reloaded
複製代碼
而對於部分複雜的配置需求,咱們甚至可使用shell腳原本對受管機進行相關的處理,例如磁盤掛載或者分配等系統級別的任務。
root@Ansible ~/ansible-test/roles/parted $ ls
files tasks
-------------------------------------
root@Ansible ~/ansible-test/roles/parted $ tree
.
├── files
│ ├── parted.sh #shell腳本文件
│ └── parted.sh.bak
└── tasks
└── main.yml #主task配置
2 directories, 3 files
-------------------------------------
root@Ansible ~/ansible-test/roles/parted $ cat files/parted.sh
#!/bin/bash
OPTS="noatime,nobarrier,errors=remount-ro,nofail"
x=b
#for x in {b}
#do
echo "mkpart /dev/vd${x}"
parted /dev/vd${x} -s mklabel gpt
parted /dev/vd${x} -s mkpart primary 1 100%
echo ">>> mkfs.ext4 /dev/vd${x}1"
mkfs.ext4 -q /dev/vd${x}1
if [ $? -eq 0 ]; then
UUID=$(blkid /dev/vd${x}1 | sed -e 's/.*\(UUID=.*\) TYPE.*/\1/')
echo -e "${UUID}\t\t/data\t\text4\t\t${OPTS}\t\t0 0" >> /etc/fstab
fi
seq=$(($seq+1))
#done #經過shell腳本進行磁盤的分區與掛載
-------------------------------------
root@Ansible ~/ansible-test/roles/parted $ cat tasks/main.yml
---
#parted
- name: copy parted config
copy: src={{ item }} dest=~ owner=root group=root mode="0777"
with_items: #複製腳本到受管機並配置chown權限
- parted.sh #執行shell腳本
tags: parted
複製代碼
關於playbook的其餘功能你們能夠經過實踐和閱讀其餘案例來學習,ansible很是靈活,請務必善於使用。