ansible_module 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -2
- data/README.md +138 -10
- data/VERSION +1 -1
- data/lib/ansible_module.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6355d7da66ac0cb19bc372a9733fba816217b87
|
4
|
+
data.tar.gz: 4f34188771a2276f2397609b3540cabcb79c55cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab78c4fb84571570587976d59dfbf3a3ad9f076d2b8fe61210ecf94ba6cf81b067118dd9dc88d6ff6c5e48d29cb29a8203fc564ec0f84a20d0c5c683ece8400a
|
7
|
+
data.tar.gz: ed41b1780a6439bfff9a3fe88d0418b5d42887380814af2be2efa9ba11ef9c10270599843b6df554d90dc51a744852fb6e9a9fb0fad67cf785c26d9da59e58af
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
3
|
|
4
|
+
## 0.9.1 (2014-08-28)
|
5
|
+
|
6
|
+
* Add private method `AnsibleModule#invalid_json` to improve the message on
|
7
|
+
validation failure.
|
8
|
+
|
4
9
|
## 0.9.0 (2014-08-27)
|
5
10
|
|
6
|
-
* Implement basic instance methods: main
|
7
|
-
* Implement basic class methods: instance
|
11
|
+
* Implement basic instance methods: `main`, `run`, `exit_json`, `fail_json`
|
12
|
+
* Implement basic class methods: `instance`, `params`
|
data/README.md
CHANGED
@@ -1,30 +1,63 @@
|
|
1
1
|
AnsibleModule
|
2
2
|
=============
|
3
3
|
|
4
|
+
[](http://badge.fury.io/rb/ansible_module)
|
5
|
+
|
4
6
|
AnsibleModule is a Ruby class that provides basic functionalities as an [Ansible](http://ansible.com) module.
|
5
7
|
|
6
|
-
It is distributed as a gem package under the MIT
|
8
|
+
It is distributed as a gem package under the [MIT-LICENSE](MIT-LICENSE).
|
7
9
|
|
8
10
|
Installation
|
9
11
|
------------
|
10
12
|
|
11
|
-
|
13
|
+
### Manual Installation
|
14
|
+
|
15
|
+
Install Ruby (2.0 or later) and `ansible_module` gem on your *remote* hosts.
|
16
|
+
|
17
|
+
The following is a typical procedure on Ubuntu Server 14.04:
|
18
|
+
|
19
|
+
```
|
20
|
+
$ sudo add-apt-repository -y ppa:brightbox/ruby-ng
|
21
|
+
$ sudo apt-get update
|
22
|
+
$ sudo apt-get -y install ruby2.1
|
23
|
+
$ sudo gem install ansible_module
|
24
|
+
```
|
25
|
+
|
26
|
+
### Installation with Ansible
|
27
|
+
|
28
|
+
Create an Ansible [playbook](http://docs.ansible.com/playbooks.html) to install Ruby and `ansible_module` gem.
|
29
|
+
|
30
|
+
The following is an example for Ubuntu Server 14.04:
|
12
31
|
|
13
32
|
```yaml
|
14
|
-
- hosts:
|
33
|
+
- hosts: servers
|
34
|
+
sudo: yes
|
15
35
|
tasks:
|
36
|
+
- name: Add ppa for ruby
|
37
|
+
apt_repository: repo='ppa:brightbox/ruby-ng' state=present
|
38
|
+
- name: Install ruby 2.1
|
39
|
+
apt: name=ruby2.1 state=present
|
16
40
|
- name: Install ansible_module gem
|
17
41
|
gem: name=ansible_module user_install=false state=present
|
18
42
|
```
|
19
43
|
|
20
|
-
|
44
|
+
If you named this file `ruby_environment.yml`, then run the following command on your *local* host:
|
45
|
+
|
46
|
+
```
|
47
|
+
$ ansible-playbook -i hosts ruby_environment.yml
|
48
|
+
```
|
49
|
+
|
50
|
+
In the above example, the `hosts` file is an [inventory](http://docs.ansible.com/intro_inventory.html) which lists up host names or IP addresses.
|
51
|
+
|
21
52
|
|
22
|
-
|
23
|
-
|
53
|
+
Example (1)
|
54
|
+
-----------
|
24
55
|
|
25
|
-
Create
|
56
|
+
Create a file named `calc` on the `library` directory as follows:
|
26
57
|
|
27
58
|
```ruby
|
59
|
+
#!/usr/bin/ruby
|
60
|
+
|
28
61
|
require 'ansible_module'
|
29
62
|
|
30
63
|
class Calc < AnsibleModule
|
@@ -44,10 +77,14 @@ end
|
|
44
77
|
Calc.instance.run
|
45
78
|
```
|
46
79
|
|
47
|
-
|
80
|
+
The values of attributes `x` and `y` are set during instantiation process by `AnsibleModule`.
|
81
|
+
|
82
|
+
Note that you can validate them with `validates` class method derived from `ActiveModel`.
|
83
|
+
|
84
|
+
Then, create a file named `calc.yml` as follows:
|
48
85
|
|
49
86
|
```yaml
|
50
|
-
- hosts:
|
87
|
+
- hosts: servers
|
51
88
|
tasks:
|
52
89
|
- name: Make a calculation
|
53
90
|
calc: x=50 y=50
|
@@ -56,7 +93,98 @@ Add the following to your Ansible playbook:
|
|
56
93
|
msg="sum = {{ result['sum'] }}"
|
57
94
|
```
|
58
95
|
|
96
|
+
And run the following command on your local host:
|
97
|
+
|
98
|
+
```
|
99
|
+
$ ansible-playbook -i hosts calc.yml
|
100
|
+
```
|
101
|
+
|
102
|
+
|
103
|
+
Example (2)
|
104
|
+
-----------
|
105
|
+
|
106
|
+
Create a file named `mysql_change_master` on the `library` directory as follows:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
#!/usr/bin/ruby
|
110
|
+
|
111
|
+
require 'ansible_module'
|
112
|
+
|
113
|
+
class MysqlChangeMaster < AnsibleModule
|
114
|
+
attribute :host, String
|
115
|
+
attribute :port, Integer, default: 3306
|
116
|
+
attribute :user, String
|
117
|
+
attribute :password, String
|
118
|
+
attribute :mysql_root_password, String
|
119
|
+
|
120
|
+
validates :port, inclusion: { in: 0..65535 }
|
121
|
+
|
122
|
+
def main
|
123
|
+
statement = %Q{
|
124
|
+
STOP SLAVE;
|
125
|
+
CHANGE MASTER TO
|
126
|
+
MASTER_HOST='#{host}',
|
127
|
+
MASTER_PORT=#{port},
|
128
|
+
MASTER_USER='#{user}',
|
129
|
+
MASTER_PASSWORD='#{password}',
|
130
|
+
MASTER_AUTO_POSITION=1;
|
131
|
+
START SLAVE;
|
132
|
+
}.squish
|
133
|
+
|
134
|
+
command = %Q{
|
135
|
+
/usr/bin/mysql -u root -p#{mysql_root_password} -e "#{statement}"
|
136
|
+
}.squish
|
137
|
+
|
138
|
+
system(command)
|
139
|
+
|
140
|
+
exit_json(statement: statement, changed: true)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
MysqlChangeMaster.instance.run
|
145
|
+
```
|
146
|
+
|
147
|
+
Note that you can use methods added by `ActiveSupport` like `String#squish`.
|
148
|
+
|
149
|
+
Then, create a file named `replication.yml` as follows:
|
150
|
+
|
151
|
+
```yaml
|
152
|
+
- hosts: mysql-slave
|
153
|
+
vars_files:
|
154
|
+
- shared/secret.yml
|
155
|
+
tasks:
|
156
|
+
- name: Change master to the db1
|
157
|
+
mysql: >
|
158
|
+
host="db1"
|
159
|
+
user="repl"
|
160
|
+
password="{{ mysql_repl_password }}"
|
161
|
+
mysql_root_password="{{ mysql_root_password }}"
|
162
|
+
```
|
163
|
+
|
164
|
+
Next, create a file named `secret.yml` on the `shared` directory as follows:
|
165
|
+
|
166
|
+
```secret.yml
|
167
|
+
mysql_repl_password: p@ssw0rd
|
168
|
+
mysql_root_password: p@ssw0rd
|
169
|
+
```
|
170
|
+
|
171
|
+
Note that you should replace `p@ssw0rd` with real passwords.
|
172
|
+
|
173
|
+
And run the following command on your local host:
|
174
|
+
|
175
|
+
```
|
176
|
+
$ ansible-playbook -i hosts replication.yml
|
177
|
+
```
|
178
|
+
|
179
|
+
You might want to encrypt the `secret.yml` with [ansible-vault](http://docs.ansible.com/playbooks_vault.html).
|
180
|
+
In that case, you must add `--ask-vault-pass` option to the above command:
|
181
|
+
|
182
|
+
```
|
183
|
+
$ ansible-playbook -i hosts --ask-vault-pass replication.yml
|
184
|
+
```
|
185
|
+
|
186
|
+
|
59
187
|
License
|
60
188
|
-------
|
61
189
|
|
62
|
-
AnsibleModule is distributed under the
|
190
|
+
AnsibleModule is distributed under the [MIT-LICENSE](MIT-LICENSE).
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.1
|
data/lib/ansible_module.rb
CHANGED
@@ -16,7 +16,7 @@ class AnsibleModule
|
|
16
16
|
if valid?
|
17
17
|
main
|
18
18
|
else
|
19
|
-
|
19
|
+
invalid_json
|
20
20
|
end
|
21
21
|
rescue StandardError => e
|
22
22
|
fail_json(msg: "Failed: #{e.to_s}")
|
@@ -38,6 +38,12 @@ class AnsibleModule
|
|
38
38
|
exit 1
|
39
39
|
end
|
40
40
|
|
41
|
+
def invalid_json
|
42
|
+
message = 'Invalid parameters: '
|
43
|
+
message += errors.full_messages.map { |m| "#{m}." }.join(' ')
|
44
|
+
fail_json(msg: message)
|
45
|
+
end
|
46
|
+
|
41
47
|
class << self
|
42
48
|
def instance
|
43
49
|
@instance ||= new(params)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ansible_module
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tsutomu KURODA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|