Ansible的安装和命令的介绍
ansible管理机可以装在任何的操作系统上,除了windows。下面介绍在centos7上安装ansible。
最简单的安装方式,yum安装:
yum install ansible
配置
ansbile默认的配置文件路径为 /etc/ansible
ansible.cfg 配置文件,这个配置文件默认就好了。如果有需求可以根据自己的需求去修改
#inventory = /etc/ansible/hosts #默认存放可通讯主机的目录文件
#library = /usr/share/my_modules/ #默认搜寻模块位置
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp #远端的临时目录
#local_tmp = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 #在与主机通信时的默认并行进程数,默认并发是5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22 #远程SSH端口,默认是22
#module_lang = C #模块和系统之间通信的计算机语言,默认是C语言
#module_set_locale = False
备注:其他参数设置 可以参考ansible的中文文档。中文文档地址
hosts 主机清单文件
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts
[zabbix_agentd_servers]
172.30.47.203 # op01
172.30.47.201 # op02
172.30.47.202 # proxy01
172.30.47.101 # asrtest01
[lvs_servers]
172.30.47.141
172.30.47.142
[test]
172.17.30.102
[test:vars]
ansible_ssh_port=9022
中括号[] 里面是主机名,用于对系统进行分类。为了方便不通的系统管理,可以设定多个分组,用中括号区分即可。如果端口非默认端口,要单独增加一个变量,例如上面的test组。
主机除了是ip地址,也可以写成是别名或者是主机名的方式。
[test]
test.sunqfrs.com:9022
不过,你需要在hosts里面做好主机 与 别名的对应关系。
如果端口不是默认的端口直接在后面加上端口号,用冒号分割即可。
公钥认证
如果你的管理机和被管理机之间没有做公钥认证的话,每次执行ansibie命令 都要输入被管理机器的ssh登录密码
下面在管理机上生成一个公钥,然后分发的其他的机器上去:
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #选择保存的位置。 回车默认
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): #直接按回车,
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. #私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. #公钥 地址
The key fingerprint is:
ad:cb:d7:c0:e6:1c:fe:5c:d4:d4:34:f1:a1:91:36:20 root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| E ....+o|
| . +o.=|
| ... +|
| . o |
| S.. . .|
| .= . |
| .= + . |
| . .=... |
| o. .o |
+-----------------+
3.然后 执行
[root@localhost ~]# ssh-copy-id .ssh/id_rsa.pub root@192.168.137.102 #拷贝公钥到另外一台电脑去
#如果端口非22采用以下方式
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub '-p 9822 root@192.168.137.102 '
#主机登录其他两台就不需要密码登录了。
[root@localhost ~]# ssh root@192.168.137.102 #测试直接登录
ansible 命令
安装完之后,发现ansible一共为我们提供了7个命令: ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault
我们日常用的最多的两个命令是:ansible 和 ansible-playbook
ansible
格式: ansible <host-pattern> [options]
可用选项:
-v, --verbose 输出更详细的执行过程
-i 指定inventory 信息,默认是用/etc/ansible/hosts
-l 选择指定的组
-f FORKS, --forks=FORKS 并发线程数,默认是5个线程
--private-key=PRIVATE_KEY_FILE: 指定密钥文件。
-m NAME, --module-name=NAME: 指定执行使用的模块。
还有其他很多参数,详情请看 ansible --help
执行:
[root@localhost ~]# ansible all -m shell -a "w"
192.168.137.102 | SUCCESS | rc=0 >>
14:51:11 up 37 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.137.1 14:22 27:59 0.01s 0.01s -bash
root pts/1 192.168.137.101 14:51 0.00s 0.14s 0.05s w
ansible-doc
ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下
ansible-doc -l #获取全部模块信息
ansible-doc -s 模块名字 #获取指定模块的使用帮助。
例子:
ansible-doc -s shell #获取shell 模块的帮助信息
ansible-lint
ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml 。
ansible-playbook
该指令是使用最多的指令,其通过读取playbook 文件后,执行相应的动作,这个后面会做为一个重点来讲。
备注:其他命令我用得比较少,如果需要用到的话,可以使用--help 查询。