ansible的功能:
模組化任務,呼叫特定的模組,完成特定的任務
基於python語言實現,由paramiko、pyyaml和jinja2三個模組構建
部署簡單,agentless,ansible基於ssh協議實現的
主從模式
支援自定義模組
支援playbook
允許重複執行
ansible的安裝,ansible提供的rpm包在epel源上
note:epel源安裝
cd /etc/yum.repos.d
rpm -ivh epel-release-latest-6.noarch.rpm
yum install ansible -y
ansible主端:192.168.223.136
節點1:192.168.223.146
1、ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.223.143
3、遠端連線ssh root@192.168.223.146或者ssh 192.168.223.146
4、在節點上執行命令
[root@node1 ~]# ssh 192.168.223.146 'date'
Sun Jul 30 20:02:58 CST 2017
[root@node1 ~]# date
Sun Jul 30 12:03:00 CST 2017
ansible基礎用法:
ansible <host-pattern> [-m module_name] [-a args] [options]
ansible-doc -l 顯示ansible支援的模組
[root@node1 ~]# ansible-doc -s command 顯示模組的具體用法
- name: Executes a command on a remote node
解決:定義host清單
1、cp hosts hosts.bak
2、修改hoats檔案
[nodes]
192.168.223.146
command模組:
ansible nodes -m command -a 'ifconfig'
ping模組:
[root@node1 ansible]# ansible all -m ping
192.168.223.146 | SUCCESS => {
"changed": false,
"ping": "pong"
}
user模組:
#ansible-doc -s user
新建某個使用者:
[root@node1 ansible]# ansible nodes -m user -a "name=wadeson state=present"
192.168.223.146 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 500,
"home": "/home/wadeson",
"name": "wadeson",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 500
}
-a後面接模組的引數:
name=:表示需要建立的新使用者的名字
state:表示使用者存在的狀態(由於是新建使用者,所以狀態為present)
刪除某個使用者: absent不在的
[root@node1 ansible]# ansible nodes -m user -a "name=wadeson state=absent"
192.168.223.146 | SUCCESS => {
"changed": true,
"force": false,
"name": "wadeson",
"remove": false,
"state": "absent"
}
如果state不填寫,預設是present,建立一個新的
cron模組:
ansible-doc -s cron
[root@node1 ansible]# ansible all -m cron -a 'name="sync time" minute=2 user=root state=present job="/usr/sbin/ntpdate time.nist.gov &> /dev/null"'
192.168.223.146 | FAILED! => {
"changed": false,
"failed": true,
"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
}
解決辦法:在節點主機上安裝libselinux-python
yum -y install libselinux-python
再次在ansible伺服器上執行:
[root@node1 ansible]# ansible all -m cron -a 'name="sync time" minute=*/2 user=root state=present job="/usr/sbin/ntpdate time.nist.gov &> /dev/null"'
192.168.223.146 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"sync time"
]
}
在節點上檢視:
[root@wadeson ~]# crontab -l
#Ansible: sync time
2 * * * * /usr/sbin/ntpdate time.nist.gov &> /dev/null
刪除cron任務:
ansible all -m cron -a 'name="sync time" state=absent‘
copy模組:
ansible-doc -s copy
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fatab.bak mode=600"
節點上檢視:
[root@wadeson ~]# ll /tmp/
總用量 8
-rw-------. 1 root root 899 7月 30 21:55 fatab.bak
[root@node1 ansible]# cat test_var.yaml
- hosts: nodes
remote_user: root
tasks:
- name: create a new file
copy: content={{ node_var }} dest=/tmp/ansible_var.txt
file模組:
ansible-doc -s file,建立檔案,目錄,連結檔案
ansible all -m file -a 'path=/tmp/testdir state=directory'
ansible all -m file -a 'src=/tmp/fstab.bak dest=/root/fstab.bak state=link'
[root@wadeson ~]# ll
總用量 16
-rw-------. 1 root root 1104 7月 30 19:54 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 14 7月 30 22:03 fstab.bak -> /tmp/fstab.bak
state:file|absent|directory|link|hard|touch
在遠端節點上建立一個新檔案:
ansible nodes -m file -a 'path=/tmp/ansible_agent.txt state=touch'
path這裡可以為dest或者name
yum模組:
ansible-doc -s yum
ansible all -m yum -a 'name="vim,wget" state=latest'
state:present|latest|absent
ansible all -m yum -a 'name=ntpdate state=latest'
按照ntpdate包,然後定義cron任務
service模組:
引數:
enabled:設定是否開機啟動
state:started|stopped|restarted
ansible all -m yum -a 'name=httpd state=latest'
ansible all -m service -a 'name=httpd state=started enabled=no'
節點檢視:
[root@wadeson ~]# rpm -qa httpd
httpd-2.2.15-60.el6.centos.4.x86_64
[root@wadeson ~]# chkconfig --list|grep httpd
httpd 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
shell模組:
-a “command”,沒有額外的引數
命令中帶有管道,變數等等
[root@node1 ~]# ansible nodes -m shell -a 'echo "redhat"|passwd --stdin testuser1'
192.168.223.146 | SUCCESS | rc=0 >>
更改使用者 testuser1 的密碼 。
passwd: 所有的身份驗證令牌已經成功更新。
而command模組:
[root@node1 ~]# ansible nodes -m command -a 'echo "redhat"|passwd --stdin testuser1'
192.168.223.146 | SUCCESS | rc=0 >>
redhat|passwd --stdin testuser1
可以看出並沒有修改使用者的密碼,command模組只能執行簡單的命令
script模組:
1、將指令碼傳到node上
2、並在node上執行該指令碼
ansible伺服器:
[root@node1 ~]# cat echo.sh
#!/bin/bash
echo "ansible is better" > /tmp/echo.text
ansible all -m script -a "/root/echo.sh"
節點檢視:
[root@wadeson ~]# ll /tmp/
總用量 16
-rw-r--r--. 1 root root 18 7月 30 14:46 echo.text
setup模組:檢視facts
收集node上的系統資訊,可以當作變數進行呼叫
ansible all -m setup