Ansible

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

posted on 2022-01-30 15:13  我和你并没有不同  阅读(63)  评论(0编辑  收藏  举报