ansible模塊學習

ansible的功能:node

  模塊化任務,調用特定的模塊,完成特定的任務python

  基於python語言實現,由paramiko、pyyaml和jinja2三個模塊構建linux

  部署簡單,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
一、ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
二、ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.223.143
三、遠程鏈接ssh root@192.168.223.146或者ssh 192.168.223.146
四、在節點上執行命令
[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清單
一、cp hosts hosts.bak
二、修改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.txtshell

 

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模塊:
一、將腳本傳到node上
二、並在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
 
相關文章
相關標籤/搜索