tags:在某个module下打一个tags标签,即可在执行时使用--tags=xx或--skip-tags=xxx执行或跳过执行该tags对应的步骤,如--tags="xx,xxx,xxxx"


become: yes,提权,即升级权限至一个需要的账户级别,默认是sudo和root,当需要指定时可单独写

 

以后再也不敢说会使用ansible了,灵活用法如下:

1.定义主机的文件可使用-i指定路径;

2.参数文件group_vars如果跟随主机文件同一目录,那么在yml所在的目录执行时依旧可以读取,牛逼

3.当yml所在目录和主机文件所在目录都有group_vars文件夹时,变量的读取顺序是先yml所在的group_vars,然后是主机所在的group_vars。第一次发现这个灵活的用法,之前一直不知道

4.roles目录:roles/xx/tasks/main.yml, 长时间不写就会忘

 

好资源:https://www.ansible.com/resources/webinars-training

ansible -i 后接一个py脚本生成的主机列表,json格式。

定义主机的方式:http://allandenot.com/devops/2015/01/16/ansible-with-multiple-inventory-files.html

1.指定主机文件

2.指定某个文件夹,文件夹下面有这些主机文件,是否必须是命名为inventory有待确认。

3.指定的文件夹下既有动态的,又有静态的,这时候会全部都执行。所谓动态的就是py类文件,静态就是inventory这类的ini文件

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ansible配置使用不同的key进行授信,引用自博文:

1)ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件 
2)./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件 
3)~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件 
4)/etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件
 

 

ansible授信方式的顺序:

默认:

在哪里配置:

优先级:

 

inventory: 主机参数的配置

 

>>>>>>>>>>>>>>>>>>>>>>

同一个playbook内针对多个不同的主机执行:

- hosts: xxxx

  roles:

    - xxx

  tasks:

    - name: xxx

       xxx

在每个hosts组内都可以单独执行自己的handler

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>

参数执行顺序:


1. Vars set on the command line -e foo=set_on_cmd_line
2. Vars set in the vars_files: block in the play
3. Vars set in the vars: block in the play
4. Vars set in host_vars/
5. Vars set in group_vars/
6. Role default vars roles/.../defaults/main.yml

按照上述的顺序调用参数

 

ansible 当前案例总结:

1.一个yml内可以有多个hosts。

2.每个hosts下可以同时又tasks和roles。

3.每个hosts内的tag只对task起作用,对roles不起作用

4.在group_vars内指定anisble的链接变量,但是要在全局里指定world——variable

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ansible命令:

ansible-playbook -i xx/xxx/xx/xyz xxxx.yml -t xxtags,xytags --ask-vault-pass -v --check,其中,ask-vault-pass是询问是否手动解密。--check是不执行,只是检查一遍语法和网络。-t是执行带有某个或某几个tags的任务。inventory的路径可以是任意的,只要使用-i指定即可。host的pubkey的路径可以通过groupvar里的参数指定。

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ansible经验:

yml开头有三个杠   ---

判断系统 ansible_os_family

判断和 列表when: not ansible_os_family in ["RedHat", "Windows"]

参数文件里的列表

这是一个dict,读取的时候可以使用java_version["prefix"]

java_version:
  prefix: 1
  major: 8
  minor: 0
  update: 201
  build: "09"

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ansible部署场景:

java:

1.使用get_url下载,加headers='Cookie:gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie'

2.老外真博学和严谨,感觉国内技术功底和严谨性,输了。不专精。java的环境变量的配置,是在/etc/environment和/etc/profile同时配置的,与/etc/profile啥区别???

3.修改文件的方法

lineinfile:

dest=/etc/profile
     regexp="^export PATH=\$JAVA_HOME"
     state=present
     line="export PATH=$JAVA_HOME/bin:$PATH"

4.使用alternatives 整合所有的java的软链接,不懂

windows中安装:先检查路径下是否有java,然后执行下载脚本script: "down.ps1 '{{ 变量 1}}' '{{变量2}}'",然后执行安装脚本,注意,使用的是raw:raw: '{{ exe在的位置 }} /s INSTALLDIR={{ java_win_jdk_home }}' 远程主机上直接执行exe安装软件。第三步是配置java环境script: "win_env_workaround.ps1 'JAVA_HOME' '{{ java_win_jdk_home }}'"

 

git:

jenkins:

 

 

新知识点:配置指向本地公钥执行远程主机