ansible常用命令

 

1. 配置需求

对管理主机的要求

目前,只要机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.主机的系统可以是 Red Hat, Debian, CentOS, OS X, BSD的各种版本,等等.

对节点主机的要求

通常我们使用 ssh 与托管节点通信,默认使用 sftp.如果 sftp 不可用,可在 ansible.cfg 配置文件中配置成 scp 的方式. 在托管节点上也需要安装 Python 2.4 或以上的版本.如果版本低于 Python 2.5 ,还需要额外安装一个模块:

 

python-simplejson

2. ansible配置文件

[root@ocp ~]# ansible --version

ansible 2.2.1.0

  config file = /etc/ansible/ansible.cfg

  configured module search path = Default w/o overrides

可以查看配置文件路径。

 

ansible 配置文件默认存使用 /etc/ansible/ansible.cfg 

 

hosts文件默认存使用 /etc/ansible/hosts

3. 主机清单示例

mail.example.com # FQDN

 

[webservers] # 方括号[]中是组名

host1

host2:5522  # 指定连接主机得端口号

localhost ansible_connection=local # 定义连接类型

host3 http_port=80 maxRequestsPerChild=808 # 定义主机变量

host4 ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50 # 定义主机ssh连接端口和连接地址

www[1:50].example.com # 定义 1-50范围内的主机

www-[a:f].example.com # 定义a-f范围内内的主机

 

[dbservers]

three.example.com     ansible_python_interpreter=/usr/local/bin/python #定义python执行文件

192.168.77.123     ruby_module_host  ansible_ruby_interpreter=/usr/bin/ruby.1.9.3 # 定义ruby执行文件

 

[webservers:vars]  # 定义webservers组的变量

ntp_server= ntp.example.com

proxy=proxy.example.com

 

 

[server:children] # 定义server组的子成员

webservers

dbservers

 

[server:vars] # 定义server组的变量

zabbix_server:192.168.77.121

3. ansible 命令

ansible all -m ping

ansible 192.168.77.* -m ping

ansible all -m command -a ifconfig

ansible all -m shell -a "ifconfig eth0 |grep 'inet addr' "

ansible -i "192.168.77.129,192.168.77.130" 192.168.77.129  -m ping

ansible -i hosts  all --list-host

ansible -i hosts -l 192.168.77.130 all -m ping -t /tmp -vvvv

ansible web -l @retry_hosts.txt --list-hosts

Patterns 是定义Ansible要管理的主机。

命令行

ansible [options]

匹配所有的主机,两个Patterns 均表示匹配所有的主机

all

*

精确匹配

192.168.77.121

以上Patterns 表示只匹配192.168.77.121这一个主机

或匹配

web:db

以上Patterns 表示匹配的主机在web组或db组中

非模式匹配

"web:\!db"

命令下需转义特殊符号,以上Patterns 表示匹配的主机在web组,不在db组中,包含在web组,又在db中的用户

交集匹配

"web:&db"

以上Patterns 表示匹配的主机同时在db组和dbservers组中

通配符匹配

web-*.com:dbserver

webserver[0]

webserver[0:25]

*表示所有字符,[0]表示组第一个成员,[0:25] 表示组第1个到第24个成员,类似python中得切片

3.1 执行shell

获取web组里得eth0接口信息

ansible web -a "ifconfig eth0"

执行ifconfig eth0 命令,ansible模块 默认是command,它不会通过shell进行处理,所以像$ HOME和像“<”,“>”,“|”,“;” 和“&”将不工作(如果您需要这些功能,请使用shell模块)。

以shell解释器执行脚本

ansible web -m shell -a "ifconfig eth0|grep addr" 

以raw模块执行脚本

ansible web -m raw -a "ifconfig eth0|grep addr" 

将本地脚本传送到远程节点上运行

ansible web -m script -a ip.sh 

3.2 传输文件

拷贝本地的/etc/hosts 文件到web组所有主机的/tmp/hosts(空目录除外)

ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"

拷贝本地的ntp文件到目的地址,设置其用户及权限,如果目标地址存在相同的文件,则备份源文件。

ansible web -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes force=yes"

file 模块允许更改文件的用户及权限

ansible web -m file -a "dest=/tmp/a.txt mode=600 owner=user group=user"

使用file 模块创建目录,类似mkdir -p

ansible web -m file -a "dest=/tmp/test mode=755 owner=user group=user state=directory"

