Ansible 工作机制和简单命令

Ansible工作机制
Ansible 在管理节点将 Ansible 模块通过 SSH 协议推送到被管理端执行,执行完之后自动删除,可以使用 SVN 等来管理自定义模块及编排. Ansible 工作机制和简单命令 由上面的图可以看到 Ansible 的组成由 5 个部分组成:
Ansible: 核心
Modules: 包括 Ansible 自带的核心模块及自定义模块
Plugins: 完成模块功能的补充,包括连接插件、邮件插件等
Playbooks: 编排,定义 Ansible 多任务配置文件,有 Ansible 自动执行
Inventory: 定义 Ansible 管理主机的清单
Ansible安装
除了源码编译安装还有两种比较简单的安装方式。
3.1 yum安装
rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install python-devel ansible -y
3.2 pip安装
pip install ansible
Ansible的简单使用
Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务。
默认路径可以通过修改 ansible.cfg 的 hostfile 参数指定路径。
cat /etc/ansible/hosts
[web]
192.168.1.100
192.168.1.101
注:为了避免Ansible下发指令时输入目标主机密码,需要提前配置免密钥登陆
#@@ping测试,所有主机
ansible all -m ping
#@@运行shell命令,web组服务器
ansible web -m shell -a “ps aux | grep java”
#@@文件传输(copy)  将ansible本地的/etc/hosts 文件拷贝到所有机器的/tmp/下,命名为hosts文件
ansible web -m copy -a “src=/etc/hosts dest=/tmp/hosts”
#@@包管理(yum)
ansible web -m yum -a “name=nc state=present”
#@@用户管理(user)
ansible web -m user -a “name=zabbix uid=1000 state=present”
#@@服务控制(services)
ansible web -m service -a “name=nfs state=started”


setup模块
查看发行版:
ansible -i ~/hosts.temp1 allhost -m setup -a “filter=ansible_distribution*”
查看管理包:
ansible -i ~/hosts.temp1 allhost -m setup -a “filter=ansible_pkg_mgr”

apt模块:

执行apt-get update 指令,更新索引

– name: Update repositories cache
apt:
update_cache: yes

安装VIM:

– name: Install the package “vim”
apt:
name: vim
state: present

移除nano:
– name: Remove “nano” package
apt:
name: nano
state: absent

command模块:

重新开机:

– name: Reboot at now
command: /sbin/shutdown -r now
当某个档案不存在时才执行该指令。

– name: create .ssh directory
command: mkdir .ssh creates=.ssh/
先切换目录再执行指令。

– name: cat /etc/passwd
command: cat passwd
args:
chdir: /etc

cp模块
复制ssh public key到远端( chmod 644 /target/file)。

– name: copy ssh public key to remote node
copy:
src: files/id_rsa.pub
dest: /home/docker/.ssh/authorized_keys
owner: docker
group: docker
mode: 0644
复制ssh public key到远端( chmod u=rw,g=r,o=r /target/file)。

– name: copy ssh public key to remote node
copy:
src: files/id_rsa.pub
dest: /home/docker/.ssh/authorized_keys
owner: docker
group: docker
mode: “u=rw,g=r,o=r”
复制nginx vhost设定档到远端,并备份原有的档案。

– name: copy nginx vhost and backup the original
copy:
src: files/ironman.conf
dest: /etc/nginx/sites-available/default
owner: root
group: root
mode: 0644
backup: yes

file模块:
建立档案( touch),并设定档案权限为644。

– name: touch a file, and set the permissions
file:
path: /etc/motd
state: touch
mode: “u=rw,g=r,o=r”
建立目录( mkdir),并设定档案拥有者为docker。

– name: create a directory, and set the permissions
file:
path: /home/docker/.ssh/
state: directory
owner: docker
mode: “700”
建立软连结( ln)。

– name: create a symlink file
file:
src: /tmp
dest: /home/docker/tmp
state: link

lineinfile模块:
移除sudo权限

– name: remove sudo permission of docker
lineinfile:
dest: /etc/sudoers
state: absent
regexp: ‘^docker’

在 /etc/hosts 里用 127.0.0.1 localhost 取代开头和结尾结尾状语从句:状语结尾从句:为 127.0.0.1 的一行。

– name: set localhost as 127.0.0.1
lineinfile:
dest: /etc/hosts
regexp: ‘^127\.0\.0\.1’
line: ‘127.0.0.1 localhost’
owner: root
group: root
mode: 0644

service模块:
启用nginx
– name: start nginx service
service:
name: nginx
state: started

停止nginx:
– name: stop nginx service
service:
name: nginx
state: stopped
重开网路服务:
– name: restart network service
service:
name: network
state: restarted
args: eth0

shell模块(在远端用/bin/sh执行指令的指令模组(命令模块),支持变数(变量)和 <, >, | , ; 和 & 等运算):
借由 ls 状语从句: wc 检查档案数量
– name: check files number
shell: ls /home/docker/ | wc -l
把所有的Python的中的进程给杀掉:
– name: kill all python process
shell: kill -9 $(ps aux | grep ssh | awk ‘{ print $2 }’)

检查档案是否存在,若不存在则建立它。

stat模块(类似linux的stat命令):
– name: check the ‘vimrc’ target exists
stat:
path: /home/docker/.vimrc
register: stat_vimrc

– name: touch vimrc
file:
path: /home/docker/.vimrc
state: touch
mode: “u=rw,g=r,o=r”
when: stat_vimrc.stat.exists == false

取得文件的md5sum值
– name: Use md5sum to calculate checksum
stat:
path: /path/to/something
checksum_algorithm: md5sum