zoukankan      html  css  js  c++  java
  • Ansible安装配置及使用

    一、Ansible特点

    1、不需要安装客户端,通过sshd通信

    2、基于模块工作,模块可以由任何序言开发

    3、不仅支持命令行使用模块,也支持编写yaml格式的playbook

    4、支持sudo

    5、有提供UI(浏览器图形化)www.ansible.com/tower10台主机以内免费

    6、开源UI https://github.com/alaxli/ansible_ui文档

    http://download.csdn.net/detail/liyang23456/7741185

    二、Ansible安装

    两台机器10.10.10.201和10.10.10.156

    只需要在10.10.10.201上安装ansible即可

    # yum -y install epel-release

    # yum -y install ansible

    三、Ansible配置秘钥

    在10.10.10.201生成秘钥对

    # ssh-keygen -t rsa直接回车即可,不用设置秘钥密码

    把公钥(id_rsa.pub)内容放到10.10.10.156的/root/.ssh/authorized_keys里面

    # scp id_rsa.pub slave.fanisk.com:/root/.ssh/authorized_keys

    本机也要操作

    # chmod 600 /root/.ssh/authorized_keys

    关闭selinux

    三、Ansible远程执行命令

    # ansible fansik -m command -a 'hostname'

    fansik为主机组的名字,-m后边是模块的名字,-a后面是命令,也可以写一个ip,针对一台机器来执行命令

    还有一个模块shell也同样可以实现(可以执行脚本,支持管道符):

    # ansible fansik -m shell -a 'hostname'

    如果出现错误(copy文件的时候就会出现了):

    slave.fansik.com | FAILED! => {

        "changed": false,

        "checksum": "7267a346473f1d39c1e8c2c0b43d40a42c37eb28",

        "failed": true,

        "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

    需要安装libselinux-python包:

    # yum -y install libselinux-python

    编辑ansible的配置文件,添加主机组

    # vim /etc/ansible/hosts

    [fansik]

    127.0.0.1

    slave.fansik.com

    fansik为主机组名字,自定义,下面为组内的机器可以是ip也可以是主机名

    四、Ansible拷贝文件或目录

    # ansible slave.fansik.com -m copy -a "src=/tmp/wohenhao dest=/tmp/wobuhao owner=root group=root mode=0644"

    注意:源目录会放到目标目录下面去,如果目标制定的目录不存在,它会自动创建,如果copy的是文件,dest指定得名字和源如果不同,并且它不是已经存在的目录,相当于copy过去后有重命名,但相反,若果dest是目标机器上已经存在的目录,则会直接把文件copy到该目录下面

    # ansible fansik -m copy -a "src=/etc/passwd dest=/tmp/wobuhao"

    这里的/tmp/wobuhao和源机器上的/etc/passwd是一直的,如果目标机器上已经存在/tmp/wobuhao目录,则会在/tmp/wobuhao目录下面建立passwd文件

    五、Ansible远程执行脚本

    远程执行脚本需要将脚本分发到各个机器上去

    # ansible fansik -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"

    然后在批量执行脚本

    # ansible fansik -m shell -a "/tmp/test.sh"

    五、Ansible实现任务计划

    创建任务计划

    # ansible fansik -m cron -a "name='fanjinbao' job='/bin/touch /tmp/shishi.txt' minute=5 weekday=6"

    删除任务计划            

    # ansible fansik -m cron -a "name='fanjinbao' state=absent"

    其他的时间表示:分钟:minute,小时:hour,日期:day,月:month

    五、Ansible实现任务计划

    # ansible fansik -m yum -a "name=httpd"

    在name后面还可以加上state=installed

    # ansible fansik -m service -a "name=httpd state=started enabled=yes"

    这里的name是centos系统里面的服务名,可以通过chkconfig --list查到

    Ansible文档的使用

    # ansible-doc -l 列出所有的模块

    # ansible-doc service 查看指定模块的文档

    六、Ansible playbook的使用

    1、在/tmp/目录下创建playbook.txt文件

    # vim /etc/ansible/test.yml

    ---

    - hosts: fansik

      remote_user: root

      tasks:

        - name: test_playbook

          shell: touch /tmp/playbook.txt

    说明:host参数指定了对哪些主机进行操作;

    user参数指定了使用什么用户登录远程主机操作;

    tasks指定了一个任务,其下面的name参数同样是任务的描述,在执行过程中会打印出来

    执行:# ansible-playbook test.yml

    2、创建test用户

    ---

    - name: create_user

      hosts: slave.fansik.com

      user: root

      gather_facts: false

      vars:

      - user: "test"

      tasks:

      - name: create user

        user: name="{{ user }}"

    说明:name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印name变量的值,可以省略,gather facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;vars参数,指定了变量,这里指定一个user变量,其值为test,需要注意的是,变量值一定要用引号引住;user指定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。

    七、Ansible playbook中的循环

    改变slave.fansik.com的/tmp/目录下的1.txt、2.txt、3.txt的权限为600

    # vim loop.yml

    ---

    - hosts: slave.fansik.com

      user: root

      tasks:

        - name: change mode for files

          file: path=/tmp/{{ item }} mode=600 owner=root group=root

          with_items:

            - 1.txt

            - 2.txt

            - 3.txt

    八、Ansible playbook条件判断

    如果fansik主机组中有10.10.10.201这个机器就在该机器的/tmp/下面创建when.txt

    ---

    - hosts: fansik

      user: root

      gather_facts: True

      tasks:

        - name: use when

          shell: touch /tmp/when.txt

          when: facter_ipaddress == "10.10.10.201"

    九、Ansible playbook中的handers

    执行tasks之后,服务器发生变化之后执行的一些操作,比如我们修改了配置文件后,需要重启一下服务

    ---

    - hosts: fansik

      remote_user: root

      tasks:

        - name: test copy

          copy: src=/etc/passwd dest=/tmp/2.txt

          notify: test handlers

      handlers:

        - name: test handlers

          shell: echo "121212" >> /tmp/2.txt

    说明:只有copy模块真正执行后,才会去调用下面的handlers相关的操作。也就是说passwd和2.txt内容是一样,并不会去执行handlers里面的shell相关命令命令,这种比较适合配置文件发生改变后,重启服务等操作。

  • 相关阅读:
    12.Django与ajax
    11.Django的分页器paginator
    10.中间键Middleware
    09.用户认证auth模块
    08.form组件
    07.会话跟踪技术cookie与session
    06.orm模型层
    05.Django模板层
    04.Django视图函数
    03.DjangoURL路由
  • 原文地址:https://www.cnblogs.com/fansik/p/5512877.html
Copyright © 2011-2022 走看看