ansible roles中常用的语法以及高级特性汇总

小熊 Ansible21,608字数 3062阅读10分12秒阅读模式

摘要:本节主要总结ansible roles中常用的语法以及高级特性、例如变量、下载、解压、修改文件内容等,便于使用ansible协同开发,做更加庞大的任务。

常用

远程执行脚本

  1. 脚本放到template里
- name: init rbac rights
  template:
    src: 'init_rbac_privilege.sh'
    dest: '/tmp/init_rbac_privilege.sh'
    mode: 0755

- name: init rbac rights
  shell: "bash /tmp/init_rbac_privilege.sh"
  run_once: true
  ignore_errors: yes
  1. 脚本放files文件里
- name: copy script file to remote server
  copy:
    src: "generate_uuid.py"
    dest: "{{ dest_script_file }}"
    mode: 0755

- name: set to execute script file and args
  shell: "python {{ dest_script_file }}"

设置某个参数供下文使用

- name: set to execute script file path
  set_fact:
    dest_script_file: '/tmp/generate_uuid.py'

- name: copy script file to remote server
  copy:
    src: "generate_uuid.py"
    dest: "{{ dest_script_file }}"
    mode: 0755

文件是否存在和变量是否声明

- stat:
    path: "{{ dest_script_file }}"
  register: file_result

- name: set to execute script file and args
  shell: "python {{ dest_script_file }} {{ inventory_hostname }}"
  register: p_new_host_uuid
  when: host_uuid is not defined and file_result.stat.exists

解压

解压tar.gz,desc所指定的目录需要提前创建

- name: Unarchive ceph_report program package
  unarchive:
    remote_src: yes
    src: "/tmp/ceph_report/ceph_report.tar.gz"
    dest: "/data/monitorcloud/script/"

下载

- name: download ceph_report package
  get_url:
    url: "http://{{ tstack_repo_address }}:{{ tstack_repo_port }}/tstack/tstack-tars/ceph_report.tar.gz"
    dest: "/tmp/ceph_report/ceph_report.tar.gz"
    mode: 0644

修改文件内容,直接替换方式

- name: insert mons connect message
  lineinfile:
    path: "/data/monitorcloud/script/ceph_report/host_dic"
    state: present
    insertafter: EOF
    backrefs: no
    line: "{{item[0]}} {{item[1]}}"
  with_nested:
    - "{{ groups['mons'] | union( groups['osds'] )}}"
    - ["{{ansible_ssh_pass}}"]
  ignore_errors: true

配置文件

ansible中指定配置文件,.j2中可映射ansible变量

- name: Prepare ceph_report_http program configuration file
  template:
    src: "opts.py.j2"
    dest: "/data/monitorcloud/script/ceph_report/opts.py"
    mode: 0644

执行命令时指定脚本执行目录

- name: execute ceph_report_http install script
  shell: "/usr/bin/python  ceph_report_http.py install"
  args:
     chdir: '/data/monitorcloud/script/ceph_report/'
  ignore_errors: yes

高级

委托

在当前运行ansible的机器上,委托其他机器运行

- name: add host record to center server 
 shell: 'echo "192.168.1.100 test.xyz.com " >> /etc/hosts'
 delegate_to: 192.168.1.1

也可以委托ansible服务端运行

- name: add host record to center server 
 shell: 'echo hello'
 delegate_to: localhost

统一目录结构

project/
├── filter_plugins          # 自定义 filter 插件存放目录
├── fooapp                  # Fooapp 片色目录 ( 与 common 角色目录平级)
├── group_vars             
│   ├── group1              # group1 自定义变量文件
│   └── group2              # group2 自定义变量文件
├── host_vars
│   ├── hostname1           # hostname1 自定义变量文件
│   └── hostname2           # hostname1 自定义变量文件
├── library                 # 自定义模块存放目录
├── monitoring              # Monitoring 角色目录 ( 与 common 角色目录平级)
├── roles                   # Role 存放目录
│   └── common              # common 角色目录
│       ├── defaults       
│       │   └── main.yml    # common 角色自定义文件 (优先级低)
│       ├── files
│       │   ├── bar.txt     # common 角色 files 资源文件
│       │   └── foo.sh      # common 角色 files 资源文件
│       ├── handlers
│       │   └── main.yml    # common 角色 handlers 入口文件
│       ├── meta
│       │   └── main.yml    # common 角色 依赖文件
│       ├── tasks
│       │   └── main.yml    # common 角色 task 入口文件
│       ├── template
│       │   └── ntp.conf.j2 # common 角色 template 文件
│       └── vars
│           └── main.yml    # common 角色 变量定义文件
├── site.yaml               # Playbook 统一入口文件
├── stage                   # stage 环境的 inventory 文件
├── webservers.yml          # 特殊 Playbook 文件
└── webtier                 # webtier 角色目录 ( 与 common 角色目录平级)

引用

ansible进阶技巧 https://www.ibm.com/developerworks/cn/linux/1608_lih_ansible/index.html

shilei ansible 文档 https://wiki.shileizcc.com/confluence/display/AN/Ansible

骏马金龙 ansible系列文章 http://www.cnblogs.com/f-ck-need-u/p/7576137.html#ansible

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
小熊