ansible_roles

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

常用

远程执行脚本

  1. 脚本放到template里

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    - 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
  2. 脚本放files文件里

    1
    2
    3
    4
    5
    6
    7
    8
    - 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 }}"

设置某个参数供下文使用

1
2
3
4
5
6
7
8
9
- 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

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

1
2
3
4
5
6
7
8
- 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所指定的目录需要提前创建

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

下载

1
2
3
4
5
- 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

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

1
2
3
4
5
6
7
8
9
10
11
- 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变量

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

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

1
2
3
4
5
- 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的机器上,委托其他机器运行

1
2
3
- 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服务端运行

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

统一目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

坚持原创技术分享,您的支持将鼓励我继续创作!