ansible使用指北(一)

2016-12-13 17:01:14
ansible的快速安装
1
2
3
sudo esay_install ansible
# OR
sudo pip install ansible

先来解决两个小问题:
1)将本地文件复制到远程服务器
2)需要在远程服务器上执行一个命令或脚本

现在我们以192.168.100.119为例(已经安装ansible),首先登陆到119主机
在我们的家目录下建立.ansible.cfg文件(为了安全考虑,还是的麻烦大家输入密码,或者用key),文件内容如果

1
2
3
4
5
6
7
8
9
10
cat /home/t1ger/.ansible.cfg
[defaults]
hostfile=hosts
remote_user=t1ger
ask_pass = True
#ask_sudo_pass = True
sudo_user = root
remote_tmp = $HOME/.ansible/tmp
host_key_checking = False
system_warnings = False

接下来我们建立hosts文件,此文件就是记录我们要操作的主机列表

1
2
3
4
5
6
7
cat /home/t1ger/hosts
[dev]
192.168.100.101
192.168.100.103
[test]
192.168.100.110
192.168.100.111

到此为止,我们的准备工作已经完成

完成任务1
ansible dev -m copy -a “src=/tmp/test.txt dest=/tmp”
完成任务2
ansible test -m command -a ” ls /root”

如果需要root权限,那当然需要sudo了
ansible test -m command -a “sudo ls /root”
或者添加 -s
ansible test -m command -s -a “ls /root”

如果我执行的命令特别多呢,可以写成一个脚本,通过copy模块拷贝到远端机器,然后再执行
然而,这样需要两次ansible调用,我们可以使用script模块来解决这个问题

我们在本地写一个脚本,在远程服务器上执行:
ansible dev -m script -a “/tmp/target.sh”

ansible的七种武器
  • ansible:用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块
  • ansible-doc:用于查看模块信息,常用参数有两个-l 和 -s
  • ansible-galaxy:用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块
  • ansible-lint:对playbook的语法进行检查的一个工具,用法是ansible-lint playbook.yml
  • ansible-playbook:读取playbook 文件后,执行相应的动作
  • ansible-pull:ansible的pull模式,适用于超多机器
  • ansible-vault:应用于配置文件中含有敏感信息,vault可以帮你加密/解密这个配置文件
ansible常用模块
  • ping模块

    1
    2
    3
    4
    5
    [root@localhost ~]# ansible 172.16.56.101 -m ping
    172.16.56.101 | success >> {
    "changed": false,
    "ping": "pong"
    }
  • setup模块:用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关,经常使用的一个参数是filter参数

    1
    2
    3
    4
    //memory info
    ansible 172.16.56.101 -m setup -a 'filter=ansible_*_mb'
    //network info
    [root@localhost ~]# ansible 172.16.56.101 -m setup -a 'filter=ansible_eth0'
  • file模块:用于远程主机上的文件操作,选项信息通过ansible-doc file 查看

    1
    2
    ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
    ansible test -m file -a "path=/tmp/fstab state=absent"
  • copy模块:复制文件到远程主机

    1
    ansible test -m copy -a "src=/tmp/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
  • service模块:用于管理服务

    1
    - service: name=network state=restarted args=eth0
  • cron模块:用于管理计划任务

    1
    ansible test -m cron -a 'name="a job" special_time=reboot job="/tmp/job.sh"'
  • yum模块:使用yum包管理器来管理软件包

    1
    ansible test -m yum -a 'name=httpd state=latest'
  • user模块和group模块:请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    - user: name=james18 shell=/bin/zsh groups=developers expires=1422403387
    - user: name=johnd state=absent remove=yes
    #generate password (ansible官方给出的示例)
    python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"
    #OR
    openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32)
    # add user
    ansible all -m user -a 'name=foo password="$1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0"'
    - group: name=somegroup state=present
  • synchronize模块:使用rsync同步文件

    1
    src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
  • mount模块:配置挂载点

    1
    2
    name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
    ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
  • get_url模块:于从http、ftp、https服务器上下载文件

    1
    2
    3
    4
    - name: download foo.conf
    get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440
    - name: download file with sha256 check
    get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf sha256sum=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c

    如果用到其它模块,请参照官网模块文档


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。