Ansible
1 2 3 4 5 6 | ansible-playbook获取当前节点ip: tasks: - debug: var =ansible_eth0.ipv4.address ansible获取当前节点ip: ansible -i ihosts.yaml -m debug -a "var=hostvars[inventory_hostname].ansible_host" all |
学习网址:http://www.ansible.com.cn/index.html
ansible-doc -l
ansible-doc copy
获取facts信息:ansible 10.1.1.3 -m setup
编辑文件的利器:lineinfile
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts
Ansible 1.2 及以上的版本中,group_vars/ 和 host_vars/ 目录可放在 inventory 目录下,或是 playbook 目录下. 如果两个目录下都存在,那么 playbook 目录下的配置会覆盖 inventory 目录的配置.
Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook(即使用 ‘/usr/bin/ansible-playbook’ 这个命令).前者可以解决一些简单的任务, 后者解决较复杂的任务.
利用ansible执行一些简单任务的示例:http://www.ansible.com.cn/docs/intro_adhoc.html
ansible有许多模块,默认是 ‘command’,也就是命令模块,我们可以通过 -m 选项来指定不同的模块
command 模块不支持 shell 变量,也不支持管道等 shell 相关的东西.如果你想使用 shell相关的这些东西, 请使用’shell’ 模块.
cat /etc/ansible/hosts [myk8s] 172.20.5.49 172.20.5.47
ping: ansible myk8s -m ping
拷贝:ansible myk8s -m copy -a "src=/home/she dest=/tmp/"
查看:ansible myk8s -a "ls /tmp/"
删除: ansible myk8s -m file -a "dest=/tmp/she state=absent"
确认服务已启动:ansible myk8s -m service -a "name=docker state=started"
使用 shell 模块的示例如下:
$ ansible raleigh -m shell -a 'echo $TERM'
使用 Ansible ad hoc 命令行接口时(与使用 Playbooks 的情况相反),尤其注意 shell 引号的规则. 比如在上面的例子中,如果使用双引号”echo $TERM”,会求出TERM变量在当前系统的值,而我们实际希望的是把这个命令传递 到其它机器执行
ansible中的一些常用配置:http://www.ansible.com.cn/docs/intro_configuration.html
ansible中的核心模块(如command 、shell、find、copy等):https://github.com/ansible/ansible-modules-core
额外模块详见:https://github.com/ansible/ansible-modules-extras
关于playbook 的例子:https://github.com/ansible/ansible-examples
YAML语法:http://www.ansible.com.cn/docs/YAMLSyntax.html
每一个play包含了一个task列表(任务列表).一个task在其所对应的所有主机上执行完毕之后,下一个 task才会执行
每一个play包含了一个task列表(任务列表).一个task在其所对应的所有主机上执行完毕之后,下一个 task才会执行
在运行 playbook 时(从上到下执行),如果一个 host 执行 task 失败,这个 host 将会从整个 playbook 的 rotation 中移除.
modules 具有”幂等”性,意思是如果你再一次地执行 moudle(译者注:比如遇到远端系统被意外改动,需要恢复原状),moudle 只会执行必要的改动,只会改变需要改变的地方.所以重复多次执行 playbook 也很安全.
大多数moudle 使用 key=value 格式的参数,比较特别的两个 modudle 是 command 和 shell ,它们不使用 key=value 格式的参数,而是这样:
tasks:
- name: disable selinux
command: /sbin/setenforce 0
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true
如果 action 行看起来太长,你可以使用 space(空格) 或者 indent(缩进) 隔开连续的一行
tasks:
- name: Copy ansible inventory file to client
copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
owner=root group=root mode=0644
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)