ansible模組學習

wadeson發表於2017-07-31

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
 
  

 

相關文章