美文网首页
轻松使用Ansible

轻松使用Ansible

作者: louyang | 来源:发表于2019-02-02 15:59 被阅读3次

    Ansible是一种自动化工具,通过SSH管理远端的服务器。
    Ansible也是一种编程语言,可以通过这种语言来描述我们要做的事情。

    1 安装

    我在Fedora 29上,使用下面命令安装了ansible。

    dnf install ansible
    

    检测ansible是否安装好了

    ansible --version
    

    建立一个独立的ansible工作平台

    cp -R /etc/ansible/ myplatform
    
    2 编辑hosts

    假设有两台远端服务器需要管理,先用ssh-copy-id把公钥拷过去,参见https://www.jianshu.com/p/f5064defb140。目的是SSH可以免密码登陆。

    进入myplatform目录,编辑该目录下的hosts文件:

    10.107.184.20 ansible_user=cranuser8
    10.109.3.244 ansible_user=cbam
    

    运行ansible ping

    [myplatform]$ ansible -m ping all
    10.107.184.20 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    10.109.3.244 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    
    3 查看hostname和用户名
    [myplatform]$ ansible -m shell -a 'hostname' all
    10.107.184.20 | CHANGED | rc=0 >>
    controller-2
    
    10.109.3.244 | CHANGED | rc=0 >>
    elam-cbam-18-0-02-single.cbaminternal
    
    myplatform]$ ansible -m shell -a 'whoami' all
    10.107.184.20 | CHANGED | rc=0 >>
    cranuser8
    
    10.109.3.244 | CHANGED | rc=0 >>
    cbam
    
    4 在远端运行脚本

    我们编写一个简单的python脚本:

    #!/usr/bin/python
    import platform
    print('hello ' + platform.node())
    

    在本地运行,是这样的效果:

    $ ./a.py
    hello localhost.localdomain
    

    通过ansible,可以使这个脚本在所有远端服务器上运行:

    $ ansible -m script -a a.py all
    10.109.3.244 | CHANGED => {
        "changed": true,
        "rc": 0,
        "stderr": "Shared connection to 10.109.3.244 closed.\r\n",
        "stderr_lines": [
            "Shared connection to 10.109.3.244 closed."
        ],
        "stdout": "hello elam-cbam-18-0-02-single.cbaminternal\r\n",
        "stdout_lines": [
            "hello elam-cbam-18-0-02-single.cbaminternal"
        ]
    }
    10.107.184.20 | CHANGED => {
        "changed": true,
        "rc": 0,
        "stderr": "Shared connection to 10.107.184.20 closed.\r\n",
        "stderr_lines": [
            "Shared connection to 10.107.184.20 closed."
        ],
        "stdout": "hello controller-2\r\n",
        "stdout_lines": [
            "hello controller-2"
        ]
    }
    
    5 编写playbook

    编写playbook,就像是写一个剧本,方法如下:

    在myplatform下创建一个playbook.yml:

    - name: Play 1
      hosts: all
      tasks:
        - name: Execute command 'hostname'
          command: hostname
        - name: Execute command 'whoami'
          command: whoami
        - name: Run a script
          script: ./a.py
    

    运行剧本:

    [myplatform]$ ansible-playbook playbook.yml
    
    PLAY [Play 1] ************************************************************************
    
    TASK [Gathering Facts] ***************************************************************
    ok: [10.109.3.244]
    ok: [10.107.184.20]
    
    TASK [Execute command 'hostname'] ****************************************************
    changed: [10.109.3.244]
    changed: [10.107.184.20]
    
    TASK [Execute command 'whoami'] ******************************************************
    changed: [10.107.184.20]
    changed: [10.109.3.244]
    
    TASK [Run a script] ******************************************************************
    changed: [10.107.184.20]
    changed: [10.109.3.244]
    
    PLAY RECAP ***************************************************************************
    10.107.184.20              : ok=4    changed=3    unreachable=0    failed=0
    10.109.3.244               : ok=4    changed=3    unreachable=0    failed=0
    

    如果想看到命令的输出,可以加-v参数。

    参考

    https://www.youtube.com/watch?v=icR-df2Olm8
    https://www.youtube.com/watch?v=pRZA9ymZXn0
    https://www.youtube.com/watch?v=Z01b9QZG0D0&list=PL2We04F3Y_42_PN52bT_U5o_lt6uPQqqq&index=4

    相关文章

      网友评论

          本文标题:轻松使用Ansible

          本文链接:https://www.haomeiwen.com/subject/onidsqtx.html