zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Python3 调用 Ansible2.x API
    Django——form组件和ModelForm
    Python super().__init__()测试及理解
    ORACLE迁移记录
    CentOS7安装zabbix5.0
    ORACLE LINUX 7.7 安装ORACLE 11.2.0.4.0 RAC
    Spring
    【Git】clone项目&push项目没反应,Cloning into...没下载
    样式不显示,静态资源路径错误
    日常Java练习题
  • 原文地址:https://www.cnblogs.com/silvermagic/p/7666261.html
Copyright © 2011-2022 走看看