ansible知识点记录

1、import_role模块  调用roles角色
- name: **
  hosts: webapp
  remote_user: root
  gather_facts: no
  vars_files:
    - ./vars/ini.cfg
  tasks:
    - import_role: name=ssh_trust
2、
- import_role:
  name: manage_jdk
  tasks_from: other
调用角色manage_jdk,且调用角色里tasks目录里的other.yml,若未指明则默认运行main.yml

3、import_tasks模块  调用角色的具体任务
main.yml解释:
- name: **
  import_tasks: install.yml  【指明调用任务里install.yml脚本】
或
- name: **
  import_tasks: install.yml 
  when: hostvar is defined

4、
- name: 检查是否安装jdk的rpm包
  shell: (rpm -qa|grep "^java" && echo "yes" || echo "no") | grep -v java | tail -1
  register: check_jdk_result
【解释:register登记,记录,将shell模块执行的结果保存至check_jdk_result变量里】

- name: 卸载jdk的rpm包
  shell: for javapkg in $(rpm -qa|grep java); do rpm -e --nodeps $javapkg;done
  when: check_jdk_result.stdout=="yes"
【解释:when模块判断check_jdk_result变量的输出值为yes就执行卸载】



register用于注册一个变量,保存命令的结果(shell或command模块),这个变量可以在后面的task、when语句或模板文件中使用
- name: test
  shell: /bin/pwd
  register: pwd_result
此时变量pwd_result的结果为:(register的结果集就是一个字典k/v)
【如下的详细信息如何获取?可以先单独执行shell模块,使用参数-vv查看其详细信息】
ansible-playbook test.yml -i invnetory/ini -vv
{
    u'changed': True, 
    u'end': u'2014-02-23 12:02:51.982893', 
    u'cmd': [u'/bin/pwd'], 
    u'start': u'2014-02-23 12:02:51.980191', 
    u'delta': u'0:00:00.002702', 
    u'stderr': u'', 
    u'rc': 0,                             #这个就是命令返回状态,非0表示执行失败
    'invocation': {'module_name': 'command', 'module_args': '/bin/pwd'}, 
    u'stdout': u'/home/sapser',           #以一个字符串保存命令结果
    'stdout_lines': [u'/home/sapser']     #以列表保存命令结果

}
所以可以再加入when语句判断:
- name: test
  shell: /bin/pwd
  register: pwd_result
  debug: msg="{{ pwd_result }}"
  when: pwd_result.src=="0"  【如果不知道register保存的变量字典值,可以先执行shell模块带参数-vv查看其详细信息】

举例2:
- name: echo date 
  command: date 
  register: date_output 
  
- name: echo date_output 
  command: echo "30"
  when: date_output.stdout.split(' ')[2] == "30"
因为 register 获取到的输出内容都是字符串,而ansible又是python写的,所以可以使用python字符串的方法对其做处理,比如本文中使用的split,还可以使用find方法

6、- name: **
        hosts: localhost
        remoute_user: root
【 hosts: localhost 表示只作用于本机,hosts指定的主机是什么,接下来的ansible脚本就作用于哪个主机上】

7、为用户建立互信
- name: **
  hosts: localhost   【注:这里作用的主机是本地】
  remoute_user: root
  gather_facts: no
  tasks:
    - name: 创建公钥集临时文件
      file: path=/tmp/authorized_keys state=touch mode=0777
    - name: 将公钥集文件置空
      shell: cat /dev/null > /tmp/authorized_keys
    - name: 将所有节点上的秘钥复制到公钥集文件中追加
      shell: sshpass -p 密码 ssh {{ item }} -o StrictHostKeyChecking=no cat /home/{{ user_name }}/.ssh/id_rsa.pub >> /tmp/authorized_keys
      with_items: "{{ host_list }}"
    - name: 将本地的秘钥集文件复制到远程所有节点上
      shell: sshpass -p 密码 scp -o StrictHostKeyChecking=no /tmp/authorized_keys   {{ item }}:/home/{{user_name }}/.ssh/
      with_items: "{{ host_list }}"
【故scp远程复制命令本地/tmp/authorized_key就指localhost的本地文件了;如果hosts指定的是IP1,那么/tmp/authorized_key
就指IP1所在的主机的本地文件了】
    
注:如上使用的远程用户是root,所以将本地的秘钥文件authorized_keys拷贝至远程目标主机后属组为root,因此还需修改其属组权限
    如果是配置root的用户的互信,那么就不必修改属组权限
且前提是要创建用户的时候生成了秘钥文件id_rsa.pub
    - name: 修改远程目标主机的authorized_keys的属组权限
      shell: sshpass -p 密码  ssh {{ item }} -o StrictHostKeyChecking=no  chown -R {{ user_name }}:{{ user_name }} {{ item }}:/home/{{user_name }}
      with_items: "{{ host_list }}"

【注】:
ansible脚本执行关于shell命令ssh之类的报错信息如下:
The fingerprint for RS key sent by the remote hosts is SHA256. Offending ECDSA key in /root/.ssh/known_hosts.
说明是linux系统在一开始ssh各机器之间使用的是如下协议:
/etc/ssh/sshd_config文件中:HostKey /etc/ssh/ssh_host_ecdsa_key(协议)
后又改为:HostKey /etc/ssh/ssh_host_rsa_key(协议)
所以导致/root/.ssh/known_hosts文件中存在两种不同的协议,这就导致ansible使用ssh时报错!

解决方法:
删除/root/.ssh/known_hosts文件关于ECDSA协议的连接信息或清空整个/root/.ssh/known_hosts文件。

8、ansible执行远程使用的remote_user如root用户,未配置互信时该如何?
如
hosts: webapp
remote_user: root
在远程机器上未配置互信,可以在主机清单里添加上root用户的密码:
[webapp]
10.132.42.36
10.132.42.37
[webapp:vars]
ansible_user='root'
ansible_ssh_pass='123456'

主机清单hosts部分中常用到的变量:
ansible_ssh_host              #要连接的主机名
ansible_ssh_port              #端口号默认是22
ansible_ssh_user              #ssh连接时默认使用的用户名【ansible_user】
ansible_ssh_pass              #ssh连接时的密码
ansible_sudo_pass             #使用sudo连接用户时的密码
ansible_ssh_private_key_file  #秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type            #shell的类型默认sh
ansible_connection            #SSH连接的类型:优先使用基于 ControlPersist 的 ssh (支持的前提)
ansible_python_interpreter    #用来指定 python 解释器的路径,同样可以指定ruby 、perl 的路径

9、facts组件是用来收集被管理节点信息的,使用setup模块可以获取这些信息
ansible 192.168.1.105 -m setup
当编写playbook时,gather_facts值True/Yes表示获取主机facts信息
gather_facts值False/No 表示不获取主机facts信息,因此主机facts变量值即不可用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354