Ansible 模式

1、Ansible 命令python

一、Ansible 命令执行的方式有两种:Ad-Hoc、Ansible-playbooks,这两种方式没有本质的区别,Ad-Hoc用于临时执行命令;Ansible-playbooks能够理解为Ad-Hoc的集合,经过必定的规则编排在一块儿,也就是剧本。nginx

二、Ansible通信机制是ssh,有秘密和秘钥验证,通常来讲都是配置秘钥验证。秘钥配置使用ssh-keygen。git

三、使用命令格式:github

  ansible  <host-pattent> [options]网络

解释:并发

ansible     Ansible命令运维

<host-pattern>是Inventory中定义的主机名、IP、group组名、具备 "." 或  "*" 或 ":"等特殊字符的匹配型字符串。<>表示该选项是必须。ssh

[options]是Ansible的参数选项,可选参数。模块化

经常使用选项以下:高并发

-m  NAME,--module-name=NAME:指定执行使用的模块(ansible的功能都是基于模块化的)。

-u USERNAME,--user=USERNAME:指定远程主机以USERNAME执行。

 

-s,--sudo:远程执行命令时使用sudo方式,至关于Linux系统下的sudo命令。

-U  SUDO_USERNAME,--sudo-user=SUDO_USERNAME:sudo 用户

注意:上述的-s和-U选项在新版中已经失效。新版本选项以下两项:

-s,--sudo 被改为 -b,--become

-U,--sudo-user被改为  --become-user

 

-K, --ask-become-pass:使用--become或者--become-user时使用的密码认证。

-f FORKS, --forks=FORKS:并行线程数量。

-k, --ask-pass:链接到远程主机的密码,当没有使用免密认证时使用

 

eg:

一、---测试 -m -u选项;-m指定 ping模块,以yjt用户执行ping存活检测。若是不指定用户,在远程机器上默认是以root用户执行。
[root@manager1 ~ 15:53:53]#ansible 192.168.4.46 -m ping -u yjt ---注意,ip须要在/etc/ansible/hosts提早里面配置,若是想在多个主机测试,这里能够改为all,固然,前提是须要在hosts文件配置好。 192.168.4.46 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
提示SUCCESS就表示成功了。

二、测试 -b;以yjt用户sudo到root执行ping存活检测。这种方式须要在远程主机的/etc/sudoers文件中配置yjt用户,若是没有配置NOPASSWD,则须要加上-K选项。
远程主机/etc/sudoers文件添加以下:
yjt  ALL=(root)NOPASSWD:   ALL

[root@manager1 ~ 16:26:00]#ansible 192.168.4.46 -m ping -u yjt -b
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

把上诉的yjt  ALL=(root)NOPASSWD:   ALL换成yjt  ALL=(root)   ALL,再次执行

[root@manager1 ~ 16:37:19]#ansible 192.168.4.46 -m ping -u yjt -b
192.168.4.46 | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"module_stderr": "Shared connection to 192.168.4.46 closed.\r\n",
"module_stdout": "sudo: a password is required\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}

发现报错了,这个时候因为远程机器的yjt用户不能免密登陆到root用户,因此,执行方式改为以下,加-K(大写)选项

 
 

[root@manager1 ~ 16:30:34]#ansible 192.168.4.46 -m ping -u yjt -b -K
BECOME password:     ---输入yjt用户的密码。
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}



2、ansible-galaxy

用于从ansible  galaxy官网上传下载roles。

命令用法:

ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options]

init:用于初始化本地的roles,以备上传至galaxy。

info:指定roles的详细信息。

install:下载roles到本地。

list:列出本地已经存在的roles。

remove:删除本地已经存在的roles。

eg:下载nginx的roles,默认存放在/etc/ansible/roles

[root@manager1 kvm 17:19:05]#ansible-galaxy --ignore-errors install azavea.git
- downloading role 'git', owned by azavea
- downloading role from https://github.com/azavea/ansible-git/archive/0.1.0.tar.gz
- extracting azavea.git to /root/.ansible/roles/azavea.git    ---这里存放在了这个目录下。
- azavea.git (0.1.0) was installed successfully

3、ansible-pull 远端拉取命令或者剧本,效率无限提高,对运维要求较高 该指令的使用涉及Ansible的另外一种工做模式:pull模式(Ansible默认使用push模式)。这和一般使用的push模式工做机理恰好相反,其适用于如下场景: 一、你有数量巨大的机器须要配置,即便使用高并发线程依旧要花费不少时间;二、你要在刚启动的、没有网络链接的主机上运行Anisble Usage: ansible-pull -U <repository> [options] [<playbook.yml>] 例: */20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /srv/www/king-gw/ -i /etc/ansible/hosts -U git:// git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1 它是经过经过ansible-pull结合Git和crontab一并实现,其原理以下:经过crontab按期拉取指定的Git版本到本地,并以指定模式自动运行预先制订好的指令 注:ansible-pull一般在配置大批量机器的场景下会使用,灵活性稍有欠缺,但效率几乎能够无限提高,对运维人员的技术水平和前瞻性规划有较高要求

相关文章
相关标签/搜索