使用file 模块删除文件或者目录

ansible web -m file -a "dest=/tmp/test state=absent"

创建软连接,并设置所属用户和用户组

ansible web -m file -a  "src=/file/to/link/to dest=/path/to/symlink owner=user group=user state=link"

touch 一个文件并添加用户读写权限,用户组去除写执行权限,其他组减去读写执行权限

ansible web -m file -a  "path=/etc/foo.conf state=touch mode='u+rw,g-wx,o-rwx'"

3.2 管理软件包

apt、yum 模块分别用于管理Ubuntu 系列和RedHat 系列系统软件包

更新仓库缓存,并安装"foo"

ansible web -m apt -a "name=foo update_cache=yes"

删除 "foo"

ansible web -m apt -a "name=foo state=absent"

安装 "foo"

ansible web -m apt -a "name=foo state=present"

安装 1.0版本的 "foo"

ansible web -m apt -a "name=foo=1.00 state=present"

安装最新得"foo"

ansible web -m apt -a "name=foo state=latest"

注释:Ansible 支持很多操作系统的软件包管理,使用时-m 指定相应的软件包管理工具模块,如果没有这样的模块,可以自己定义类似的模块或者使用command 模块来安装软件包

安装 最新的 Apache

ansible web -m yum -a  "name=httpd state=latest"

删除apache

ansible web -m yum -a  "name=httpd state=absent"

从testing 仓库中安装最后一个版本得apache

ansible web -m yum -a  "name=httpd enablerepo=testing state=present"

更新所有的包

ansible web -m yum -a  "name=* state=latest"

安装远程的rpm包

ansible web -m yum -a  "name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present"

安装 'Development tools' 包组

ansible web -m yum -a  "name='@Development tools' state=present"

3.3 用户和用户组

添加用户 'user'并设置其 uid 和主要的组'admin'

ansible web -m user -a "name=user  comment='I am user ' uid=1040 group=admin"

添加用户 'user'并设置其登陆shell,并将其假如admins和developers组

ansible web -m user -a "name=user shell=/bin/bash groups=admins,developers append=yes"

删除用户 'user'

ansible web -m user -a "name=user state=absent remove=yes"

创建 user用户得 2048-bit SSH key,并存放在 ~user/.ssh/id_rsa

ansible web -m user -a "name=user generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"

设置用户过期日期

ansible web -m user -a "name=user shell=/bin/zsh groups=nobdy expires=1422403387"

创建test组,并设置git为1000

ansible web -m group -a "name=test gid=1000 state=present"

删除test组

ansible web -m group -a "name=test state=absent"

3.4 源码部署

Ansible 模块能够通知变更,当代码更新时,可以告诉Ansible 做一些特定的任务,比如从git 部署代码然后重启apache 服务等

ansible web-m git -a "repo=https://github.com/Icinga/icinga2.git dest=/tmp/myapp   version=HEAD"

3.5 服务管理

确保web组所有主机的httpd 是启动的

ansible web-m service -a "name=httpd state=started"

重启web组所有主机的httpd 服务

ansible web-m service -a "name=httpd state=restarted"

确保web组所有主机的httpd 是关闭的

ansible web-m service -a "name=httpd state=stopped"

3.6 后台运行

长时间运行的操作可以放到后台执行,ansible 会检查任务的状态;在主机上执行的同一个任务会分配同一个job ID

 

后台执行命令3600s,-B 表示后台执行的时间

ansible all -B 3600 -a "/usr/bin/long_running_operation --do-stuff"

3.7 检查任务的状态

ansible all -m async_status -a "jid=123456789"

后台执行命令最大时间是1800s 即30 分钟,-P 每60s 检查下状态默认15s

ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"

3.8 定时任务

每天5点,2点得时候执行 ls -alh > /dev/null

ansible test -m cron -a "name='check dirs' minute='0' hour='5,2' job='ls -alh > /dev/null'"

3.9 搜集系统信息

搜集主机的所有系统信息

ansible all -m setup

搜集系统信息并以主机名为文件名分别保存在/tmp/facts 目录

ansible all -m setup --tree /tmp/facts

搜集和内存相关的信息

ansible all -m setup -a 'filter=ansible_*_mb'

搜集网卡信息

ansible all -m setup -a 'filter=ansible_eth[0-2]'

你可能感兴趣的:(系统运维)