Ansible基础使用

准备工作

ssh免密登录

  1. 生成本地公私钥
  2. 上传私钥至被控服务器
  3. 验证登录
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub remote_username@server_ip_address
ssh remote_username@server_ip_address

添加被控服务器信息

echo "first.example.org" >> /etc/ansible/hosts

Ad-Hoc Commands

Ad-Hoc Commands 可以翻译为简短地指令。

$ ansible all -m ping
server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
$ ansible all -m command -a "echo Hello World"
server1 | SUCCESS | rc=0 >>
Hello World

常用模块

  • ping
  • setup
  • command
  • shell
  • cron
  • user、group
  • cpoy
  • file
  • yum、apt
  • service
  • script

Playbooks

Playbooks 是 Ansible 的脚本 。

$ vi hello_world.yml
---
- name: say 'hello world'
  hosts: all
  tasks:

    - name: echo 'hello world'
      command: echo 'hello world'
      register: result

    - name: print stdout
      debug:
        msg: ""
$ ansible-playbook hello_world.yml

PLAY [say 'hello world'] *******************************************************

TASK [setup] *******************************************************************
ok: [server1]

TASK [echo 'hello world'] ******************************************************
changed: [server1]

TASK [print stdout] ************************************************************
ok: [server1] => {
    "msg": "hello world"
}

PLAY RECAP *********************************************************************
server1                    : ok=3    changed=1    unreachable=0    failed=0

Roles

Roles 可以降低 Playbooks 的复杂性,更可以增加 Playbooks 的可用性。

$ tree .
.
└── example_role
    ├── README.md     # 说明文件
    ├── defaults
    │   └── main.yml  # 可被覆写的变数。
    ├── files         # 需复制到 Managed node 的档案。
    ├── handlers
    │   └── main.yml  # 主要的 handler。
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml  # 主要的 task。
    ├── templates     # 集中存放 Jinja2 模板的目录。
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml  # 不该被覆写的变数。

9 directories, 8 files

常用配置

Inventory文件

Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts

ansible.cfg

Ansible主要功能配置文件,默认的文件路径为/etc/ansible/ansible.cfg

  • inventory
    这个是默认库文件位置,脚本,或者存放可通信主机的目录:

inventory = /etc/ansible/hosts

  • library
    这个是Ansible默认搜寻模块的位置:

library = /usr/share/ansible

  • remote_tmp
    Ansible 通过远程传输模块到远程主机,然后远程执行,执行后在清理现场.在有些场景下,你也许想使用默认路径希望像更换补丁一样使用, 这时候你可以使用这个选项.:

remote_tmp = $HOME/.ansible/tmp
默认路径是在用户家目录下属的目录.Ansible 会在这个目录中使用一个随机的文件夹名称.

  • forks
    这个选项设置在与主机通信时的默认并行进程数.如果你有很多的主机, 高数值将会使得跨主机行为变快.默认值比较保守:

forks=5

  • poll_interval
    对于Ansible中的异步任务, 这个是设置定义,当具体的poll interval 没有定义时,多少时间回查一下这些任务的状态, 默认值是一个折中选择15秒钟.这个时间是个回查频率和任务完成叫回频率和当任务完成时的回转频率的这种:

poll_interval=15

  • sudo_user
    这个是sudo使用的默认用户,如果–sudo-user 没有特指或者’sudo_user’ 在Ansible playbooks中没有特指,在大多数的逻辑中 默认为: ‘root’

sudo_user=root

  • ask_sudo_pass
    类似 ask_pass,用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no:

ask_sudo_pass=True
如果用户使用的系统平台开启了sudo 密码的话,应该开绿这一参数

  • ask_pass
    这个可以控制,Ansible 剧本playbook 是否会自动默认弹出弹出密码.默认为no::

ask_pass=True
如果使用SSH 密钥匙做身份认证.可能需要修改这一参数

  • remote_port
    这个设置是你系统默认的远程SSH端口,如果不指定,默认为22号端口:

remote_port = 22

  • roles_path
    roles 路径指的是’roles/’下的额外目录,用于playbook搜索Ansible roles.比如, 如果我们有个用于common roles源代码控制仓库和一个不同的 playbooks仓库,你也许会建立一个惯例去在 /opt/mysite/roles 里面查找roles.:

roles_path = /opt/mysite/roles
Roles将会在playbook目录中开始搜索.如果role没有找到,这个参数指定了其它可能的搜索路径.

  • timeout
    这个是默认SSH连接尝试超时时间:

timeout = 10

  • remote_user
    这是个ansible使用/usr/bin/ansible-playbook链接的默认用户名. 注意如果不指定,/usr/bin/ansible默认使用当前用户名称:

remote_user = root

  • log_path
    如果出现在ansible.cfg文件中.Ansible 将会在选定的位置登陆执行信息.请留意用户运行的Ansible对于logfile有权限:

log_path=/var/log/ansible.log
这个特性不是默认开启的.如果不设置,ansible将会吧模块加载纪录在系统日志系统中.不包含用密码.

  • module_name
    这个是/usr/bin/ansible的默认模块名(-m). 默认是’command’模块. 之前提到过,command模块不支持shell变量,管道,配额. 所以也许你希望把这个参数改为’shell’:

module_name = command

  • executable
    这个选项可以在sudo环境下产生一个shell交互接口. 用户只在/bin/bash的或者sudo限制的一些场景中需要修改.大部分情况下不需要修改:

executable = /bin/bash

  • private_key_file
    如果你是用pem密钥文件而不是SSH 客户端或秘密啊认证的话,你可以设置这里的默认值,来避免每一次提醒设置密钥文件位置–ansible-private-keyfile:

private_key_file=/path/to/file.pem

  • display_skipped_hosts
    如果设置为False,ansible 将不会显示任何跳过任务的状态.默认选项是现实跳过任务的状态::

display_skipped_hosts=True

  • system_warnings
    允许禁用系统运行ansible相关的潜在问题警告(不包括操作主机):

system_warnings = True
*这个包括第三方库或者一些需要解决问题的警告.