https://github.com/iij/capistrano-operator
semi-automating shell work in maintenance.
https://github.com/iij/capistrano-operator
Last synced: 5 months ago
JSON representation
semi-automating shell work in maintenance.
- Host: GitHub
- URL: https://github.com/iij/capistrano-operator
- Owner: iij
- License: mit
- Created: 2019-07-11T08:14:36.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-08-23T21:37:07.000Z (over 1 year ago)
- Last Synced: 2024-11-17T13:21:45.079Z (5 months ago)
- Language: Ruby
- Homepage:
- Size: 20.5 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Capistrano::Operator
[](https://badge.fury.io/rb/capistrano-operator)
It is a tool for semi-automating shell work in maintenance.
Capistrano-operator executes shell commands described by yaml operation files to the host.It is effective in the following cases.
You want to ...
- eliminate the need to copy and paste commands from procedures.
- operate while checking the execution result with human eyes.## Installation
Add this line to your application's Gemfile:
```ruby
gem 'capistrano-operator'
```And then execute:
$ bundle install --deployment
$ bundle exec cap install
$ bundle exec operator install## Usage
$ bundle exec cap dev operator:apply operation={operation_filename}
If you want to execute the operation file name of `operations/import-sample.yml`$ bundle exec cap dev operator:apply operation=import-sample
### Task list
Task | Description | Argument
------|-----|------
operator:ping | Check the reachability with target host. | -
operator:check | Displays the contents of the operation specified in the argument by formatting. | operation file path
operator:apply | Execute the contents of operation specified in the argument on the target host. | operation file path### How to make the Operation
The operation file is placed under the directory of `operaitons/`, and is described in yaml as shown below.
#### e.g. Operation file that creates a file named 'piyo.txt' and writes 'hello'.
An example of each operation is shown below. The keys for each hash are described in the following sections.
- import-sample.yml
```yaml
vars:
filename: 'piyo.txt'
greeting: 'hello'
tasks:
- import: imports/touch
vars:
file: '{{filename}}'
- execute_commands:
- "echo '{{greeting}}' >> {{filename}}"
check_commands:
- 'ls -l'
- 'cat {{filename}}'
highlight:
- 'hoge'
- 'test'
- import: imports/rm
```- imports/touch.yml
```yaml
vars:
file: 'overwrite_by_parent.txt'
tasks:
- execute_commands:
- "touch {{file}}"
check_commands:
- 'ls -l | grep {{file}}'
```- imports/rm.yml
```yaml
vars:
file: 'overwrite_by_parent.txt'
tasks:
- execute_commands:
- 'rm {{file}}'
check_commands:
- 'ls -l {{file}}'
```#### vars
Describe variable definitions used in `tasks` in` vars` hash. To use the defined variable, write it in `tasks` hash in the form of` {{variable-name}} `.
The scope of the value set in `vars` hash is limited within the operation file, and does not overwrite variables defined in the imported operations.
If you need to apply variables to imported operations, please add `vars` in the same hash as `import`.#### tasks
Describe the tasks to be executed in the `tasks` hash by array.
Before executing each tasks, the task to be executed will be displayed on the screen for confirmation.In each tasks, you can define the operation tasks by hash object. The hash key is the type of command to execute. Select from the table below. The hash value is an array of shell commands to execute.
Not all properties are required, and a task can be formed with only one of `execute_commands`,` check_commands` and `import`.|Property |Description |
|:--- |:--- |
|execute_commands |Describes shell commands to be executed on the target host by array format. You can check the operation result with the choices (yes / no / reconfirm / skip) when executing each commands. After each command sexecution, it moves to the next command.|
|check_commands |Write an array of commands to check the execution result of `execute_commands`. After executing each confirmation command, a choice (yes / no / reconfirm) will be displayed to confirm whether you can proceed to the next step. You can not execute interactive commands such as `less`.|
|import |You can load and execute commands written in other operation files. In the above example, the command described in touch.yml in the imports directory is executed.|
|vars |You can pass variables to the operation file to be imported by describing them in the same hash as `import`.|
|highlight |The display of the specified string is emphasized when executing `check_commands`.|
### Specify target hostAs with normal capistrano, specify the target host rule in the configuration file (for example, development.rb, staging.rb, production.rb, etc.) under config/deploy/ directory.
For more information, please see [the official documentation](https://github.com/capistrano/capistrano/blob/master/docs/documentation/getting-started/preparing-your-application/index.markdown) for capistrano.
#### Example
```ruby:dev.rb
server "192.168.33.10", user: "vagrant", roles: %w{any}, keys: '~/.ssh/id_rsa'
```#### (Reference) About host configuration parameters
|Property |Description |
|:--- |:--- |
|server |Target host name or IP address |
|user |Command execution user name |
|roles |Host role |
|keys |The authentication key required when executing a command via ssh |## Development
$ git clone https://github.com/iij/capistrano-operator
$ cd capistrano-operator### How the development environment works
launch vagrant (Target host):$ vagrant up
Confirming launch of vagrant:
$ vagrant ssh
$ ip addIf vagrant does not have an IP address of 192.168.33.10:
$ sudo service network restart
Running capistrano:
$ bundle install
$ bundle update
$ bundle exec cap dev test:ping
(It is all right if ping:true and hostname are displayed.)## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/iij/capistrano-operator.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).