ansible安装和常用命令

安裝

brew安装

1
2
3
4
5
# 安装
brew install ansible

# 建立默认hosts文件
sudo mkdir /etc/ansible && sudo touch /etc/ansible/hosts

yum安装

1
2
3
4
5
# 添加EPEL源
yum -y install epel-release

# 安装
yum install ansible -y

配置

1
vi /etc/ansible/ansible.cfg
1
2
3
host_key_checking=False
log_path=/var/log/ansible.log
module_name=command
1
2
3
4
5
# 配置的主机需要配置免密登录
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@{ip}

vi /etc/ansible/hosts
1
2
3
4
5
6
7
# 单个主机
192.168.5.10

# 主机组
[openshift]
192.168.5.11
192.168.5.12

ansible命令

ansible命令又被称为ad-hoc命令,他主要是用来快速在多个远程机器Hosts上执行单个任务(task)

列出所有主机

ansible all --list-hosts

ping

默认用户是当前机器的用户
ansible all -m ping

指定用户
ansible all -m ping -u root

执行shell指令

下面是执行了ls命令

ansible all -m shell -a ls

复制文件到主机

ansible -i /etc/ansible/hosts test -m copy -a "src=/tmp/ansible.tar.gz dest=/home/root/ owner=root group=root mode=0777"

解压文件

ansible -i test -m unarchive -a 'src=/etc/bin/ansible.tar.gz dest=/usr/local copy=no mode=0755'

ansible -i /etc/ansible/hosts test -m shell "tar -zxvf /etc/bin/ansible.tar.gz -C /usr/local"

批量杀掉进程

ansible test -m shell -a "ps -ef | grep zabbix |grep -v grep |awk '{print \$2}' | xargs kill -9"

设置cron

ansible all -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 172.16.254.139"'

建立组

ansible all -m group -a 'gid=2017 name=a'

建立用户

ansible all -m user -a 'name=aaa groups=aaa state=present'

删除用户

ansible all -m user -a 'name=aaa groups=aaa remove=yes'

在节点上安装httpd

ansible all -m yum -a "state=present name=httpd"

在节点上启动服务,并开机自启动

ansible all -m service -a 'name=httpd state=started enabled=yes'

执行远程命令

ansible all -m command -a 'uptime'

执行主控端脚本

ansible all -m script -a '/root/test.sh'

执行远程主机的脚本

ansible all -m shell -a 'ps aux|grep zabbix'

类似shell

ansible all -m raw -a "ps aux|grep zabbix|awk '{print $2}'"

创建软链接

ansible all -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

删除软链接

ansible all -m file -a "path=/tmp/resolv.conf state=absent"

复制文件到远程服务器

ansible all -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

在节点上运行hostname

ansible all -m raw -a 'hostname|tee'

将指定url上的文件下载到/tmp下

ansible all -m get_url -a 'url=http://10.1.1.116/favicon.ico dest=/tmp'

帮助

ansible --help

ansible-playbook命令

ansible-playbook主要用来执行ansible的playbook。他可以用来在多个远程机器Hosts上执行一个或多个任务(task),这个命令执行时可以指定一个或多个playbook的名字。

ansible-playbook playbook.yml [options]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-u REMOTE_USER, --user=REMOTE_USER # ssh 连接的用户名 
-k, --ask-pass #ssh登录认证密码
-s, --sudo #sudo 到root用户,相当于Linux系统下的sudo命令
-U SUDO_USER, --sudo-user=SUDO_USER #sudo 到对应的用户
-K, --ask-sudo-pass #用户的密码(—sudo时使用)
-T TIMEOUT, --timeout=TIMEOUT # ssh 连接超时,默认 10 秒
-C, --check # 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-e EXTRA_VARS, --extra-vars=EXTRA_VARS # 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-f FORKS, --forks=FORKS # 进程并发处理,默认 5
-i INVENTORY, --inventory-file=INVENTORY # 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET # 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
--list-hosts # 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-tasks # 列出该 playbook 中会被执行的 task
--private-key=PRIVATE_KEY_FILE # 私钥路径
--step # 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--syntax-check # 只检测 playbook 文件语法是否有问题,不会执行该 playbook
-t TAGS, --tags=TAGS #当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
--skip-tags=SKIP_TAGS # 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
-v, --verbose #输出更详细的执行过程信息,-vvv可得到所有执行过程信息。

ansible-config

这个命令主要用来初始化或者查看当前机器ansible的配置信息

ansible-config [-h] [-version] [-v] {list,dump,view,init}

ansible-inventory

该命令主要用于显示或者导出ansible配置好的Inventory

ansible-inventory {--list/--host/--graph}

ansible-doc

该命令主要用于通过获取当前安装的plugin的一些api

ansible-doc [plugin [plugin ...]]