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
原文地址:https://www.cnblogs.com/silvermagic/p/7666261.html