ansible技术学习总结
来源:互联网 发布:算法新解刘新宇pdf 编辑:程序博客网 时间:2024/06/05 22:35
最近因项目需要使用ansible编写自动化部署的脚本,下面做一些小结,目前知涉及到项目中用到的一些东西
- 环境:redhat7.2
- 执行命令
ansible-playbook -i host xxx_init.yml
- ansible的hosts文件
[MANAGE:children]#管理节点,分主备MANAGE_PRIMARYMANAGE_BACKUP[MANAGE_PRIMARY]10.100.100.100[MANAGE_BACKUP]10.100.100.101[FRONT:children]#前台节点,分主备,主要负责一些负载均衡,消息转发FRONT_PRIMARYFRONT_BACKUP[FRONT_PRIMARY]10.100.100.102[FRONT_BACKUP]10.100.100.103[BACK]#后台节点,处理北向请求10.100.100.10410.100.100.105
- 脚本目录
callback_plugins目录存放的是ansible插件内容group_vars目录存放变量文件roles存放脚本xxxx_init.yml脚本入口文件
- xxx_init.yml脚本介绍
--- - hosts: all#all表示上面hosts文件中所有的节点都会执行 serial: 10#ansible默认是连接5台服务器,为从优化性能考虑,这里设置为10(同时也可以修改ansible的配置文件进行设置) roles: - role: common#指定需要执行的role vars_files: - group_vars/main_vars.yml#指定变量文件 - hosts: MANAGE gather_facts: no# roles: - role: manage vars_files: - group_vars/main_vars.yml - hosts: FRONT gather_facts: no#为从优化性能考虑,关闭gather_facts(因为在执行脚本时,发现在切换脚本执行时,会执行setup模块,浪费时间,当上面的all尽量不要关闭gather_facts,因为脚本中会有获取相关信息的操作) roles: - role: front vars_files: - group_vars/main_vars.yml - hosts: BACK gather_facts: no roles: - role: back vars_files: - group_vars/main_vars.yml #注意事项:在hosts: all中,如果没有需要所有机器都要执行的这部操作的话,可以省略,但如果需要在hosts文件中的一个group组中想去获取其他group组的setup模块中的信息,可以只写下面的内容 - hosts: all
- ansible脚本使用yml语法格式,内容看起来清晰明了,同时格式有一定的要求,比如空格,初期会因为格式不正确,多出或者少了空格而报错,也是很莫名奇妙的。
- common/main.yml脚本脚本内容
--- - name: mode /root/.ssh/id_rsa permission to 600#这里相当于一个log command: chmod 600 /root/.ssh/id_rsa removes=/root/.ssh/id_rsa#执行command模块,直接执行命令,removes的意思是当该文件存在时才会执行这个赋予权限的操作,如果知道该文件是存在的话,执行文件付权限操作可以使用file模块 - include: create_yum_source.yml#执行create_yum_source.yml脚本 - include: jdk/install_jdk.yml
- 在云化环境下,根据自己的产品创建对应的镜像,如果使用官方镜像,会比较大,上传镜像文件或者创建虚拟机相对来讲比较耗时,这里可以使用官方最小镜像进行安装,但一些自定义的rpm如何创建yum源呢?
- 如何使用ansible创建自定义yum源呢?可以参考下面的内容(create_yum_source.yml)
#安装createrepo,这里是将createrepo及相关的依赖包找出来,然后使使用rpm方式进行安装---- name: install createrepo #安装createrepo shell: rpm -ivh {{ rpm_packages_path }}{{ item }} #rpm_packages_path变量为rpm包的路径 ignore_errors: True with_items: - deltarpm-3.6-3.el7.x86_64.rpm - python-deltarpm-3.6-3.el7.x86_64.rpm - createrepo-0.9.9-23.el7.noarch.rpm#创建yum源- name: createrepo create packages link command: createrepo {{ rpm_packages_path }}#复制repo文件- name: copy packages.repo files template: src={{ item }} dest=/etc/yum.repos.d/ with_items: - packages.repo##############################################packages.repo文件内容:[packages]name=packagesbaseurl=file://{{ rpm_packages_path }}enabled=1gpgcheck=0#{{ rpm_packages_path }}是ansible引用变量的方式,该变量定义在group_vars/main_vars.yml文件中##############################################这里涉及到template模块,说一下temolate模块作用和用法template模块主要是复制文件作用,同时file,copy,fatch模块也有复制文件作用template模块中可以引用变量,写if判断,for循环等参考下面template文件可以定义的小案例,案例为将keepalived的配置文件keepalived.conf! Configuration File for keepalivedglobal_defs { router_id LVS_DEVEL}vrrp_script chk_haproxy { script "killall -0 haproxy" interval 2 weight 2}vrrp_instance VI_1 { state MASTER interface {{ front_vrrp_instance_interface }}#前面定义的变量 virtual_router_id 40 priority 101 advert_int 2 garp_master_delay 1 authentication { auth_type PASS auth_pass 1111 } track_interface {{# 这里是想将该FRONT组中所有的网卡写入这里,除了lo网口,front_master_name为前面定义好的变量 #}{% for host in groups['FRONT'] %}{% if hostvars[host]['ansible_nodename'] == front_master_name %}{% for interface in hostvars[host]['ansible_interfaces'] %}{% if interface != 'lo' %} {{ interface }}{% endif %}{% endfor %}{% endif %}{% endfor %} } virtual_ipaddress { {{ vnf_context_data.vnf_attributes.extensions.front_vip }}/32 } track_script { chk_haproxy } }
template模块中,如何获取hosts中其他组信息,如其他group组的setup模块信息,参考下面的代码
{% for host in groups['FRONT'] %}{% if hostvars[host]['ansible_nodename'] == front_master_name %}{% for interface in hostvars[host]['ansible_interfaces'] %}{% if interface != 'lo' %} {{ interface }}{% endif %}{% endfor %}{% endif %}{% endfor %}#########################说明:groups['FRONT']为hosts文件中[FRONT]组下面的机器(注意格式)上面代码表示为遍历hosts文件中[FRONT]组中所有机器,当机器的hostname为front_master_name(定义的变量)时,则将该机器所有的网卡获取出来,除了lo网口注意:在xxx_init.yml入口文件中要有 - hosts: all类似一个全局变量
- ansible脚本如何像java一样使用 try catch finally?
tasks: - name: Attempt and gracefull roll back demo block: #like java try - debug: msg='I execute normally' - command: /bin/false - debug: msg='I never execute, due to the above task failing' rescue: #like java catch - debug: msg='I caught an error' - command: /bin/false - debug: msg='I also never execute :-(' always: #like java finally - debug: msg="this always executes"
- ansible安装jdk,配置环境变量(ansible安装远程机器,配置环境变量,使用source /etc/profile 不生效?,参考下面的代码)
除了在/etc/profile文件添加环境变量,并source;还要在/root/.bashrc 文件中添加环境变量,并source
- name: check jdk variable shell: cat /etc/profile register: result- name: jdk variable configuration /etc/profile file shell: /bin/echo {{ item }} >> /etc/profile; source /etc/profile when: result.stdout.find('JAVA_HOME') == -1 with_items: - export JAVA_HOME=/usr/java/jdk{{ jdk_version }} - export JAVA_BIN=/usr/java/jdk{{ jdk_version }}/bin - export PATH=$PATH:/usr/java/jdk{{ jdk_version }}/bin - export JRE_HOME=/usr/java/jdk{{ jdk_version }}/jre - export CLASSPATH=.:/usr/java/jdk{{ jdk_version }}/lib:/usr/java/jdk{{ jdk_version }}/jre/lib - export JAVA_HOME JAVA_BIN PATH JRE_HOME CLASSPATH- name: check jdk variable shell: cat /root/.bashrc register: bashrc_result- name: jdk variable configuration /root/.bashrc file shell: /bin/echo {{ item }} >> /root/.bashrc; source /root/.bashrc when: bashrc_result.stdout.find('JAVA_HOME') == -1 with_items: - export JAVA_HOME=/usr/java/jdk{{ jdk_version }}
如果修改了上面2个文件后,执行source指令还没有生效?
原因:请把被控制机的远程登录界面关掉的情况下执行ansible脚本即可生效
- ansible如何判定hosts文件中某个组下面机器的个数?
场景:当hosts文件中某个组下面没有机器时,执行缩容操作,如果有机器,执行扩容操作
如 hosts,文件中new组下面的机器个数为0个,执行缩容[new]如果new组下面机器多个,执行扩容操作[new]172.10.10.1###########################判定语句:when: (groups['new']|length > 0)
- ansible 如何判定一个文件夹是否存在,如果存在则执行相应的操作?
- name: judge templates directory if exit shell: ls /home/templates/ connection: local register: result ignore_errors: True#- debug: var=result verbosity=0- include: syn_templates.yml when: result.rc == 0
- ansible如何将多个文件传到被控制上?(仅跟上一步)
先进行压缩,然后使用unarchive模块传到被控制机上,多个文件速度比copy要快
syn_templates.yml 如下:---- name: gzip templates command: tar -zcvf /tmp/templates.tar.gz /home/templates connection: local- name: syn templates to dest server unarchive: src=/tmp/templates.tar.gz dest=/ group=sfy owner=sfy-adm
阅读全文
0 0
- ansible技术学习总结
- ansible学习之--ansible初探
- Ansible扩展总结
- ansible应用总结
- Ansible问题总结
- ansible学习一(ansible安装)
- Ansible学习笔记--Ansible安装及使用方法
- ansible学习笔记1
- ansible学习笔记
- ansible学习笔记-原创
- Ansible学习笔记
- Ansible学习记录
- Ansible 安装学习
- LINUX学习之ANSIBLE
- ansible学习例子
- ansible学习小记
- 技术学习过程总结
- traits技术学习总结
- 从高考到程序员 —— 我是一个没有参加过高考的程序员
- centos7安装opencl环境
- P2900 [USACO08MAR]土地征用Land Acquisition
- java 转义字符序列
- 图的邻接矩阵存储及遍历
- ansible技术学习总结
- ACM学习心得(5000字)
- 1005. Spell It Right (20)
- 23. Merge k Sorted Lists&优先队列
- 因特网、万维网和互联网
- Spring Boot单元测试
- java.lang.IllegalStateException: No output folder
- 392. Is Subsequence Medium
- Business Center