Ansible基本使用
你将学到什么
- 如何配置ansible运行环境
- 如何执行ansible命令
- 如何配置Inventory
环境
角色 | 操作系统 | 网络地址 |
---|---|---|
管理主机 | ubuntu 14.04 TLS | 192.168.200.250 |
托管节点 | ubuntu 16.04 TLS | 192.168.200.11 192.168.200.12 |
管理主机配置
- 安装ansible
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
- 设置托管节点
### 编辑配置文件添加托管节点网络地址
# vim /etc/ansible/hosts
...
[webservers]
192.168.200.11
[compute]
192.168.200.12
...
- 生成ssh公钥
# ssh-keygen -t rsa
# ssh-agent bash
# ssh-add ~/.ssh/id_rsa
托管节点配置
- 添加管理主机公钥
# ssh-keygen -t rsa
# scp root@192.168.200.250:~/.ssh/id_rsa.pub ./
# cat id_rsa.pub >> ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keys
- 安装python
# apt-get install python
测试ansible命令
# ansible all -m ping
192.168.200.11 | success >> {
"changed": false,
"ping": "pong"
}
192.168.200.12 | success >> {
"changed": false,
"ping": "pong"
}
# ansible compute -m ping
192.168.200.12 | success >> {
"changed": false,
"ping": "pong"
}
# ansible webservers -m ping
192.168.200.11 | success >> {
"changed": false,
"ping": "pong"
}
# ansible all -a "/bin/echo hello"
192.168.200.12 | success | rc=0 >>
hello
192.168.200.11 | success | rc=0 >>
hello
配置Inventory
静态方式
就是前面在文件/etc/ansible/hosts中指定的主机和组的方式
动态方式
通过外部脚本获取主机列表,并按照ansible所要求的格式返回给ansilbe命令的方式。需要注意的是,用于生成JSON代码的脚本必须支持两个选项:
--list
:返回一个JSON散列/字典,它包含所管理的所有组.每个组的value应该是一个关于其包含的主机/IP哈希/字典,它可能是一个子组或者组的变量或者仅仅是一个主机/IP的列表,例如:
{
"databases" : {
"hosts" : [ "host1.example.com", "host2.example.com" ],
"vars" : {
"a" : true
}
},
"webservers" : [ "host2.example.com", "host3.example.com" ],
"atlanta" : {
"hosts" : [ "host1.example.com", "host4.example.com", "host5.example.com" ],
"vars" : {
"b" : false
},
"children": [ "marietta", "5points" ]
},
"marietta" : [ "host6.example.com" ],
"5points" : [ "host7.example.com" ]
}
--host <hostname>
:返回一条空的JSON哈希/字典,或者关于变量的JSON哈希/字典,这些变量将被用来模板或者playbooks。返回变量是可选的,如果脚本不希望这样做,返回一条空的哈希/字典即可:
{
"favcolor" : "red",
"ntpserver" : "wolf.example.com",
"monitoring" : "pack.example.com"
}
编写样例脚本inventory-script:
[web]
192.168.200.100
调用方式如下:
### Ansible默认通过调用脚本的--list选项来获取主机列表
# ansible web -i inventory-script -m ping